projects/imx6/patches/linux: udoo system support

This commit is contained in:
vpeter4 2015-05-14 20:25:32 +02:00
parent 999b8c25a8
commit 7eef203fe3
5 changed files with 798 additions and 1 deletions

View File

@ -2127,8 +2127,10 @@ CONFIG_POWER_SUPPLY=y
# CONFIG_CHARGER_BQ24735 is not set
# CONFIG_CHARGER_SMB347 is not set
# CONFIG_IMX6_USB_CHARGER is not set
# CONFIG_POWER_RESET is not set
CONFIG_POWER_RESET=y
# CONFIG_POWER_RESET_GPIO is not set
# CONFIG_POWER_RESET_RESTART is not set
CONFIG_POWER_RESET_UDOO=y
# CONFIG_POWER_AVS is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set

View File

@ -0,0 +1,10 @@
--- a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-11-25 19:23:06.332485391 +0100
+++ b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2014-11-25 19:23:24.675776865 +0100
@@ -31,6 +31,7 @@
label = "imx6:red:front";
max-brightness = <248>;
pwms = <&pwm1 0 50000>;
+ linux,default-trigger = "heartbeat";
};
};

View File

@ -0,0 +1,161 @@
From 7938bdb186ed300a8de0d78dff514f3c43209bc1 Mon Sep 17 00:00:00 2001
From: vpeter4 <peter.vicman@gmail.com>
Date: Wed, 10 Dec 2014 11:58:19 +0100
Subject: [PATCH] chipidea: ci_hdrc_imx: Allow handling the clock for an USB
phy/hub
for file ci_hdrc_imx.c
1-2-chipidea-ci_hdrc_imx-Allow-handling-the-clock-for-an-USB-phy-hub.patch
for file usbmisc_imx.c
unknown patch (used from https://github.com/mtx512/linux-imx/commits/imx_3.10.17_1.0.0_beta-udoo)
Subject: [1/2] chipidea: ci_hdrc_imx: Allow handling the clock for an USB
phy/hub
From: Fabio Estevam <festevam@gmail.com>
Date: Thu, 14 Nov 2013 00:09:46 -0200
When using external USB PHY or USB hub, it is common that they require a clock
input.
Add a 'clk_phy' clock, so that it can be retrieved from the device tree and
enabled in the driver, so that the clock can properly drive the external
USB phy/hub.
Tested on a imx6q-udoo board, that connects via USBH1 to a USB2514 hub.
In this board the USB2514 is clocked from a 24MHz clock that comes from the
imx6q CLKO2 pin.
---
.../devicetree/bindings/usb/ci-hdrc-imx.txt | 2 ++
.../drivers/usb/chipidea/ci_hdrc_imx.c | 20 +++++++++++++++++++-
.../drivers/usb/chipidea/usbmisc_imx.c | 18 ++++++++++++++++++
3 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt b/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt
index b4b5b79..07ba38c 100644
--- a/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt
+++ b/Documentation/devicetree/bindings/usb/ci-hdrc-imx.txt
@@ -18,6 +18,8 @@ Optional properties:
- vbus-supply: regulator for vbus
- disable-over-current: disable over current detect
- external-vbus-divider: enables off-chip resistor divider for Vbus
+- clocks: phandle to the clock that drives the USB hub
+- clock-names: must be "phy"
Examples:
usb@02184000 { /* USB OTG */
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
index de6b965..4e621fd 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -68,6 +68,7 @@ struct ci_hdrc_imx_data {
struct usb_phy *phy;
struct platform_device *ci_pdev;
struct clk *clk;
+ struct clk *clk_phy;
struct imx_usbmisc_data *usbmisc_data;
bool supports_runtime_pm;
bool in_lpm;
@@ -155,10 +156,22 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
return ret;
}
+ data->clk_phy = devm_clk_get(&pdev->dev, "phy");
+ if (IS_ERR(data->clk_phy)) {
+ data->clk_phy = NULL;
+ } else {
+ ret = clk_prepare_enable(data->clk_phy);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Failed to enable clk_phy: %d\n", ret);
+ goto err_clk;
+ }
+ }
+
data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0);
if (IS_ERR(data->phy)) {
ret = PTR_ERR(data->phy);
- goto err_clk;
+ goto err_clk_phy;
}
pdata.phy = data->phy;
@@ -234,6 +247,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
disable_device:
ci_hdrc_remove_device(data->ci_pdev);
+err_clk_phy:
+ if (data->clk_phy)
+ clk_disable_unprepare(data->clk_phy);
err_clk:
clk_disable_unprepare(data->clk);
release_bus_freq(BUS_FREQ_HIGH);
@@ -246,6 +262,8 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
ci_hdrc_remove_device(data->ci_pdev);
+ if (data->clk_phy)
+ clk_disable_unprepare(data->clk_phy);
clk_disable_unprepare(data->clk);
release_bus_freq(BUS_FREQ_HIGH);
diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c
index 683bcec..86fd7e6 100644
--- a/drivers/usb/chipidea/usbmisc_imx.c
+++ b/drivers/usb/chipidea/usbmisc_imx.c
@@ -11,6 +11,7 @@
#include <linux/module.h>
#include <linux/of_platform.h>
+#include <linux/clk.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/delay.h>
@@ -50,6 +51,7 @@ struct usbmisc_ops {
struct imx_usbmisc {
void __iomem *base;
spinlock_t lock;
+ struct clk *clk;
const struct usbmisc_ops *ops;
};
@@ -281,6 +283,7 @@ static int usbmisc_imx_probe(struct platform_device *pdev)
{
struct resource *res;
struct imx_usbmisc *data;
+ int ret;
struct of_device_id *tmp_dev;
if (usbmisc)
@@ -297,6 +300,20 @@ static int usbmisc_imx_probe(struct platform_device *pdev)
if (IS_ERR(data->base))
return PTR_ERR(data->base);
+ data->clk = devm_clk_get(&pdev->dev, NULL);
+ if (IS_ERR(data->clk)) {
+ dev_err(&pdev->dev,
+ "failed to get clock, err=%ld\n", PTR_ERR(data->clk));
+ return PTR_ERR(data->clk);
+ }
+
+ ret = clk_prepare_enable(data->clk);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "clk_prepare_enable failed, err=%d\n", ret);
+ return ret;
+ }
+
tmp_dev = (struct of_device_id *)
of_match_device(usbmisc_imx_dt_ids, &pdev->dev);
data->ops = (const struct usbmisc_ops *)tmp_dev->data;
@@ -319,6 +336,7 @@ static int usbmisc_imx_probe(struct platform_device *pdev)
static int usbmisc_imx_remove(struct platform_device *pdev)
{
+ clk_disable_unprepare(usbmisc->clk);
usbmisc = NULL;
return 0;
}
--
1.8.1.2

View File

@ -0,0 +1,185 @@
From 1bc304cd507fe9eb5673223f0d76ec0aa4ff55f3 Mon Sep 17 00:00:00 2001
From: mxt512 <mtx512@yahoo.co.uk>
Date: Thu, 13 Feb 2014 20:13:27 +0000
Subject: [PATCH] Add poweroff driver.
Existing pm_power_off function was in rtc-snvs. Given we need to reset the SAM3X and turn off
the 5v supply on power down, lets implement a power-off driver to do this for now.
TODO: Not the cleanest solution but it works, should revisit.
Overwriting power_off function with udoo_power_off in case uddo is used.
---
arch/arm/boot/dts/imx6q-udoo.dts | 6 ++
drivers/power/reset/Kconfig | 8 +++
drivers/power/reset/Makefile | 1 +
drivers/power/reset/udoo-poweroff.c | 114 ++++++++++++++++++++++++++++++++++++
4 files changed, 129 insertions(+)
create mode 100644 drivers/power/reset/udoo-poweroff.c
diff --git a/arch/arm/boot/dts/imx6q-udoo.dts b/arch/arm/boot/dts/imx6q-udoo.dts
index 7cc0267..1b8cce1 100644
--- a/arch/arm/boot/dts/imx6q-udoo.dts
+++ b/arch/arm/boot/dts/imx6q-udoo.dts
@@ -23,6 +23,12 @@
memory {
reg = <0x10000000 0x40000000>;
};
+
+ poweroff {
+ compatible = "udoo,poweroff";
+ sam3x_rst_gpio = <&gpio1 0 0>;
+ pwr_5v_gpio = <&gpio2 4 0>;
+ };
};
&fec {
diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
index 6d452a7..1a0620f 100644
--- a/drivers/power/reset/Kconfig
+++ b/drivers/power/reset/Kconfig
@@ -57,3 +57,11 @@ config POWER_RESET_XGENE
depends on POWER_RESET
help
Reboot support for the APM SoC X-Gene Eval boards.
+
+config POWER_RESET_UDOO
+ bool "UDOO power-off driver"
+ depends on POWER_RESET
+ help
+ This driver supports powering down the UDOO.
+ Say Y if you have a UDOO.
+
diff --git a/drivers/power/reset/Makefile b/drivers/power/reset/Makefile
index a5b4a77..b98df20 100644
--- a/drivers/power/reset/Makefile
+++ b/drivers/power/reset/Makefile
@@ -4,4 +4,5 @@ obj-$(CONFIG_POWER_RESET_MSM) += msm-poweroff.o
obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o
obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
+obj-$(CONFIG_POWER_RESET_UDOO) += udoo-poweroff.o
obj-$(CONFIG_POWER_RESET_XGENE) += xgene-reboot.o
diff --git a/drivers/power/reset/udoo-poweroff.c b/drivers/power/reset/udoo-poweroff.c
new file mode 100644
index 0000000..0255401
--- /dev/null
+++ b/drivers/power/reset/udoo-poweroff.c
@@ -0,0 +1,115 @@
+/*
+ * UDOO board power off
+ *
+ *
+ * Copyright (C) 2014 Jasbir Matharu
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/platform_device.h>
+#include <linux/module.h>
+#include <linux/io.h>
+#include <linux/gpio.h>
+#include <linux/delay.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/of_gpio.h>
+
+#define SNVS_LPCR 0x04
+
+static int sam3x_rst_gpio,pwr_5v_gpio;
+
+static void udoo_power_off(void) {
+ struct device_node *snvs_np;
+ void __iomem *mx6_snvs_base;
+ u32 value;
+
+ pr_info("Powering off udoo\n");
+
+ snvs_np = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0-mon-rtc-lp");
+ if (!snvs_np) {
+ pr_err("%s: failed to find sec-v4.0-mon-rtc-lp node\n",__func__);
+ return;
+ }
+
+ mx6_snvs_base = of_iomap(snvs_np, 0);
+ if (!mx6_snvs_base) {
+ pr_err("%s: failed to map sec-v4.0-mon-rtc-lp\n",__func__);
+ goto put_snvs_node;
+ }
+
+ value = readl(mx6_snvs_base + SNVS_LPCR);
+ /*set TOP and DP_EN bit*/
+ writel(value | 0x60, mx6_snvs_base + SNVS_LPCR);
+
+ gpio_request_one(sam3x_rst_gpio, GPIOF_OUT_INIT_LOW,"sam3x_rst_gpio"),
+ msleep(5);
+ gpio_request_one(pwr_5v_gpio, GPIOF_OUT_INIT_HIGH,"pwr_5v_gpio");
+
+put_snvs_node:
+ of_node_put(snvs_np);
+}
+
+static int udoo_power_off_probe(struct platform_device *pdev)
+{
+ struct device_node *pwr_off_np;
+
+ pwr_off_np = of_find_compatible_node(NULL, NULL, "udoo,poweroff");
+ if (pwr_off_np) {
+ of_node_put(pwr_off_np);
+ /* udoo dtb loaded, run poweroff function from
+ here and not snvs_poweroff */
+ pr_err("%s: pm_power_off function already registered, overwriting with ours", __func__);
+
+ sam3x_rst_gpio = of_get_named_gpio(pdev->dev.of_node, "sam3x_rst_gpio", 0);
+ pwr_5v_gpio = of_get_named_gpio(pdev->dev.of_node, "pwr_5v_gpio", 0);
+ if (gpio_is_valid(sam3x_rst_gpio) && gpio_is_valid(pwr_5v_gpio)) {
+ } else {
+ pr_err("%s : failed to find sam3x_rst_gpio or pwr_5v_gpio property \n",__func__);
+ return ENOENT;
+ }
+
+ pm_power_off = udoo_power_off;
+ pr_info("%s: ok\n",__func__);
+ return 0;
+ }
+
+ /* If a pm_power_off function has already been added, leave it alone */
+ if (pm_power_off != NULL) {
+ pr_err("%s: pm_power_off function already registered",
+ __func__);
+ return -EBUSY;
+ }
+
+ return -ENODEV;
+}
+
+static int udoo_power_off_remove(struct platform_device *pdev)
+{
+ return 0;
+}
+
+static const struct of_device_id power_off_dt_ids[] = {
+ { .compatible = "udoo,poweroff", },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, power_off_dt_ids);
+
+static struct platform_driver udoo_power_off_driver = {
+ .driver = {
+ .name = "udoo_power_off",
+ .owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(power_off_dt_ids),
+ },
+ .probe = udoo_power_off_probe,
+ .remove = udoo_power_off_remove,
+};
+module_platform_driver(udoo_power_off_driver);
+
+MODULE_AUTHOR("Jasbir Matharu");
+MODULE_DESCRIPTION("UDOO Power off driver");
+MODULE_LICENSE("GPL v2");
--
1.8.1.2

View File

@ -0,0 +1,439 @@
From be220380dbd0a899ff49434d1b0c68c9b07830b6 Mon Sep 17 00:00:00 2001
From: vpeter4 <peter.vicman@gmail.com>
Date: Thu, 11 Dec 2014 18:37:24 +0100
Subject: [PATCH] udoo quad device tree
---
arch/arm/boot/dts/imx6q-udoo.dts | 350 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 343 insertions(+), 7 deletions(-)
diff --git a/arch/arm/boot/dts/imx6q-udoo.dts b/arch/arm/boot/dts/imx6q-udoo.dts
index 1b8cce1..83b9a62 100644
--- a/arch/arm/boot/dts/imx6q-udoo.dts
+++ b/arch/arm/boot/dts/imx6q-udoo.dts
@@ -2,6 +2,10 @@
* Copyright 2013 Freescale Semiconductor, Inc.
*
* Author: Fabio Estevam <fabio.estevam@freescale.com>
+ *
+ * Copyright (C) 2014 Jasbir
+ * Copyright (C) 2014 udoo team
+ * Copyright (C) 2014 vpeter
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -16,14 +20,166 @@
model = "Udoo i.MX6 Quad Board";
compatible = "udoo,imx6q-udoo", "fsl,imx6q";
- chosen {
- stdout-path = &uart2;
+ aliases {
+ mxcfb0 = &mxcfb1;
+ mxcfb1 = &mxcfb2;
+ mxcfb2 = &mxcfb3;
+ mxcfb3 = &mxcfb4;
};
+ chosen {
+ stdout-path = &uart1;
+ };
+
memory {
reg = <0x10000000 0x40000000>;
};
+ regulators {
+ compatible = "simple-bus";
+
+ reg_2p5v: 2p5v {
+ compatible = "regulator-fixed";
+ regulator-name = "2P5V";
+ regulator-min-microvolt = <2500000>;
+ regulator-max-microvolt = <2500000>;
+ regulator-always-on;
+ };
+
+ reg_3p3v: 3p3v {
+ compatible = "regulator-fixed";
+ regulator-name = "3P3V";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
+
+ aux_5v: aux5v {
+ compatible = "regulator-fixed";
+ regulator-name = "AUX_5V";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&gpio6 10 1>;
+ regulator-boot-on;
+ enable-active-high;
+ };
+
+ reg_sensor: sensor_supply {
+ compatible = "regulator-fixed";
+ regulator-name = "sensor-SUPPLY";
+ enable-active-high;
+ };
+
+ reg_usb_otg_vbus: usb_otg_vbus {
+ compatible = "regulator-fixed";
+ regulator-name = "usb_otg_vbus";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ enable-active-high;
+ };
+
+ reg_usb_h1_vbus: usb_h1_vbus {
+ compatible = "regulator-fixed";
+ regulator-name = "usb_h1_vbus";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ enable-active-high;
+ startup-delay-us = <2>; /* USB2415 requires a POR of 1 us minimum */
+ gpio = <&gpio7 12 0>;
+ };
+ };
+
+ mxcfb1: fb@0 {
+ compatible = "fsl,mxc_sdc_fb";
+ disp_dev = "hdmi";
+ interface_pix_fmt = "RGB24";
+ mode_str ="1920x1080M@60";
+ default_bpp = <24>;
+ int_clk = <0>;
+ late_init = <0>;
+ status = "okay";
+ };
+
+ mxcfb2: fb@1 {
+ compatible = "fsl,mxc_sdc_fb";
+ disp_dev = "hdmi";
+ interface_pix_fmt = "RGB24";
+ mode_str ="1920x1080M@60";
+ default_bpp = <24>;
+ int_clk = <0>;
+ late_init = <0>;
+ status = "disabled";
+ };
+
+ mxcfb3: fb@2 {
+ compatible = "fsl,mxc_sdc_fb";
+ disp_dev = "hdmi";
+ interface_pix_fmt = "RGB24";
+ mode_str ="1920x1080M@60";
+ default_bpp = <24>;
+ int_clk = <0>;
+ late_init = <0>;
+ status = "disabled";
+ };
+
+ mxcfb4: fb@3 {
+ compatible = "fsl,mxc_sdc_fb";
+ disp_dev = "hdmi";
+ interface_pix_fmt = "RGB24";
+ mode_str ="1920x1080M@60";
+ default_bpp = <24>;
+ int_clk = <0>;
+ late_init = <0>;
+ status = "disabled";
+ };
+
+ codec: vt1613 {
+ compatible = "wlf,vt1613";
+ amic-mono;
+ };
+
+ sound {
+ compatible = "fsl,imx6q-udoo-vt1613",
+ "fsl,imx-audio-vt1613";
+ model = "vt1613-audio";
+ ssi-controller = <&ssi1>;
+ audio-codec = <&codec>;
+ audio-routing =
+ "Headphone Jack", "HPOUTL",
+ "Headphone Jack", "HPOUTR",
+ "Ext Spk", "SPKOUTL",
+ "Ext Spk", "SPKOUTR",
+ "MICBIAS", "AMIC",
+ "IN3R", "MICBIAS",
+ "DMIC", "MICBIAS",
+ "DMICDAT", "DMIC";
+ mux-int-port = <1>;
+ mux-ext-port = <6>;
+ };
+// hp-det-gpios = <&gpio7 8 1>;
+// mic-det-gpios = <&gpio1 9 1>;
+
+ sound-hdmi {
+ compatible = "fsl,imx6q-audio-hdmi",
+ "fsl,imx-audio-hdmi";
+ model = "imx-audio-hdmi";
+ hdmi-controller = <&hdmi_audio>;
+ };
+
+ sound-spdif {
+ compatible = "fsl,imx-audio-spdif",
+ "fsl,imx-sabreauto-spdif";
+ model = "imx-spdif";
+ spdif-controller = <&spdif>;
+ spdif-in;
+ status = "disabled";
+ };
+
+ v4l2_out {
+ compatible = "fsl,mxc_v4l2_output";
+ status = "okay";
+ };
+
poweroff {
compatible = "udoo,poweroff";
sam3x_rst_gpio = <&gpio1 0 0>;
@@ -31,6 +187,55 @@
};
};
+&hdmi_audio {
+ status = "okay";
+};
+
+&hdmi_core {
+ ipu_id = <0>;
+ disp_id = <0>;
+ status = "okay";
+};
+
+&hdmi_video {
+ fsl,phy_reg_vlev = <0x0294>;
+ fsl,phy_reg_cksymtx = <0x800d>;
+ status = "okay";
+};
+
+&i2c1 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c1_2>;
+ status = "okay";
+};
+
+&i2c2 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c2_2>;
+ status = "okay";
+
+ egalax_ts@04 {
+ compatible = "eeti,egalax_ts";
+ reg = <0x04>;
+ interrupt-parent = <&gpio2>;
+ interrupts = <28 2>;
+ wakeup-gpios = <&gpio2 28 0>;
+ };
+
+ hdmi: edid@50 {
+ compatible = "fsl,imx6-hdmi-i2c";
+ reg = <0x50>;
+ };
+};
+
+&i2c3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c3_5>;
+ status = "okay";
+};
+
&fec {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet>;
@@ -39,9 +244,68 @@
};
&iomuxc {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_hog>;
+
imx6q-udoo {
- pinctrl_enet: enetgrp {
+ pinctrl_hog: hoggrp {
fsl,pins = <
+ MX6QDL_PAD_NANDF_D4__GPIO2_IO04 0x80000000 /* 5v enable */
+ MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000 /* Vtt suspend */
+ MX6QDL_PAD_SD2_DAT0__GPIO1_IO15 0x80000000 /* touch reset */
+ MX6QDL_PAD_EIM_EB2__GPIO2_IO30 0x80000000 /* audio reset */
+ MX6QDL_PAD_EIM_EB3__GPIO2_IO31 0x80000000 /* ethernet power */
+
+ MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 /* usb hub reset */
+ MX6QDL_PAD_NANDF_CS2__CCM_CLKO2 0x130b0 /* clk usb hub */
+ MX6QDL_PAD_EIM_WAIT__GPIO5_IO00 0xb0b1 /* usb otg select */
+
+ MX6QDL_PAD_NANDF_D5__GPIO2_IO05 0x80000000 /* sdcard power */
+ MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000 /* sd card detect */
+ MX6QDL_PAD_DISP0_DAT5__GPIO4_IO26 0x80000000 /* select dbg uart*/
+ MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x80000000 /* SAM3X reset */
+ MX6QDL_PAD_DISP0_DAT0__GPIO4_IO21 0x30b1 /* SAM3X erase */
+ MX6QDL_PAD_GPIO_16__GPIO7_IO11 0xb0b1 /* SAM3X vbus_en */
+ MX6QDL_PAD_SD4_DAT7__GPIO2_IO15 0x80000000 /* SAM3X usb host */
+ MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 /* panel on */
+ MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000 /* backlight on */
+ MX6QDL_PAD_CSI0_DAT19__GPIO6_IO05 0x80000000 /* camera reset */
+ MX6QDL_PAD_CSI0_DAT18__GPIO6_IO04 0x80000000 /* camera enable */
+ MX6QDL_PAD_CSI0_PIXCLK__GPIO5_IO18 0x80000000 /* input mon serial*/
+ MX6QDL_PAD_CSI0_DAT17__GPIO6_IO03 0x80000000 /* input mon serial*/
+ MX6QDL_PAD_EIM_A19__GPIO2_IO19 0x80000000 /* writeprotect spi*/
+ MX6QDL_PAD_GPIO_3__GPIO1_IO03 0x30b1 /* arduino pinout */
+
+ MX6QDL_PAD_DI0_PIN2__AUD6_TXD 0x80000000 /* audio audmux */
+ MX6QDL_PAD_DI0_PIN3__AUD6_TXFS 0x80000000 /* audio audmux */
+ MX6QDL_PAD_DI0_PIN4__AUD6_RXD 0x80000000 /* audio audmux */
+ MX6QDL_PAD_DI0_PIN15__AUD6_TXC 0x80000000 /* audio audmux */
+ >;
+ };
+
+ pinctrl_i2c1_2: i2c1grp-2 {
+ fsl,pins = <
+ MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
+ MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
+ >;
+ };
+
+ pinctrl_i2c2_2: i2c2grp-2 {
+ fsl,pins = <
+ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
+ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
+ >;
+ };
+
+ pinctrl_i2c3_5: i2c3grp-5 {
+ fsl,pins = <
+ MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1
+ MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
+ >;
+ };
+
+ pinctrl_enet: enetgrp {
+ fsl,pins = <
MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
@@ -57,10 +321,10 @@
MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
- MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
+ MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000 /* reset */
>;
};
-
+
pinctrl_uart2: uart2grp {
fsl,pins = <
MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
@@ -68,19 +332,51 @@
>;
};
+ pinctrl_uart4: uart4grp {
+ fsl,pins = <
+ MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
+ MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
+ >;
+ };
+
pinctrl_usdhc3: usdhc3grp {
fsl,pins = <
- MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
- MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
+ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
+ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
>;
};
+
+ pinctrl_i2c3_1: i2c3grp-1 {
+ fsl,pins = <
+ MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
+ MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
+ >;
+ };
+
+ pinctrl_spdif_1: spdifgrp-1 {
+ fsl,pins = <
+ MX6QDL_PAD_KEY_COL3__SPDIF_IN 0x1b0b0
+ >;
+ };
+
+ /*pinctrl_hdmi_cec_1: hdmicecgrp-1 {
+ fsl,pins = <
+ MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE 0x1f8b0
+ >;
+ };*/
};
};
+&spdif {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_spdif_1>;
+ status = "disabled";
+};
+
&sata {
status = "okay";
};
@@ -91,9 +387,49 @@
status = "okay";
};
+&uart4 { /* sam3x port */
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_uart4>;
+ status = "okay";
+};
+
&usdhc3 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc3>;
non-removable;
+ keep-power-in-suspend;
+ status = "okay";
+};
+
+&usbotg {
+ status = "disabled";
+};
+
+&usbh1 {
+ vbus-supply = <&reg_usb_h1_vbus>;
+ clocks = <&clks 201>;
+ clock-names = "phy";
+ status = "okay";
+};
+
+&hdmi_cec {
+ /*pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_hdmi_cec_1>;*/
+ status = "disabled";
+};
+
+&mxcfb1 {
+ status = "okay";
+};
+
+&mxcfb2 {
+ status = "okay";
+};
+
+&mxcfb3 {
+ status = "okay";
+};
+
+&mxcfb4 {
status = "okay";
};
--
1.8.1.2