Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: dts: imx50: Add Kobo Aura DTS

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 <j.neuschaefer@gmx.net>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>

authored by

Jonathan Neuschäfer and committed by
Shawn Guo
891d940a cadb32a9

+260 -1
+2 -1
arch/arm/boot/dts/Makefile
··· 363 363 imx35-eukrea-mbimxsd35-baseboard.dtb \ 364 364 imx35-pdk.dtb 365 365 dtb-$(CONFIG_SOC_IMX50) += \ 366 - imx50-evk.dtb 366 + imx50-evk.dtb \ 367 + imx50-kobo-aura.dtb 367 368 dtb-$(CONFIG_SOC_IMX51) += \ 368 369 imx51-apf51.dtb \ 369 370 imx51-apf51dev.dtb \
+258
arch/arm/boot/dts/imx50-kobo-aura.dts
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + // Copyright 2019 Jonathan Neuschäfer 3 + // 4 + // The Kobo Aura e-book reader, model N514. The mainboard is marked as E606F0B. 5 + 6 + /dts-v1/; 7 + #include "imx50.dtsi" 8 + #include <dt-bindings/input/input.h> 9 + 10 + / { 11 + model = "Kobo Aura (N514)"; 12 + compatible = "kobo,aura", "fsl,imx50"; 13 + 14 + chosen { 15 + stdout-path = "serial1:115200n8"; 16 + }; 17 + 18 + memory@70000000 { 19 + device_type = "memory"; 20 + reg = <0x70000000 0x10000000>; 21 + }; 22 + 23 + gpio-leds { 24 + compatible = "gpio-leds"; 25 + pinctrl-names = "default"; 26 + pinctrl-0 = <&pinctrl_leds>; 27 + 28 + on { 29 + label = "kobo_aura:orange:on"; 30 + gpios = <&gpio6 24 GPIO_ACTIVE_LOW>; 31 + panic-indicator; 32 + }; 33 + }; 34 + 35 + gpio-keys { 36 + compatible = "gpio-keys"; 37 + pinctrl-names = "default"; 38 + pinctrl-0 = <&pinctrl_gpiokeys>; 39 + 40 + power { 41 + label = "Power Button"; 42 + gpios = <&gpio4 10 GPIO_ACTIVE_LOW>; 43 + linux,code = <KEY_POWER>; 44 + }; 45 + 46 + hallsensor { 47 + label = "Hallsensor"; 48 + gpios = <&gpio5 15 GPIO_ACTIVE_LOW>; 49 + linux,code = <KEY_RESERVED>; 50 + linux,input-type = <EV_SW>; 51 + }; 52 + 53 + frontlight { 54 + label = "Frontlight"; 55 + gpios = <&gpio4 1 GPIO_ACTIVE_LOW>; 56 + linux,code = <KEY_DISPLAYTOGGLE>; 57 + }; 58 + }; 59 + 60 + sd2_pwrseq: pwrseq { 61 + compatible = "mmc-pwrseq-simple"; 62 + pinctrl-names = "default"; 63 + pinctrl-0 = <&pinctrl_sd2_reset>; 64 + reset-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>; 65 + }; 66 + 67 + sd2_vmmc: gpio-regulator { 68 + compatible = "regulator-gpio"; 69 + pinctrl-names = "default"; 70 + pinctrl-0 = <&pinctrl_sd2_vmmc>; 71 + regulator-name = "vmmc"; 72 + states = <3300000 0>; 73 + regulator-min-microvolt = <3300000>; 74 + regulator-max-microvolt = <3300000>; 75 + enable-gpio = <&gpio4 12 GPIO_ACTIVE_LOW>; 76 + startup-delay-us = <100000>; 77 + }; 78 + }; 79 + 80 + &esdhc1 { 81 + pinctrl-names = "default"; 82 + pinctrl-0 = <&pinctrl_sd1>; 83 + max-frequency = <50000000>; 84 + bus-width = <4>; 85 + cd-gpios = <&gpio5 17 GPIO_ACTIVE_LOW>; 86 + disable-wp; 87 + status = "okay"; 88 + 89 + /* External µSD card */ 90 + }; 91 + 92 + &esdhc2 { 93 + pinctrl-names = "default"; 94 + pinctrl-0 = <&pinctrl_sd2>; 95 + bus-width = <4>; 96 + max-frequency = <50000000>; 97 + disable-wp; 98 + mmc-pwrseq = <&sd2_pwrseq>; 99 + vmmc-supply = <&sd2_vmmc>; 100 + status = "okay"; 101 + 102 + /* CyberTan WC121 SDIO WiFi (BCM43362) */ 103 + }; 104 + 105 + &esdhc3 { 106 + pinctrl-names = "default"; 107 + pinctrl-0 = <&pinctrl_sd3>; 108 + bus-width = <8>; 109 + non-removable; 110 + max-frequency = <50000000>; 111 + disable-wp; 112 + status = "okay"; 113 + 114 + /* Internal eMMC */ 115 + }; 116 + 117 + &i2c1 { 118 + pinctrl-names = "default"; 119 + pinctrl-0 = <&pinctrl_i2c1>; 120 + status = "okay"; 121 + 122 + /* TODO: ektf2132 touch controller at 0x15 */ 123 + }; 124 + 125 + &i2c2 { 126 + pinctrl-names = "default"; 127 + pinctrl-0 = <&pinctrl_i2c2>; 128 + status = "okay"; 129 + 130 + /* TODO: TPS65185 PMIC for E Ink at 0x68 */ 131 + }; 132 + 133 + &i2c3 { 134 + pinctrl-names = "default"; 135 + pinctrl-0 = <&pinctrl_i2c3>; 136 + status = "okay"; 137 + 138 + /* TODO: embedded controller at 0x43 */ 139 + }; 140 + 141 + &iomuxc { 142 + pinctrl_gpiokeys: gpiokeys { 143 + fsl,pins = < 144 + MX50_PAD_CSPI_MISO__GPIO4_10 0x0 145 + MX50_PAD_SD2_D7__GPIO5_15 0x0 146 + MX50_PAD_KEY_ROW0__GPIO4_1 0x0 147 + >; 148 + }; 149 + 150 + pinctrl_i2c1: i2c1 { 151 + fsl,pins = < 152 + MX50_PAD_I2C1_SCL__I2C1_SCL 0x400001fd 153 + MX50_PAD_I2C1_SDA__I2C1_SDA 0x400001fd 154 + >; 155 + }; 156 + 157 + pinctrl_i2c2: i2c2 { 158 + fsl,pins = < 159 + MX50_PAD_I2C2_SCL__I2C2_SCL 0x400001fd 160 + MX50_PAD_I2C2_SDA__I2C2_SDA 0x400001fd 161 + >; 162 + }; 163 + 164 + pinctrl_i2c3: i2c3 { 165 + fsl,pins = < 166 + MX50_PAD_I2C3_SCL__I2C3_SCL 0x400001fd 167 + MX50_PAD_I2C3_SDA__I2C3_SDA 0x400001fd 168 + >; 169 + }; 170 + 171 + pinctrl_leds: leds { 172 + fsl,pins = < 173 + MX50_PAD_PWM1__GPIO6_24 0x0 174 + >; 175 + }; 176 + 177 + pinctrl_sd1: sd1 { 178 + fsl,pins = < 179 + MX50_PAD_SD1_CMD__ESDHC1_CMD 0x1e4 180 + MX50_PAD_SD1_CLK__ESDHC1_CLK 0xd4 181 + MX50_PAD_SD1_D0__ESDHC1_DAT0 0x1d4 182 + MX50_PAD_SD1_D1__ESDHC1_DAT1 0x1d4 183 + MX50_PAD_SD1_D2__ESDHC1_DAT2 0x1d4 184 + MX50_PAD_SD1_D3__ESDHC1_DAT3 0x1d4 185 + 186 + MX50_PAD_SD2_CD__GPIO5_17 0x0 187 + >; 188 + }; 189 + 190 + pinctrl_sd2: sd2 { 191 + fsl,pins = < 192 + MX50_PAD_SD2_CMD__ESDHC2_CMD 0x1e4 193 + MX50_PAD_SD2_CLK__ESDHC2_CLK 0xd4 194 + MX50_PAD_SD2_D0__ESDHC2_DAT0 0x1d4 195 + MX50_PAD_SD2_D1__ESDHC2_DAT1 0x1d4 196 + MX50_PAD_SD2_D2__ESDHC2_DAT2 0x1d4 197 + MX50_PAD_SD2_D3__ESDHC2_DAT3 0x1d4 198 + >; 199 + }; 200 + 201 + pinctrl_sd2_reset: sd2-reset { 202 + fsl,pins = < 203 + MX50_PAD_ECSPI2_MOSI__GPIO4_17 0x0 204 + >; 205 + }; 206 + 207 + pinctrl_sd2_vmmc: sd2-vmmc { 208 + fsl,pins = < 209 + MX50_PAD_ECSPI1_SCLK__GPIO4_12 0x0 210 + >; 211 + }; 212 + 213 + pinctrl_sd3: sd3 { 214 + fsl,pins = < 215 + MX50_PAD_SD3_CMD__ESDHC3_CMD 0x1e4 216 + MX50_PAD_SD3_CLK__ESDHC3_CLK 0xd4 217 + MX50_PAD_SD3_D0__ESDHC3_DAT0 0x1d4 218 + MX50_PAD_SD3_D1__ESDHC3_DAT1 0x1d4 219 + MX50_PAD_SD3_D2__ESDHC3_DAT2 0x1d4 220 + MX50_PAD_SD3_D3__ESDHC3_DAT3 0x1d4 221 + MX50_PAD_SD3_D4__ESDHC3_DAT4 0x1d4 222 + MX50_PAD_SD3_D5__ESDHC3_DAT5 0x1d4 223 + MX50_PAD_SD3_D6__ESDHC3_DAT6 0x1d4 224 + MX50_PAD_SD3_D7__ESDHC3_DAT7 0x1d4 225 + >; 226 + }; 227 + 228 + pinctrl_uart2: uart2 { 229 + fsl,pins = < 230 + MX50_PAD_UART2_TXD__UART2_TXD_MUX 0x1e4 231 + MX50_PAD_UART2_RXD__UART2_RXD_MUX 0x1e4 232 + >; 233 + }; 234 + 235 + pinctrl_usbphy: usbphy { 236 + fsl,pins = < 237 + MX50_PAD_ECSPI2_SS0__GPIO4_19 0x0 238 + >; 239 + }; 240 + }; 241 + 242 + &uart2 { 243 + pinctrl-names = "default"; 244 + pinctrl-0 = <&pinctrl_uart2>; 245 + status = "okay"; 246 + }; 247 + 248 + &usbotg { 249 + phy_type = "utmi_wide"; 250 + dr_mode = "peripheral"; 251 + status = "okay"; 252 + }; 253 + 254 + &usbphy0 { 255 + pinctrl-names = "default"; 256 + pinctrl-0 = <&pinctrl_usbphy>; 257 + vbus-detect-gpio = <&gpio4 19 GPIO_ACTIVE_LOW>; 258 + };