From 7eef203fe39ddaa8615e211ebdeafb5894a8352c Mon Sep 17 00:00:00 2001 From: vpeter4 Date: Thu, 14 May 2015 20:25:32 +0200 Subject: [PATCH] projects/imx6/patches/linux: udoo system support --- projects/imx6/linux/linux.arm.conf | 4 +- .../linux-320-cuboxi_led_heartbeat.patch | 10 + ...oo-chipidea-clock-for-an-USB-phy-hub.patch | 161 +++++++ .../linux-331-udoo-poweroff-driver.patch | 185 ++++++++ .../linux/linux-332-udoo-device_tree.patch | 439 ++++++++++++++++++ 5 files changed, 798 insertions(+), 1 deletion(-) create mode 100644 projects/imx6/patches/linux/linux-320-cuboxi_led_heartbeat.patch create mode 100644 projects/imx6/patches/linux/linux-330-udoo-chipidea-clock-for-an-USB-phy-hub.patch create mode 100644 projects/imx6/patches/linux/linux-331-udoo-poweroff-driver.patch create mode 100644 projects/imx6/patches/linux/linux-332-udoo-device_tree.patch diff --git a/projects/imx6/linux/linux.arm.conf b/projects/imx6/linux/linux.arm.conf index 229697034e..9df37a778a 100644 --- a/projects/imx6/linux/linux.arm.conf +++ b/projects/imx6/linux/linux.arm.conf @@ -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 diff --git a/projects/imx6/patches/linux/linux-320-cuboxi_led_heartbeat.patch b/projects/imx6/patches/linux/linux-320-cuboxi_led_heartbeat.patch new file mode 100644 index 0000000000..e65e4bd519 --- /dev/null +++ b/projects/imx6/patches/linux/linux-320-cuboxi_led_heartbeat.patch @@ -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"; + }; + }; + diff --git a/projects/imx6/patches/linux/linux-330-udoo-chipidea-clock-for-an-USB-phy-hub.patch b/projects/imx6/patches/linux/linux-330-udoo-chipidea-clock-for-an-USB-phy-hub.patch new file mode 100644 index 0000000000..a94f5d9126 --- /dev/null +++ b/projects/imx6/patches/linux/linux-330-udoo-chipidea-clock-for-an-USB-phy-hub.patch @@ -0,0 +1,161 @@ +From 7938bdb186ed300a8de0d78dff514f3c43209bc1 Mon Sep 17 00:00:00 2001 +From: vpeter4 +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 +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 + #include ++#include + #include + #include + #include +@@ -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 diff --git a/projects/imx6/patches/linux/linux-331-udoo-poweroff-driver.patch b/projects/imx6/patches/linux/linux-331-udoo-poweroff-driver.patch new file mode 100644 index 0000000000..333bbd4640 --- /dev/null +++ b/projects/imx6/patches/linux/linux-331-udoo-poweroff-driver.patch @@ -0,0 +1,185 @@ +From 1bc304cd507fe9eb5673223f0d76ec0aa4ff55f3 Mon Sep 17 00:00:00 2001 +From: mxt512 +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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#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 diff --git a/projects/imx6/patches/linux/linux-332-udoo-device_tree.patch b/projects/imx6/patches/linux/linux-332-udoo-device_tree.patch new file mode 100644 index 0000000000..7d6216cde0 --- /dev/null +++ b/projects/imx6/patches/linux/linux-332-udoo-device_tree.patch @@ -0,0 +1,439 @@ +From be220380dbd0a899ff49434d1b0c68c9b07830b6 Mon Sep 17 00:00:00 2001 +From: vpeter4 +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 ++ * ++ * 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 = <®_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 +