This series adds a devicetree for the i.MX507-based Kobo Aura e-book
reader, and fixes a few things in imx50.dtsi along the way.
A lot of functionality is still missing:
- poweroff/reboot, RTC, and battery monitoring support, as well as a PWM
channel for the display backlight are provided by a custom embedded
controller, which will be supported by a future patchset.
The EC driver will also tell the EC to keep the board powered on;
otherwise the EC will power the board off after about ten seconds
(presumably to avoid battery drain if the OS is missing or corrupted)
- The touchscreen controller, eKTF2132, currently doesn't have a
mainline driver.
- The e-paper display controller (EPDC) embedded in the i.MX50 SoC will
need a whole new DRM driver, devicetree bindings, etc.
- The TPS65185 PMIC, which generates the voltages necessary for driving
the E Ink panel, also needs a driver
- The backlight doesn't quite fit the existing pwm-backlight DT binding,
because it uses an additional GPIO to boost the brightness. This
requires some devicetree work
- Linux doesn't currently support suspend-to-ram on i.MX50
In order to keep the system running when CONFIG_PM is enabled, the
following fix is also required:
https://lore.kernel.org/lkml/[email protected]/
My own notes about this machine can be found here:
https://github.com/neuschaefer/linux/wiki/Kobo-Aura
Jonathan Neuschäfer (5):
dt-bindings: Add vendor prefix for Rakuten Kobo, Inc.
ARM: dts: imx50: Add Kobo Aura DTS
ARM: dts: imx50: Add PHY node for usbotg and adjust clocks
ARM: dts: imx50-kobo-aura: Enable USB support
ARM: dts: imx50: Fix the numbering of the I2C controllers
.../devicetree/bindings/vendor-prefixes.txt | 1 +
arch/arm/boot/dts/Makefile | 3 +-
arch/arm/boot/dts/imx50-kobo-aura.dts | 263 ++++++++++++++++++
arch/arm/boot/dts/imx50.dtsi | 14 +-
4 files changed, 279 insertions(+), 2 deletions(-)
create mode 100644 arch/arm/boot/dts/imx50-kobo-aura.dts
--
2.20.1
Even though the ChipIdea USB controller binding[1] doesn't specify the
properties that reference a PHY as required, the Linux driver
requires[2] such a reference.
The clock situation is like on i.MX53: The USB controller is clocked
from IMX5_CLK_USBOH3_GATE and the PHY from IMX5_CLK_USB_PHY1_GATE.
[1]: Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
[2]: Search for EINVAL in drivers/usb/chipidea/ci_hdrc_imx.c
Signed-off-by: Jonathan Neuschäfer <[email protected]>
---
arch/arm/boot/dts/imx50.dtsi | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi
index ee1e3e8bf4ec..e5632ce24ba0 100644
--- a/arch/arm/boot/dts/imx50.dtsi
+++ b/arch/arm/boot/dts/imx50.dtsi
@@ -76,6 +76,14 @@
};
};
+ usbphy0: usbphy-0 {
+ compatible = "usb-nop-xceiv";
+ clocks = <&clks IMX5_CLK_USB_PHY1_GATE>;
+ clock-names = "main_clk";
+ #phy-cells = <0>;
+ status = "okay";
+ };
+
soc {
#address-cells = <1>;
#size-cells = <1>;
@@ -187,7 +195,8 @@
compatible = "fsl,imx50-usb", "fsl,imx27-usb";
reg = <0x53f80000 0x0200>;
interrupts = <18>;
- clocks = <&clks IMX5_CLK_USB_PHY1_GATE>;
+ clocks = <&clks IMX5_CLK_USBOH3_GATE>;
+ fsl,usbphy = <&usbphy0>;
status = "disabled";
};
--
2.20.1
The Kobo Aura is an e-book reader released in 2013.
With the devicetree in its current state, the kernel will boot and run
for about ten seconds. To solve this, the embedded controller needs to
be told that the system should stay powered on. This will be done in a
later patchset.
- The IOMUXC mode bits for the SD interfaces were taken from the
vendor's U-Boot fork.
- The bus width of the eMMC is 4 bits in the vendor kernel, but I
achieved better performance with 8 bits.
- The SDIO clock frequency for the WiFi chip is 25MHz in the vendor
kernel, but the WiFi chip (BCM43362) supports 50MHz, which works
reliably on this board and gives slightly better performance.
- The I2C pins' IOMUXC settings come from the vendor's U-Boot fork.
Signed-off-by: Jonathan Neuschäfer <[email protected]>
---
arch/arm/boot/dts/Makefile | 3 +-
arch/arm/boot/dts/imx50-kobo-aura.dts | 245 ++++++++++++++++++++++++++
2 files changed, 247 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/boot/dts/imx50-kobo-aura.dts
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index f4f5aeaf3298..0c85156c552b 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -363,7 +363,8 @@ dtb-$(CONFIG_SOC_IMX35) += \
imx35-eukrea-mbimxsd35-baseboard.dtb \
imx35-pdk.dtb
dtb-$(CONFIG_SOC_IMX50) += \
- imx50-evk.dtb
+ imx50-evk.dtb \
+ imx50-kobo-aura.dtb
dtb-$(CONFIG_SOC_IMX51) += \
imx51-apf51.dtb \
imx51-apf51dev.dtb \
diff --git a/arch/arm/boot/dts/imx50-kobo-aura.dts b/arch/arm/boot/dts/imx50-kobo-aura.dts
new file mode 100644
index 000000000000..e778a677c752
--- /dev/null
+++ b/arch/arm/boot/dts/imx50-kobo-aura.dts
@@ -0,0 +1,245 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright 2019 Jonathan Neuschäfer
+//
+// The Kobo Aura e-book reader, model N514. The mainboard is marked as E606F0B.
+
+/dts-v1/;
+#include "imx50.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+ model = "Kobo Aura (N514)";
+ compatible = "kobo,aura", "fsl,imx50";
+
+ chosen {
+ stdout-path = "serial1:115200n8";
+ };
+
+ memory@70000000 {
+ device_type = "memory";
+ reg = <0x70000000 0x10000000>;
+ };
+
+ gpio-leds {
+ compatible = "gpio-leds";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_leds>;
+
+ on {
+ label = "kobo_aura:orange:on";
+ gpios = <&gpio6 24 GPIO_ACTIVE_LOW>;
+ panic-indicator;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_gpiokeys>;
+
+ power {
+ label = "Power Button";
+ gpios = <&gpio4 10 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_POWER>;
+ };
+
+ hallsensor {
+ label = "Hallsensor";
+ gpios = <&gpio5 15 GPIO_ACTIVE_LOW>;
+ linux,code = <0>;
+ linux,input-type = <5>;
+ };
+
+ frontlight {
+ label = "Frontlight";
+ gpios = <&gpio4 1 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_DISPLAYTOGGLE>;
+ };
+ };
+
+ sd2_pwrseq: pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sd2_reset>;
+
+ reset-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
+ };
+
+ sd2_vmmc: gpio-regulator {
+ compatible = "regulator-gpio";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sd2_vmmc>;
+
+ regulator-name = "vmmc";
+ states = <3300000 0>;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ enable-gpio = <&gpio4 12 GPIO_ACTIVE_LOW>;
+ startup-delay-us = <100000>;
+ };
+};
+
+&iomuxc {
+ pinctrl_uart2: uart2 {
+ fsl,pins = <
+ MX50_PAD_UART2_TXD__UART2_TXD_MUX 0x1e4
+ MX50_PAD_UART2_RXD__UART2_RXD_MUX 0x1e4
+ >;
+ };
+
+ pinctrl_i2c1: i2c1 {
+ fsl,pins = <
+ MX50_PAD_I2C1_SCL__I2C1_SCL 0x400001fd
+ MX50_PAD_I2C1_SDA__I2C1_SDA 0x400001fd
+ >;
+ };
+
+ pinctrl_i2c2: i2c2 {
+ fsl,pins = <
+ MX50_PAD_I2C2_SCL__I2C2_SCL 0x400001fd
+ MX50_PAD_I2C2_SDA__I2C2_SDA 0x400001fd
+ >;
+ };
+
+ pinctrl_i2c3: i2c3 {
+ fsl,pins = <
+ MX50_PAD_I2C3_SCL__I2C3_SCL 0x400001fd
+ MX50_PAD_I2C3_SDA__I2C3_SDA 0x400001fd
+ >;
+ };
+
+ pinctrl_leds: leds {
+ fsl,pins = <
+ MX50_PAD_PWM1__GPIO6_24 0x0
+ >;
+ };
+
+ pinctrl_gpiokeys: gpiokeys {
+ fsl,pins = <
+ MX50_PAD_CSPI_MISO__GPIO4_10 0x0
+ MX50_PAD_SD2_D7__GPIO5_15 0x0
+ MX50_PAD_KEY_ROW0__GPIO4_1 0x0
+ >;
+ };
+
+ pinctrl_sd1: sd1 {
+ fsl,pins = <
+ MX50_PAD_SD1_CMD__ESDHC1_CMD 0x1e4
+ MX50_PAD_SD1_CLK__ESDHC1_CLK 0xd4
+ MX50_PAD_SD1_D0__ESDHC1_DAT0 0x1d4
+ MX50_PAD_SD1_D1__ESDHC1_DAT1 0x1d4
+ MX50_PAD_SD1_D2__ESDHC1_DAT2 0x1d4
+ MX50_PAD_SD1_D3__ESDHC1_DAT3 0x1d4
+
+ MX50_PAD_SD2_CD__GPIO5_17 0x0
+ >;
+ };
+
+ pinctrl_sd2: sd2 {
+ fsl,pins = <
+ MX50_PAD_SD2_CMD__ESDHC2_CMD 0x1e4
+ MX50_PAD_SD2_CLK__ESDHC2_CLK 0xd4
+ MX50_PAD_SD2_D0__ESDHC2_DAT0 0x1d4
+ MX50_PAD_SD2_D1__ESDHC2_DAT1 0x1d4
+ MX50_PAD_SD2_D2__ESDHC2_DAT2 0x1d4
+ MX50_PAD_SD2_D3__ESDHC2_DAT3 0x1d4
+ >;
+ };
+
+ pinctrl_sd2_reset: sd2-reset {
+ fsl,pins = <
+ MX50_PAD_ECSPI2_MOSI__GPIO4_17 0x0
+ >;
+ };
+
+ pinctrl_sd2_vmmc: sd2-vmmc {
+ fsl,pins = <
+ MX50_PAD_ECSPI1_SCLK__GPIO4_12 0x0
+ >;
+ };
+
+ pinctrl_sd3: sd3 {
+ fsl,pins = <
+ MX50_PAD_SD3_CMD__ESDHC3_CMD 0x1e4
+ MX50_PAD_SD3_CLK__ESDHC3_CLK 0xd4
+ MX50_PAD_SD3_D0__ESDHC3_DAT0 0x1d4
+ MX50_PAD_SD3_D1__ESDHC3_DAT1 0x1d4
+ MX50_PAD_SD3_D2__ESDHC3_DAT2 0x1d4
+ MX50_PAD_SD3_D3__ESDHC3_DAT3 0x1d4
+ MX50_PAD_SD3_D4__ESDHC3_DAT4 0x1d4
+ MX50_PAD_SD3_D5__ESDHC3_DAT5 0x1d4
+ MX50_PAD_SD3_D6__ESDHC3_DAT6 0x1d4
+ MX50_PAD_SD3_D7__ESDHC3_DAT7 0x1d4
+ >;
+ };
+};
+
+&uart2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_uart2>;
+ status = "okay";
+};
+
+&i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c1>;
+ status = "okay";
+
+ /* TODO: ektf2132 touch controller at 0x15 */
+};
+
+&i2c2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c2>;
+ status = "okay";
+
+ /* TODO: TPS65185 PMIC for E Ink at 0x68 */
+};
+
+&i2c3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c3>;
+ status = "okay";
+
+ /* TODO: embedded controller at 0x43 */
+};
+
+&esdhc1 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sd1>;
+
+ max-frequency = <50000000>;
+ bus-width = <4>;
+ cd-gpios = <&gpio5 17 GPIO_ACTIVE_LOW>;
+ disable-wp;
+
+ /* External µSD card */
+};
+
+&esdhc2 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sd2>;
+
+ bus-width = <4>;
+ max-frequency = <50000000>;
+ disable-wp;
+ mmc-pwrseq = <&sd2_pwrseq>;
+ vmmc-supply = <&sd2_vmmc>;
+
+ /* CyberTan WC121 SDIO WiFi (BCM43362) */
+};
+
+&esdhc3 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sd3>;
+
+ bus-width = <8>;
+ non-removable;
+ max-frequency = <50000000>;
+ disable-wp;
+
+ /* Internal eMMC */
+};
--
2.20.1
Ensure that the i2c buses are reported to userspace (for example to
i2cdetect) in the same order as they are numbered in the SoC's
documentation by adding aliases to the devicetree.
Signed-off-by: Jonathan Neuschäfer <[email protected]>
---
arch/arm/boot/dts/imx50.dtsi | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi
index e5632ce24ba0..8cab0ab3bd4e 100644
--- a/arch/arm/boot/dts/imx50.dtsi
+++ b/arch/arm/boot/dts/imx50.dtsi
@@ -26,6 +26,9 @@
gpio3 = &gpio4;
gpio4 = &gpio5;
gpio5 = &gpio6;
+ i2c0 = &i2c1;
+ i2c1 = &i2c2;
+ i2c2 = &i2c3;
serial0 = &uart1;
serial1 = &uart2;
serial2 = &uart3;
--
2.20.1
Rakuten Kobo, Inc. (formerly Kobo, Inc.) is a company that sells e-book
readers and related products. More information is available at:
- https://en.wikipedia.org/wiki/Kobo_Inc.
- https://www.kobo.com/
Signed-off-by: Jonathan Neuschäfer <[email protected]>
---
Documentation/devicetree/bindings/vendor-prefixes.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 8162b0eb4b50..6cc50f1fac1c 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -210,6 +210,7 @@ kiebackpeter Kieback & Peter GmbH
kinetic Kinetic Technologies
kingdisplay King & Display Technology Co., Ltd.
kingnovel Kingnovel Technology Co., Ltd.
+kobo Rakuten Kobo Inc.
koe Kaohsiung Opto-Electronics Inc.
kosagi Sutajio Ko-Usagi PTE Ltd.
kyo Kyocera Corporation
--
2.20.1
Enable the USBOTG controller in device mode, and also enable the
corresponding PHY. The presence of Vbus is detected via a GPIO.
Signed-off-by: Jonathan Neuschäfer <[email protected]>
---
arch/arm/boot/dts/imx50-kobo-aura.dts | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/arch/arm/boot/dts/imx50-kobo-aura.dts b/arch/arm/boot/dts/imx50-kobo-aura.dts
index e778a677c752..d0dc20d99d99 100644
--- a/arch/arm/boot/dts/imx50-kobo-aura.dts
+++ b/arch/arm/boot/dts/imx50-kobo-aura.dts
@@ -87,6 +87,12 @@
>;
};
+ pinctrl_usbphy: usbphy {
+ fsl,pins = <
+ MX50_PAD_ECSPI2_SS0__GPIO4_19 0x0
+ >;
+ };
+
pinctrl_i2c1: i2c1 {
fsl,pins = <
MX50_PAD_I2C1_SCL__I2C1_SCL 0x400001fd
@@ -180,6 +186,18 @@
status = "okay";
};
+&usbotg {
+ status = "okay";
+ phy_type = "utmi_wide";
+ dr_mode = "peripheral";
+};
+
+&usbphy0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_usbphy>;
+ vbus-detect-gpio = <&gpio4 19 GPIO_ACTIVE_LOW>;
+};
+
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1>;
--
2.20.1
On Tue, Mar 19, 2019 at 04:24:17PM +0100, Jonathan Neusch?fer wrote:
> The Kobo Aura is an e-book reader released in 2013.
>
> With the devicetree in its current state, the kernel will boot and run
> for about ten seconds. To solve this, the embedded controller needs to
> be told that the system should stay powered on. This will be done in a
> later patchset.
>
> - The IOMUXC mode bits for the SD interfaces were taken from the
> vendor's U-Boot fork.
> - The bus width of the eMMC is 4 bits in the vendor kernel, but I
> achieved better performance with 8 bits.
> - The SDIO clock frequency for the WiFi chip is 25MHz in the vendor
> kernel, but the WiFi chip (BCM43362) supports 50MHz, which works
> reliably on this board and gives slightly better performance.
> - The I2C pins' IOMUXC settings come from the vendor's U-Boot fork.
>
> Signed-off-by: Jonathan Neusch?fer <[email protected]>
> ---
> arch/arm/boot/dts/Makefile | 3 +-
> arch/arm/boot/dts/imx50-kobo-aura.dts | 245 ++++++++++++++++++++++++++
> 2 files changed, 247 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/boot/dts/imx50-kobo-aura.dts
>
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index f4f5aeaf3298..0c85156c552b 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -363,7 +363,8 @@ dtb-$(CONFIG_SOC_IMX35) += \
> imx35-eukrea-mbimxsd35-baseboard.dtb \
> imx35-pdk.dtb
> dtb-$(CONFIG_SOC_IMX50) += \
> - imx50-evk.dtb
> + imx50-evk.dtb \
> + imx50-kobo-aura.dtb
> dtb-$(CONFIG_SOC_IMX51) += \
> imx51-apf51.dtb \
> imx51-apf51dev.dtb \
> diff --git a/arch/arm/boot/dts/imx50-kobo-aura.dts b/arch/arm/boot/dts/imx50-kobo-aura.dts
> new file mode 100644
> index 000000000000..e778a677c752
> --- /dev/null
> +++ b/arch/arm/boot/dts/imx50-kobo-aura.dts
> @@ -0,0 +1,245 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// Copyright 2019 Jonathan Neusch?fer
> +//
> +// The Kobo Aura e-book reader, model N514. The mainboard is marked as E606F0B.
> +
> +/dts-v1/;
> +#include "imx50.dtsi"
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> + model = "Kobo Aura (N514)";
> + compatible = "kobo,aura", "fsl,imx50";
Board compatible should also be documented.
> +
> + chosen {
> + stdout-path = "serial1:115200n8";
> + };
> +
> + memory@70000000 {
> + device_type = "memory";
> + reg = <0x70000000 0x10000000>;
> + };
> +
> + gpio-leds {
> + compatible = "gpio-leds";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_leds>;
> +
> + on {
> + label = "kobo_aura:orange:on";
> + gpios = <&gpio6 24 GPIO_ACTIVE_LOW>;
> + panic-indicator;
> + };
> + };
> +
> + gpio-keys {
> + compatible = "gpio-keys";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_gpiokeys>;
> +
> + power {
> + label = "Power Button";
> + gpios = <&gpio4 10 GPIO_ACTIVE_LOW>;
> + linux,code = <KEY_POWER>;
> + };
> +
> + hallsensor {
> + label = "Hallsensor";
> + gpios = <&gpio5 15 GPIO_ACTIVE_LOW>;
> + linux,code = <0>;
Use define KEY_RESERVED?
> + linux,input-type = <5>;
Use define EV_SW?
> + };
> +
> + frontlight {
> + label = "Frontlight";
> + gpios = <&gpio4 1 GPIO_ACTIVE_LOW>;
> + linux,code = <KEY_DISPLAYTOGGLE>;
> + };
> + };
> +
> + sd2_pwrseq: pwrseq {
> + compatible = "mmc-pwrseq-simple";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_sd2_reset>;
> +
Please do not have random newlines.
> + reset-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
> + };
> +
> + sd2_vmmc: gpio-regulator {
> + compatible = "regulator-gpio";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_sd2_vmmc>;
> +
> + regulator-name = "vmmc";
> + states = <3300000 0>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + enable-gpio = <&gpio4 12 GPIO_ACTIVE_LOW>;
> + startup-delay-us = <100000>;
> + };
> +};
> +
> +&iomuxc {
> + pinctrl_uart2: uart2 {
> + fsl,pins = <
> + MX50_PAD_UART2_TXD__UART2_TXD_MUX 0x1e4
> + MX50_PAD_UART2_RXD__UART2_RXD_MUX 0x1e4
> + >;
> + };
> +
> + pinctrl_i2c1: i2c1 {
Please sort these pinctrl nodes alphabetically.
> + fsl,pins = <
> + MX50_PAD_I2C1_SCL__I2C1_SCL 0x400001fd
> + MX50_PAD_I2C1_SDA__I2C1_SDA 0x400001fd
> + >;
> + };
> +
> + pinctrl_i2c2: i2c2 {
> + fsl,pins = <
> + MX50_PAD_I2C2_SCL__I2C2_SCL 0x400001fd
> + MX50_PAD_I2C2_SDA__I2C2_SDA 0x400001fd
> + >;
> + };
> +
> + pinctrl_i2c3: i2c3 {
> + fsl,pins = <
> + MX50_PAD_I2C3_SCL__I2C3_SCL 0x400001fd
> + MX50_PAD_I2C3_SDA__I2C3_SDA 0x400001fd
> + >;
> + };
> +
> + pinctrl_leds: leds {
> + fsl,pins = <
> + MX50_PAD_PWM1__GPIO6_24 0x0
> + >;
> + };
> +
> + pinctrl_gpiokeys: gpiokeys {
> + fsl,pins = <
> + MX50_PAD_CSPI_MISO__GPIO4_10 0x0
> + MX50_PAD_SD2_D7__GPIO5_15 0x0
> + MX50_PAD_KEY_ROW0__GPIO4_1 0x0
> + >;
> + };
> +
> + pinctrl_sd1: sd1 {
> + fsl,pins = <
> + MX50_PAD_SD1_CMD__ESDHC1_CMD 0x1e4
> + MX50_PAD_SD1_CLK__ESDHC1_CLK 0xd4
> + MX50_PAD_SD1_D0__ESDHC1_DAT0 0x1d4
> + MX50_PAD_SD1_D1__ESDHC1_DAT1 0x1d4
> + MX50_PAD_SD1_D2__ESDHC1_DAT2 0x1d4
> + MX50_PAD_SD1_D3__ESDHC1_DAT3 0x1d4
> +
> + MX50_PAD_SD2_CD__GPIO5_17 0x0
> + >;
> + };
> +
> + pinctrl_sd2: sd2 {
> + fsl,pins = <
> + MX50_PAD_SD2_CMD__ESDHC2_CMD 0x1e4
> + MX50_PAD_SD2_CLK__ESDHC2_CLK 0xd4
> + MX50_PAD_SD2_D0__ESDHC2_DAT0 0x1d4
> + MX50_PAD_SD2_D1__ESDHC2_DAT1 0x1d4
> + MX50_PAD_SD2_D2__ESDHC2_DAT2 0x1d4
> + MX50_PAD_SD2_D3__ESDHC2_DAT3 0x1d4
> + >;
> + };
> +
> + pinctrl_sd2_reset: sd2-reset {
> + fsl,pins = <
> + MX50_PAD_ECSPI2_MOSI__GPIO4_17 0x0
> + >;
> + };
> +
> + pinctrl_sd2_vmmc: sd2-vmmc {
> + fsl,pins = <
> + MX50_PAD_ECSPI1_SCLK__GPIO4_12 0x0
> + >;
> + };
> +
> + pinctrl_sd3: sd3 {
> + fsl,pins = <
> + MX50_PAD_SD3_CMD__ESDHC3_CMD 0x1e4
> + MX50_PAD_SD3_CLK__ESDHC3_CLK 0xd4
> + MX50_PAD_SD3_D0__ESDHC3_DAT0 0x1d4
> + MX50_PAD_SD3_D1__ESDHC3_DAT1 0x1d4
> + MX50_PAD_SD3_D2__ESDHC3_DAT2 0x1d4
> + MX50_PAD_SD3_D3__ESDHC3_DAT3 0x1d4
> + MX50_PAD_SD3_D4__ESDHC3_DAT4 0x1d4
> + MX50_PAD_SD3_D5__ESDHC3_DAT5 0x1d4
> + MX50_PAD_SD3_D6__ESDHC3_DAT6 0x1d4
> + MX50_PAD_SD3_D7__ESDHC3_DAT7 0x1d4
> + >;
> + };
> +};
> +
> +&uart2 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_uart2>;
> + status = "okay";
> +};
> +
> +&i2c1 {
Please sort these labeled nodes alphabetically.
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_i2c1>;
> + status = "okay";
> +
> + /* TODO: ektf2132 touch controller at 0x15 */
> +};
> +
> +&i2c2 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_i2c2>;
> + status = "okay";
> +
> + /* TODO: TPS65185 PMIC for E Ink at 0x68 */
> +};
> +
> +&i2c3 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_i2c3>;
> + status = "okay";
> +
> + /* TODO: embedded controller at 0x43 */
> +};
> +
> +&esdhc1 {
> + status = "okay";
We usually end property list with 'status'.
Shawn
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_sd1>;
> +
> + max-frequency = <50000000>;
> + bus-width = <4>;
> + cd-gpios = <&gpio5 17 GPIO_ACTIVE_LOW>;
> + disable-wp;
> +
> + /* External ?SD card */
> +};
> +
> +&esdhc2 {
> + status = "okay";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_sd2>;
> +
> + bus-width = <4>;
> + max-frequency = <50000000>;
> + disable-wp;
> + mmc-pwrseq = <&sd2_pwrseq>;
> + vmmc-supply = <&sd2_vmmc>;
> +
> + /* CyberTan WC121 SDIO WiFi (BCM43362) */
> +};
> +
> +&esdhc3 {
> + status = "okay";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_sd3>;
> +
> + bus-width = <8>;
> + non-removable;
> + max-frequency = <50000000>;
> + disable-wp;
> +
> + /* Internal eMMC */
> +};
> --
> 2.20.1
>
On Tue, Mar 19, 2019 at 04:24:18PM +0100, Jonathan Neusch?fer wrote:
> Even though the ChipIdea USB controller binding[1] doesn't specify the
> properties that reference a PHY as required, the Linux driver
> requires[2] such a reference.
>
> The clock situation is like on i.MX53: The USB controller is clocked
> from IMX5_CLK_USBOH3_GATE and the PHY from IMX5_CLK_USB_PHY1_GATE.
>
> [1]: Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
> [2]: Search for EINVAL in drivers/usb/chipidea/ci_hdrc_imx.c
>
> Signed-off-by: Jonathan Neusch?fer <[email protected]>
Applied, thanks.
On Tue, Mar 19, 2019 at 04:24:20PM +0100, Jonathan Neusch?fer wrote:
> Ensure that the i2c buses are reported to userspace (for example to
> i2cdetect) in the same order as they are numbered in the SoC's
> documentation by adding aliases to the devicetree.
>
> Signed-off-by: Jonathan Neusch?fer <[email protected]>
Alexander already sent a patch [1] covering i2c. But I'm not sure why
i2c3 is missing there.
Shawn
[1] https://www.spinics.net/lists/devicetree/msg278684.html
> ---
> arch/arm/boot/dts/imx50.dtsi | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi
> index e5632ce24ba0..8cab0ab3bd4e 100644
> --- a/arch/arm/boot/dts/imx50.dtsi
> +++ b/arch/arm/boot/dts/imx50.dtsi
> @@ -26,6 +26,9 @@
> gpio3 = &gpio4;
> gpio4 = &gpio5;
> gpio5 = &gpio6;
> + i2c0 = &i2c1;
> + i2c1 = &i2c2;
> + i2c2 = &i2c3;
> serial0 = &uart1;
> serial1 = &uart2;
> serial2 = &uart3;
> --
> 2.20.1
>
Hi, thanks for your comments. I'll address them in v2.
On Fri, Mar 22, 2019 at 09:31:53AM +0800, Shawn Guo wrote:
> On Tue, Mar 19, 2019 at 04:24:17PM +0100, Jonathan Neuschäfer wrote:
> > The Kobo Aura is an e-book reader released in 2013.
[...]
> > + sd2_pwrseq: pwrseq {
> > + compatible = "mmc-pwrseq-simple";
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&pinctrl_sd2_reset>;
> > +
>
> Please do not have random newlines.
Does that apply to all empty lines between properties?
>
> > + reset-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
> > + };
> > +
[...]
> > +&iomuxc {
> > + pinctrl_uart2: uart2 {
> > + fsl,pins = <
> > + MX50_PAD_UART2_TXD__UART2_TXD_MUX 0x1e4
> > + MX50_PAD_UART2_RXD__UART2_RXD_MUX 0x1e4
> > + >;
> > + };
> > +
> > + pinctrl_i2c1: i2c1 {
>
> Please sort these pinctrl nodes alphabetically.
It doesn't make a difference here, but should I generally sort by name
or by label in cases like this one?
Jonathan Neuschäfer
On Tue, Mar 26, 2019 at 05:26:53PM +0100, Jonathan Neusch?fer wrote:
> Hi, thanks for your comments. I'll address them in v2.
>
> On Fri, Mar 22, 2019 at 09:31:53AM +0800, Shawn Guo wrote:
> > On Tue, Mar 19, 2019 at 04:24:17PM +0100, Jonathan Neusch?fer wrote:
> > > The Kobo Aura is an e-book reader released in 2013.
> [...]
> > > + sd2_pwrseq: pwrseq {
> > > + compatible = "mmc-pwrseq-simple";
> > > + pinctrl-names = "default";
> > > + pinctrl-0 = <&pinctrl_sd2_reset>;
> > > +
> >
> > Please do not have random newlines.
>
> Does that apply to all empty lines between properties?
Yes, that's what we do for i.MX device trees.
>
> >
> > > + reset-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
> > > + };
> > > +
> [...]
> > > +&iomuxc {
> > > + pinctrl_uart2: uart2 {
> > > + fsl,pins = <
> > > + MX50_PAD_UART2_TXD__UART2_TXD_MUX 0x1e4
> > > + MX50_PAD_UART2_RXD__UART2_RXD_MUX 0x1e4
> > > + >;
> > > + };
> > > +
> > > + pinctrl_i2c1: i2c1 {
> >
> > Please sort these pinctrl nodes alphabetically.
>
> It doesn't make a difference here, but should I generally sort by name
> or by label in cases like this one?
Keep using the naming schema below, and it always makes no difference
then.
pinctrl_xxx: xxx
Shawn