Message ID | 20200815193336.21598-3-andreas@kemnade.info (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ARM: dts: add Tolino Shine 2 HD | expand |
On Sat, Aug 15, 2020 at 09:33:36PM +0200, Andreas Kemnade wrote: > This adds a devicetree for the Tolino Shine 2 HD Ebook reader. It is based > on boards marked with "37NB-E60QF0+4A2". It is equipped with an i.MX6SL > SoC. > > Expected to work: > - Buttons > - Wifi > - Touchscreen > - LED > - uSD > - USB > - RTC > > Not working due to missing drivers: > - Backlight (requires NTXEC driver) > - EPD > > Not working due to unknown reasons: > - deep sleep (echo standby >/sys/power/state works), > wakeup fails when imx_gpc_pre_suspend(true) was called. > > Signed-off-by: Andreas Kemnade <andreas@kemnade.info> > --- > Reason for RFC: The suspend trouble might be caused by bad devicetree. > But as the devicetree is already useful I decided to submit it. [...] > +++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > @@ -0,0 +1,582 @@ > +// SPDX-License-Identifier: (GPL-2.0) I don't think the parentheses are required when you don't have a logical operator (OR) in the SPDX expression. > +&i2c1 { > + pinctrl-names = "default","sleep"; > + pinctrl-0 = <&pinctrl_i2c1>; > + pinctrl-1 = <&pinctrl_i2c1_sleep>; > + status = "okay"; > + > + /* TODO: embedded controller at 0x43 (driver missing) */ Sorry for the delay, BTW. I'm still (slowly) working on v2. > + ricoh619: pmic@32 { > + compatible = "ricoh,rc5t619"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_ricoh_gpio>; > + reg = <0x32>; > + interrupt-parent = <&gpio5>; > + interrupts = <11 IRQ_TYPE_EDGE_FALLING>; > + system-power-controller; > + > + regulators { How did you derive the regulator voltages? > + pinctrl_hog: hoggrp { > + fsl,pins = < > + MX6SL_PAD_LCD_DAT0__GPIO2_IO20 0x79 > + MX6SL_PAD_LCD_DAT1__GPIO2_IO21 0x79 > + MX6SL_PAD_LCD_DAT2__GPIO2_IO22 0x79 > + MX6SL_PAD_LCD_DAT3__GPIO2_IO23 0x79 > + MX6SL_PAD_LCD_DAT4__GPIO2_IO24 0x79 > + MX6SL_PAD_LCD_DAT5__GPIO2_IO25 0x79 > + MX6SL_PAD_LCD_DAT6__GPIO2_IO26 0x79 > + MX6SL_PAD_LCD_DAT7__GPIO2_IO27 0x79 > + MX6SL_PAD_LCD_DAT8__GPIO2_IO28 0x79 > + MX6SL_PAD_LCD_DAT9__GPIO2_IO29 0x79 > + MX6SL_PAD_LCD_DAT10__GPIO2_IO30 0x79 > + MX6SL_PAD_LCD_DAT11__GPIO2_IO31 0x79 > + MX6SL_PAD_LCD_DAT12__GPIO3_IO00 0x79 > + MX6SL_PAD_LCD_DAT13__GPIO3_IO01 0x79 > + MX6SL_PAD_LCD_DAT14__GPIO3_IO02 0x79 > + MX6SL_PAD_LCD_DAT15__GPIO3_IO03 0x79 > + MX6SL_PAD_LCD_DAT16__GPIO3_IO04 0x79 > + MX6SL_PAD_LCD_DAT17__GPIO3_IO05 0x79 > + MX6SL_PAD_LCD_DAT18__GPIO3_IO06 0x79 > + MX6SL_PAD_LCD_DAT19__GPIO3_IO07 0x79 > + MX6SL_PAD_LCD_DAT20__GPIO3_IO08 0x79 > + MX6SL_PAD_LCD_DAT21__GPIO3_IO09 0x79 > + MX6SL_PAD_LCD_DAT22__GPIO3_IO10 0x79 > + MX6SL_PAD_LCD_DAT23__GPIO3_IO11 0x79 > + MX6SL_PAD_LCD_CLK__GPIO2_IO15 0x79 > + MX6SL_PAD_LCD_ENABLE__GPIO2_IO16 0x79 > + MX6SL_PAD_LCD_HSYNC__GPIO2_IO17 0x79 > + MX6SL_PAD_LCD_VSYNC__GPIO2_IO18 0x79 > + MX6SL_PAD_LCD_RESET__GPIO2_IO19 0x79 > + MX6SL_PAD_KEY_COL3__GPIO3_IO30 0x79 > + MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x79 > + MX6SL_PAD_ECSPI2_MOSI__GPIO4_IO13 0x79 > + MX6SL_PAD_KEY_COL5__GPIO4_IO02 0x79 > + MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x79 > + >; > + }; Why are there so many hogged pins? Will some of them receive a proper configuration once the EPDC driver is implemented? > +&snvs_rtc { > + /* we are using the RTC in the PMIC, not disabled in imx6sl.dtsi */ > + status = "disabled"; This comment sounds a bit ambiguous (and this potentially confusing). Perhaps: + /* we are using the RTC in the PMIC, but this one is not disabled in imx6sl.dtsi */ Or even just: + /* we are using the RTC in the PMIC */ > +&usdhc2 { > + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; > + pinctrl-0 = <&pinctrl_usdhc2>; > + pinctrl-1 = <&pinctrl_usdhc2_100mhz>; > + pinctrl-2 = <&pinctrl_usdhc2_200mhz>; > + pinctrl-3 = <&pinctrl_usdhc2_sleep>; > + non-removable; > + status = "okay"; > +}; IMHO, please add a comment saying what this MMC controller is connected to (internal storage?). > + > +&usdhc3 { > + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; > + pinctrl-0 = <&pinctrl_usdhc3>; > + pinctrl-1 = <&pinctrl_usdhc3_100mhz>; > + pinctrl-2 = <&pinctrl_usdhc3_200mhz>; > + pinctrl-3 = <&pinctrl_usdhc3_sleep>; > + vmmc-supply = <®_wifi>; > + mmc-pwrseq = <&wifi_pwrseq>; > + cap-power-off-card; > + non-removable; > + status = "okay"; > + > + /* CyberTan WC121 SDIO WiFi */ > +}; The HWCONFIG block from my Shine2HD reports RTL8189 as the Wifi chip (value 8 at offset 4), and kernel logs from the vendor kernel appear to agree that it's a realtek chip, at least (lines prefixed RTL871X). From my experience with the CyberTan WC121, it has a Broadcom fullmac chip inside. Now I wonder where this discrepancy or variability comes from. I guess the SDIO setup can deal with different chips (like Broadcom vs. Realtek) as long as the board has been designed to always use the same reset/power/etc. lines. I don't see any branching based on the 'Wifi' HWCONFIG entry in the vendor kernel, so I guess that's the case. In any case, it might be nice to also note the chip used inside the WLAN package (e.g. BCM43362), to make it easier for interested users to choose the right drivers. Kind regards, Jonathan Neuschäfer
Hi, Seems that we have different hardware, so the first question is first the most interesting thing: how much does the hw actually differ, especially do they require different device trees? Can you provide me a photo of your hardware? Or is it a Shine 3? Mine is at https://misc.andi.de1.cc/tolino2.jpg On Sun, 16 Aug 2020 14:54:41 +0200 Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote: [...] > > + > > +&usdhc3 { > > + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; > > + pinctrl-0 = <&pinctrl_usdhc3>; > > + pinctrl-1 = <&pinctrl_usdhc3_100mhz>; > > + pinctrl-2 = <&pinctrl_usdhc3_200mhz>; > > + pinctrl-3 = <&pinctrl_usdhc3_sleep>; > > + vmmc-supply = <®_wifi>; > > + mmc-pwrseq = <&wifi_pwrseq>; > > + cap-power-off-card; > > + non-removable; > > + status = "okay"; > > + > > + /* CyberTan WC121 SDIO WiFi */ > > +}; > > The HWCONFIG block from my Shine2HD reports RTL8189 as the Wifi chip > (value 8 at offset 4), and kernel logs from the vendor kernel appear to > agree that it's a realtek chip, at least (lines prefixed RTL871X). > Just for the readers with IMX knowledge but without knowledge of the vendor kernel hacks used here: That block is on a hidden partition of the boot medium (uSD or eMMC) describing the hardware, the kernel gets it from the bootloader and it is used e.g. in the board file. My hwconfig is: {m_hdr = {cMagicNameA = "HW CONFIG " cVersionNameA = "v2.6" bHWConfigSize = 62 '>'} m_val = {bPCB = 50 '2' bKeyPad = 13 '\r' bAudioCodec = 0 '\000' bAudioAmp = 0 '\000' bWifi = 7 '\a' bBT = 0 '\000' bMobile = 0 '\000' bTouchCtrl = 11 '\v' bTouchType = 4 '\004' bDisplayCtrl = 7 '\a' bDisplayPanel = 6 '\006' bRSensor = 0 '\000' bMicroP = 0 '\000' bCustomer = 0 '\000' bBattery = 1 '\001' bLed = 4 '\004' bRamSize = 3 '\003' bIFlash = 0 '\000' bExternalMem = 0 '\000' bRootFsType = 2 '\002' bSysPartType = 11 '\v' bProgressXHiByte = 1 '\001' bProgressXLoByte = 104 'h' bProgressYHiByte = 2 '\002' bProgressYLoByte = 228 '\344' bProgressCnts = 0 '\000' bContentType = 0 '\000' bCPU = 5 '\005' bUIStyle = 2 '\002' bRamType = 5 '\005' bUIConfig = 0 '\000' bDisplayResolution = 5 '\005' bFrontLight = 13 '\r' bCPUFreq = 0 '\000' bHallSensor = 1 '\001' bDisplayBusWidth = 0 '\000' bFrontLight_Flags = 4 '\004' bPCB_Flags = 17 '\021' bFrontLight_LED_Driver = 3 '\003' bVCOM_10mV_HiByte = 0 '\000' bVCOM_10mV_LoByte = 0 '\000' bPCB_REV = 0 '\000' bPCB_LVL = 0 '\000' bHOME_LED_PWM = 0 '\000' bPMIC = 1 '\001' bFL_PWM = 0 '\000' bRTC = 1 '\001' bBootOpt = 0 '\000' bTouch2Ctrl = 0 '\000' bTouch2Type = 0 '\000' bGPS = 0 '\000' bFM = 0 '\000' bRSensor2 = 0 '\000' bLightSensor = 0 '\000' bTPFWIDByte0 = 0 '\000' bTPFWIDByte1 = 0 '\000' bTPFWIDByte2 = 0 '\000' bTPFWIDByte3 = 0 '\000' bTPFWIDByte4 = 0 '\000' bTPFWIDByte5 = 0 '\000' bTPFWIDByte6 = 0 '\000' bTPFWIDByte7 = 0 '\000' bGPU = 0 '\000' bPCB_Flags2 = 0 '\000' bEPD_Flags = 0 '\000' bLAN = 0 '\000' bMobileIF = 0 '\000' bPIR = 0 '\000' bPanelLaminationSrc = 0 '\000'} m_bReserveA = '\000' <repeats 24 times>} > From my experience with the CyberTan WC121, it has a Broadcom fullmac > chip inside. Now I wonder where this discrepancy or variability comes > from. > correct. It uses the brcmfmac driver on mainline and the . bcmdhd in the vendor kernel Output on the vendor kernel: bcmsdh_register: Linux Kernel SDIO/MMC Driver [bcm_wlan_get_oob_irq-43] gpio 127, irq 383 dhd_conf_set_hw_oob_intr: Enable HW OOB for 43362 F1 signature OK, socitype:0x1 chip:0xa962 rev:0x1 pkg:0x9 DHD: dongle ram size is set to 245760(orig 245760) at 0x0 dhdsdio_probe: Disable prop_txstatus dhd_conf_set_fw_name_by_chip: firmware_path=/system/lib/firmware/wc121/fw_bcm40181a2.bin wl_create_event_handler(): thread:wl_event_handler:92d started tsk Enter, tsk = 0xdb501304 p2p0: P2P Interface Registered dhd_attach(): thread:dhd_watchdog_thread:932 started dhd_attach(): thread:dhd_dpc:933 started dhd_attach(): thread:dhd_sysioc:934 started On mainline: [ 11.686469] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43362-sdio for chip BCM43362/1 [ 12.282783] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43362-sdio for chip BCM43362/1 [ 12.387000] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-11), device may have limited channels available [ 12.479403] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43362/1 wl0: May 16 2018 23:42:49 version 5.90.244 FWID 01-0 > I guess the SDIO setup can deal with different chips (like Broadcom vs. > Realtek) as long as the board has been designed to always use the same > reset/power/etc. lines. I don't see any branching based on the 'Wifi' > HWCONFIG entry in the vendor kernel, so I guess that's the case. > as long as these chips do not use oob interrupts, just sdio, it should be no problem. The question is just how much our devices differ. Regards, Andreas
On Sun, Aug 16, 2020 at 04:50:58PM +0200, Andreas Kemnade wrote: > Hi, > > Seems that we have different hardware, so the first question is > first the most interesting thing: how much does the hw actually differ, > especially do they require different device trees? > > Can you provide me a photo of your hardware? > Or is it a Shine 3? It is a Shine 2HD > > Mine is at https://misc.andi.de1.cc/tolino2.jpg Mine: https://raw.githubusercontent.com/wiki/neuschaefer/linux/Tolino-Shine2HD.jpg It appears to be the next PCB revision (+4A3 instead of +4A2), but I think the PCB layout looks the same. The Realtek-based Wifi module is exactly where the CyberTan WC121 was. Jonathan
Hi, On Sun, 16 Aug 2020 17:57:51 +0200 Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote: > On Sun, Aug 16, 2020 at 04:50:58PM +0200, Andreas Kemnade wrote: > > Hi, > > > > Seems that we have different hardware, so the first question is > > first the most interesting thing: how much does the hw actually differ, > > especially do they require different device trees? > > > > Can you provide me a photo of your hardware? > > Or is it a Shine 3? > > It is a Shine 2HD > > > > > Mine is at https://misc.andi.de1.cc/tolino2.jpg > > Mine: > > https://raw.githubusercontent.com/wiki/neuschaefer/linux/Tolino-Shine2HD.jpg > > > It appears to be the next PCB revision (+4A3 instead of +4A2), but I > think the PCB layout looks the same. The Realtek-based Wifi module is > exactly where the CyberTan WC121 was. > From other sources I also think these revisions are same besides wifi. So the only thing warranting separate dtbs might be the OOB IRQ thing. In the Tolino sources there is the function dhd_customer_oob_irq_map in the bcmdhd driver, and it gets its number from this: drivers/net/wireless/bcmdhd/Makefile: -DCUSTOMER_HW2 -DCUSTOM_OOB_GPIO_NUM=127 -DOOB_INTR_ONLY -DHW_OOB The brcmfmac driver is upstream and has devicetree support, but the rtl8189fs is not. For the Clara I am using this one: https://github.com/jwrdegoede/rtl8189ES_linux.git (branch 8189fs) It has no devicetree support, so things cannot be defined anyway. On one hand the hardware should be described in the devicetree as good as possible but on the other hand the OOB IRQ is not mandatory. Regards, Andreas
On Sat, Aug 15, 2020 at 09:33:36PM +0200, Andreas Kemnade wrote: > This adds a devicetree for the Tolino Shine 2 HD Ebook reader. It is based > on boards marked with "37NB-E60QF0+4A2". It is equipped with an i.MX6SL > SoC. > > Expected to work: > - Buttons > - Wifi > - Touchscreen > - LED > - uSD > - USB > - RTC > > Not working due to missing drivers: > - Backlight (requires NTXEC driver) > - EPD > > Not working due to unknown reasons: > - deep sleep (echo standby >/sys/power/state works), > wakeup fails when imx_gpc_pre_suspend(true) was called. > > Signed-off-by: Andreas Kemnade <andreas@kemnade.info> > --- > Reason for RFC: The suspend trouble might be caused by bad devicetree. > But as the devicetree is already useful I decided to submit it. > > arch/arm/boot/dts/Makefile | 1 + > arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts | 582 +++++++++++++++++++ > 2 files changed, 583 insertions(+) > create mode 100644 arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index e6a1cac0bfc7..c65fa3852246 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -581,6 +581,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ > imx6qp-zii-rdu2.dtb > dtb-$(CONFIG_SOC_IMX6SL) += \ > imx6sl-evk.dtb \ > + imx6sl-tolino-shine2hd.dtb \ > imx6sl-tolino-shine3.dtb \ > imx6sl-warp.dtb > dtb-$(CONFIG_SOC_IMX6SLL) += \ > diff --git a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > new file mode 100644 > index 000000000000..7b28e19a1d98 > --- /dev/null > +++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > @@ -0,0 +1,582 @@ > +// SPDX-License-Identifier: (GPL-2.0) > +/* > + * Device tree for the Tolino Shine 2 HD ebook reader > + * > + * Name on mainboard is: 37NB-E60QF0+4A2 > + * Serials start with: E60QF2 > + * > + * Copyright 2020 Andreas Kemnade > + */ > + > +/dts-v1/; > + > +#include <dt-bindings/input/input.h> > +#include <dt-bindings/gpio/gpio.h> > +#include "imx6sl.dtsi" > + > +/ { > + model = "Tolino Shine 2 HD"; > + compatible = "kobo,tolino-shine2hd", "fsl,imx6sl"; > + > + chosen { > + stdout-path = &uart1; > + }; > + > + gpio_keys: gpio-keys { > + compatible = "gpio-keys"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_gpio_keys>; > + > + cover { > + label = "Cover"; > + gpios = <&gpio5 12 GPIO_ACTIVE_LOW>; > + linux,code = <SW_LID>; > + linux,input-type = <EV_SW>; > + wakeup-source; > + }; > + > + fl { > + label = "Frontlight"; > + gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; > + linux,code = <KEY_BRIGHTNESS_CYCLE>; > + }; > + > + home { > + label = "Home"; > + gpios = <&gpio3 25 GPIO_ACTIVE_LOW>; > + linux,code = <KEY_HOME>; > + }; > + > + power { > + label = "Power"; > + gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; > + linux,code = <KEY_POWER>; > + wakeup-source; > + }; > + }; > + > + leds: leds { > + compatible = "gpio-leds"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_led>; > + > + on { > + label = "tolinoshine2hd:white:on"; > + gpios = <&gpio5 13 GPIO_ACTIVE_LOW>; > + linux,default-trigger = "timer"; > + }; > + }; > + > + memory@80000000 { > + device_type = "memory"; > + reg = <0x80000000 0x20000000>; > + }; > + > + reg_wifi: regulator-wifi { > + compatible = "regulator-fixed"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_wifi_power>; > + regulator-name = "SD3_SPWR"; > + regulator-min-microvolt = <3000000>; > + regulator-max-microvolt = <3000000>; > + gpio = <&gpio4 29 GPIO_ACTIVE_HIGH>; Missing enable-active-high? > + }; > + > + wifi_pwrseq: wifi_pwrseq { > + compatible = "mmc-pwrseq-simple"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_wifi_reset>; > + post-power-on-delay-ms = <20>; > + reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; > + }; > +}; > + > +&i2c1 { > + pinctrl-names = "default","sleep"; > + pinctrl-0 = <&pinctrl_i2c1>; > + pinctrl-1 = <&pinctrl_i2c1_sleep>; > + status = "okay"; > + > + /* TODO: embedded controller at 0x43 (driver missing) */ > + > +}; > + > +&i2c2 { > + pinctrl-names = "default","sleep"; > + pinctrl-0 = <&pinctrl_i2c2>; > + pinctrl-1 = <&pinctrl_i2c2_sleep>; > + clock-frequency = <100000>; > + status = "okay"; > + > + zforce: touchscreen@50 { > + compatible = "neonode,zforce"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_zforce>; > + reg = <0x50>; > + interrupt-parent = <&gpio5>; > + interrupts = <6 IRQ_TYPE_EDGE_FALLING>; > + vdd-supply = <&ldo1_reg>; > + Unnecessary newline. > + reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; > + x-size = <1072>; > + y-size = <1448>; > + }; > + > + /* TODO: TPS65185 PMIC for E Ink at 0x68 */ > + > +}; > + > +&i2c3 { > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_i2c3>; > + clock-frequency = <400000>; > + status = "okay"; > + > + ricoh619: pmic@32 { > + compatible = "ricoh,rc5t619"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_ricoh_gpio>; > + reg = <0x32>; > + interrupt-parent = <&gpio5>; > + interrupts = <11 IRQ_TYPE_EDGE_FALLING>; > + system-power-controller; > + > + regulators { > + dcdc1_reg: DCDC1 { > + regulator-name = "DCDC1"; > + regulator-min-microvolt = <300000>; > + regulator-max-microvolt = <1875000>; > + regulator-always-on; > + regulator-boot-on; > + > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-max-microvolt = <900000>; > + regulator-suspend-min-microvolt = <900000>; > + }; > + }; > + > + /* Core3_3V3 */ > + dcdc2_reg: DCDC2 { > + regulator-name = "DCDC2"; > + regulator-always-on; > + regulator-boot-on; > + > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-max-microvolt = <3100000>; > + regulator-suspend-min-microvolt = <3100000>; > + }; > + }; > + > + dcdc3_reg: DCDC3 { > + regulator-name = "DCDC3"; > + regulator-min-microvolt = <300000>; > + regulator-max-microvolt = <1875000>; > + regulator-always-on; > + regulator-boot-on; > + > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-max-microvolt = <1140000>; > + regulator-suspend-min-microvolt = <1140000>; > + }; > + }; > + > + /* Core4_1V2 */ > + dcdc4_reg: DCDC4 { > + regulator-name = "DCDC4"; > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1200000>; > + regulator-always-on; > + regulator-boot-on; > + > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-max-microvolt = <1140000>; > + regulator-suspend-min-microvolt = <1140000>; > + }; > + }; > + > + /* Core4_1V8 */ > + dcdc5_reg: DCDC5 { > + regulator-name = "DCDC5"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-always-on; > + regulator-boot-on; > + > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-max-microvolt = <1700000>; > + regulator-suspend-min-microvolt = <1700000>; > + }; > + }; > + > + /* IR_3V3 */ > + ldo1_reg: LDO1 { > + regulator-name = "LDO1"; > + regulator-boot-on; > + }; > + > + /* Core1_3V3 */ > + ldo2_reg: LDO2 { > + regulator-name = "LDO2"; > + regulator-always-on; > + regulator-boot-on; > + > + regulator-state-mem { > + regulator-on-in-suspend; > + regulator-suspend-max-microvolt = <3000000>; > + regulator-suspend-min-microvolt = <3000000>; > + }; > + }; > + > + /* Core5_1V2 */ > + ldo3_reg: LDO3 { > + regulator-name = "LDO3"; > + regulator-always-on; > + regulator-boot-on; > + }; > + > + ldo4_reg: LDO4 { > + regulator-name = "LDO4"; > + regulator-boot-on; > + }; > + > + /* SPD_3V3 */ > + ldo5_reg: LDO5 { > + regulator-name = "LDO5"; > + regulator-always-on; > + regulator-boot-on; > + }; > + > + /* DDR_0V6 */ > + ldo6_reg: LDO6 { > + regulator-name = "LDO6"; > + regulator-always-on; > + regulator-boot-on; > + }; > + > + /* VDD_PWM */ > + ldo7_reg: LDO7 { > + regulator-name = "LDO7"; > + regulator-always-on; > + regulator-boot-on; > + }; > + > + /* ldo_1v8 */ > + ldo8_reg: LDO8 { > + regulator-name = "LDO8"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-always-on; > + regulator-boot-on; > + }; > + > + ldo9_reg: LDO9 { > + regulator-name = "LDO9"; > + regulator-boot-on; > + }; > + > + ldo10_reg: LDO10 { > + regulator-name = "LDO10"; > + regulator-boot-on; > + }; > + > + ldortc1_reg: LDORTC1 { > + regulator-name = "LDORTC1"; > + regulator-always-on; > + regulator-boot-on; > + }; > + }; > + }; > +}; > + > +&iomuxc { > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_hog>; > + > + pinctrl_gpio_keys: gpio-keysgrp { > + fsl,pins = < > + MX6SL_PAD_SD1_DAT1__GPIO5_IO08 0x17059 > + MX6SL_PAD_SD1_DAT4__GPIO5_IO12 0x17059 > + MX6SL_PAD_KEY_COL1__GPIO3_IO26 0x17059 > + MX6SL_PAD_KEY_ROW0__GPIO3_IO25 0x17059 > + >; > + }; > + > + pinctrl_hog: hoggrp { > + fsl,pins = < > + MX6SL_PAD_LCD_DAT0__GPIO2_IO20 0x79 > + MX6SL_PAD_LCD_DAT1__GPIO2_IO21 0x79 > + MX6SL_PAD_LCD_DAT2__GPIO2_IO22 0x79 > + MX6SL_PAD_LCD_DAT3__GPIO2_IO23 0x79 > + MX6SL_PAD_LCD_DAT4__GPIO2_IO24 0x79 > + MX6SL_PAD_LCD_DAT5__GPIO2_IO25 0x79 > + MX6SL_PAD_LCD_DAT6__GPIO2_IO26 0x79 > + MX6SL_PAD_LCD_DAT7__GPIO2_IO27 0x79 > + MX6SL_PAD_LCD_DAT8__GPIO2_IO28 0x79 > + MX6SL_PAD_LCD_DAT9__GPIO2_IO29 0x79 > + MX6SL_PAD_LCD_DAT10__GPIO2_IO30 0x79 > + MX6SL_PAD_LCD_DAT11__GPIO2_IO31 0x79 > + MX6SL_PAD_LCD_DAT12__GPIO3_IO00 0x79 > + MX6SL_PAD_LCD_DAT13__GPIO3_IO01 0x79 > + MX6SL_PAD_LCD_DAT14__GPIO3_IO02 0x79 > + MX6SL_PAD_LCD_DAT15__GPIO3_IO03 0x79 > + MX6SL_PAD_LCD_DAT16__GPIO3_IO04 0x79 > + MX6SL_PAD_LCD_DAT17__GPIO3_IO05 0x79 > + MX6SL_PAD_LCD_DAT18__GPIO3_IO06 0x79 > + MX6SL_PAD_LCD_DAT19__GPIO3_IO07 0x79 > + MX6SL_PAD_LCD_DAT20__GPIO3_IO08 0x79 > + MX6SL_PAD_LCD_DAT21__GPIO3_IO09 0x79 > + MX6SL_PAD_LCD_DAT22__GPIO3_IO10 0x79 > + MX6SL_PAD_LCD_DAT23__GPIO3_IO11 0x79 > + MX6SL_PAD_LCD_CLK__GPIO2_IO15 0x79 > + MX6SL_PAD_LCD_ENABLE__GPIO2_IO16 0x79 > + MX6SL_PAD_LCD_HSYNC__GPIO2_IO17 0x79 > + MX6SL_PAD_LCD_VSYNC__GPIO2_IO18 0x79 > + MX6SL_PAD_LCD_RESET__GPIO2_IO19 0x79 > + MX6SL_PAD_KEY_COL3__GPIO3_IO30 0x79 > + MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x79 > + MX6SL_PAD_ECSPI2_MOSI__GPIO4_IO13 0x79 > + MX6SL_PAD_KEY_COL5__GPIO4_IO02 0x79 > + MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x79 > + >; > + }; > + > + pinctrl_i2c1: i2c1grp { > + fsl,pins = < > + MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001f8b1 > + MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001f8b1 > + >; > + }; > + > + pinctrl_i2c1_sleep: i2c1grp-sleep { > + fsl,pins = < > + MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x400108b1 > + MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x400108b1 > + >; > + }; > + > + pinctrl_i2c2: i2c2grp { > + fsl,pins = < > + MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x4001f8b1 > + MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x4001f8b1 > + >; > + }; > + > + pinctrl_i2c2_sleep: i2c2grp-sleep { > + fsl,pins = < > + MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x400108b1 > + MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x400108b1 > + >; > + }; > + > + pinctrl_i2c3: i2c3grp { > + fsl,pins = < > + MX6SL_PAD_REF_CLK_24M__I2C3_SCL 0x4001f8b1 > + MX6SL_PAD_REF_CLK_32K__I2C3_SDA 0x4001f8b1 > + >; > + }; > + > + pinctrl_led: ledgrp { > + fsl,pins = < > + MX6SL_PAD_SD1_DAT2__GPIO5_IO13 0x17059 > + >; > + }; > + > + pinctrl_ricoh_gpio: ricoh_gpiogrp { > + fsl,pins = < > + MX6SL_PAD_SD1_CLK__GPIO5_IO15 0x1b8b1 /* ricoh619 chg */ > + MX6SL_PAD_SD1_DAT0__GPIO5_IO11 0x1b8b1 /* ricoh619 irq */ > + MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x1b8b1 /* ricoh619 bat_low_int */ > + >; > + }; > + > + pinctrl_uart1: uart1grp { > + fsl,pins = < > + MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1 > + MX6SL_PAD_UART1_RXD__UART1_TX_DATA 0x1b0b1 > + >; > + }; > + > + pinctrl_usbotg1: usbotg1grp { > + fsl,pins = < > + MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059 > + >; > + }; > + > + pinctrl_usdhc2: usdhc2grp { > + fsl,pins = < > + MX6SL_PAD_SD2_CMD__SD2_CMD 0x17059 > + MX6SL_PAD_SD2_CLK__SD2_CLK 0x13059 > + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x17059 > + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x17059 > + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x17059 > + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x17059 > + >; > + }; > + > + pinctrl_usdhc2_100mhz: usdhc2grp-100mhz { > + fsl,pins = < > + MX6SL_PAD_SD2_CMD__SD2_CMD 0x170b9 > + MX6SL_PAD_SD2_CLK__SD2_CLK 0x130b9 > + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170b9 > + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170b9 > + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170b9 > + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170b9 > + >; > + }; > + > + pinctrl_usdhc2_200mhz: usdhc2grp-200mhz { > + fsl,pins = < > + MX6SL_PAD_SD2_CMD__SD2_CMD 0x170f9 > + MX6SL_PAD_SD2_CLK__SD2_CLK 0x130f9 > + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170f9 > + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170f9 > + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170f9 > + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170f9 > + >; > + }; > + > + pinctrl_usdhc2_sleep: usdhc2grp-sleep { > + fsl,pins = < > + MX6SL_PAD_SD2_CMD__GPIO5_IO04 0x100f9 > + MX6SL_PAD_SD2_CLK__GPIO5_IO05 0x100f9 > + MX6SL_PAD_SD2_DAT0__GPIO5_IO01 0x100f9 > + MX6SL_PAD_SD2_DAT1__GPIO4_IO30 0x100f9 > + MX6SL_PAD_SD2_DAT2__GPIO5_IO03 0x100f9 > + MX6SL_PAD_SD2_DAT3__GPIO4_IO28 0x100f9 > + >; > + }; > + > + pinctrl_usdhc3: usdhc3grp { > + fsl,pins = < > + MX6SL_PAD_SD3_CMD__SD3_CMD 0x11059 > + MX6SL_PAD_SD3_CLK__SD3_CLK 0x11059 > + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x11059 > + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x11059 > + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x11059 > + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x11059 > + >; > + }; > + > + pinctrl_usdhc3_100mhz: usdhc3grp-100mhz { > + fsl,pins = < > + MX6SL_PAD_SD3_CMD__SD3_CMD 0x170b9 > + MX6SL_PAD_SD3_CLK__SD3_CLK 0x170b9 > + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170b9 > + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170b9 > + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170b9 > + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170b9 > + >; > + }; > + > + pinctrl_usdhc3_200mhz: usdhc3grp-200mhz { > + fsl,pins = < > + MX6SL_PAD_SD3_CMD__SD3_CMD 0x170f9 > + MX6SL_PAD_SD3_CLK__SD3_CLK 0x170f9 > + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170f9 > + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170f9 > + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170f9 > + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170f9 > + >; > + }; > + > + pinctrl_usdhc3_sleep: usdhc3grp-sleep { > + fsl,pins = < > + MX6SL_PAD_SD3_CMD__GPIO5_IO21 0x100c1 > + MX6SL_PAD_SD3_CLK__GPIO5_IO18 0x100c1 > + MX6SL_PAD_SD3_DAT0__GPIO5_IO19 0x100c1 > + MX6SL_PAD_SD3_DAT1__GPIO5_IO20 0x100c1 > + MX6SL_PAD_SD3_DAT2__GPIO5_IO16 0x100c1 > + MX6SL_PAD_SD3_DAT3__GPIO5_IO17 0x100c1 > + >; > + }; > + > + pinctrl_wifi_power: wifi-powergrp { > + fsl,pins = < > + MX6SL_PAD_SD2_DAT6__GPIO4_IO29 0x10059 /* WIFI_3V3_ON */ > + >; > + }; > + > + pinctrl_wifi_reset: wifi-resetgrp { > + fsl,pins = < > + MX6SL_PAD_SD2_DAT7__GPIO5_IO00 0x10059 /* WIFI_RST */ > + >; > + }; > + > + pinctrl_zforce: zforcegrp { > + fsl,pins = < > + MX6SL_PAD_SD1_DAT3__GPIO5_IO06 0x17059 /* TP_INT */ > + MX6SL_PAD_SD1_DAT5__GPIO5_IO09 0x10059 /* TP_RST */ > + >; > + }; > +}; > + > +®_vdd1p1 { > + vin-supply = <&dcdc2_reg>; > +}; > + > +®_vdd2p5 { > + vin-supply = <&dcdc2_reg>; > +}; > + > +®_arm { > + vin-supply = <&dcdc3_reg>; > +}; > + > +®_soc { > + vin-supply = <&dcdc1_reg>; > +}; > + > +®_pu { > + vin-supply = <&dcdc1_reg>; > +}; > + > +&snvs_rtc { > + /* we are using the RTC in the PMIC, not disabled in imx6sl.dtsi */ > + status = "disabled"; > +}; > + > +&uart1 { > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_uart1>; > + status = "okay"; > +}; > + > +&usdhc2 { > + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; > + pinctrl-0 = <&pinctrl_usdhc2>; > + pinctrl-1 = <&pinctrl_usdhc2_100mhz>; > + pinctrl-2 = <&pinctrl_usdhc2_200mhz>; > + pinctrl-3 = <&pinctrl_usdhc2_sleep>; > + non-removable; > + status = "okay"; > +}; > + > +&usdhc3 { > + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; > + pinctrl-0 = <&pinctrl_usdhc3>; > + pinctrl-1 = <&pinctrl_usdhc3_100mhz>; > + pinctrl-2 = <&pinctrl_usdhc3_200mhz>; > + pinctrl-3 = <&pinctrl_usdhc3_sleep>; > + vmmc-supply = <®_wifi>; > + mmc-pwrseq = <&wifi_pwrseq>; > + cap-power-off-card; > + non-removable; > + status = "okay"; > + > + /* CyberTan WC121 SDIO WiFi */ > +}; > + > + One newline is good enough. Shawn > +&usbotg1 { > + pinctrl-names = "default"; > + disable-over-current; > + srp-disable; > + hnp-disable; > + adp-disable; > + status = "okay"; > +}; > -- > 2.20.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Sun, 23 Aug 2020 09:42:31 +0800 Shawn Guo <shawnguo@kernel.org> wrote: > On Sat, Aug 15, 2020 at 09:33:36PM +0200, Andreas Kemnade wrote: > > This adds a devicetree for the Tolino Shine 2 HD Ebook reader. It is based > > on boards marked with "37NB-E60QF0+4A2". It is equipped with an i.MX6SL > > SoC. > > > > Expected to work: > > - Buttons > > - Wifi > > - Touchscreen > > - LED > > - uSD > > - USB > > - RTC > > > > Not working due to missing drivers: > > - Backlight (requires NTXEC driver) > > - EPD > > > > Not working due to unknown reasons: > > - deep sleep (echo standby >/sys/power/state works), > > wakeup fails when imx_gpc_pre_suspend(true) was called. > > > > Signed-off-by: Andreas Kemnade <andreas@kemnade.info> > > --- > > Reason for RFC: The suspend trouble might be caused by bad devicetree. > > But as the devicetree is already useful I decided to submit it. > > > > arch/arm/boot/dts/Makefile | 1 + > > arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts | 582 +++++++++++++++++++ > > 2 files changed, 583 insertions(+) > > create mode 100644 arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > > > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > > index e6a1cac0bfc7..c65fa3852246 100644 > > --- a/arch/arm/boot/dts/Makefile > > +++ b/arch/arm/boot/dts/Makefile > > @@ -581,6 +581,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ > > imx6qp-zii-rdu2.dtb > > dtb-$(CONFIG_SOC_IMX6SL) += \ > > imx6sl-evk.dtb \ > > + imx6sl-tolino-shine2hd.dtb \ > > imx6sl-tolino-shine3.dtb \ > > imx6sl-warp.dtb > > dtb-$(CONFIG_SOC_IMX6SLL) += \ > > diff --git a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > > new file mode 100644 > > index 000000000000..7b28e19a1d98 > > --- /dev/null > > +++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > > @@ -0,0 +1,582 @@ > > +// SPDX-License-Identifier: (GPL-2.0) > > +/* > > + * Device tree for the Tolino Shine 2 HD ebook reader > > + * > > + * Name on mainboard is: 37NB-E60QF0+4A2 > > + * Serials start with: E60QF2 > > + * > > + * Copyright 2020 Andreas Kemnade > > + */ > > + > > +/dts-v1/; > > + > > +#include <dt-bindings/input/input.h> > > +#include <dt-bindings/gpio/gpio.h> > > +#include "imx6sl.dtsi" > > + > > +/ { > > + model = "Tolino Shine 2 HD"; > > + compatible = "kobo,tolino-shine2hd", "fsl,imx6sl"; > > + > > + chosen { > > + stdout-path = &uart1; > > + }; > > + > > + gpio_keys: gpio-keys { > > + compatible = "gpio-keys"; > > + pinctrl-names = "default"; > > + pinctrl-0 = <&pinctrl_gpio_keys>; > > + > > + cover { > > + label = "Cover"; > > + gpios = <&gpio5 12 GPIO_ACTIVE_LOW>; > > + linux,code = <SW_LID>; > > + linux,input-type = <EV_SW>; > > + wakeup-source; > > + }; > > + > > + fl { > > + label = "Frontlight"; > > + gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; > > + linux,code = <KEY_BRIGHTNESS_CYCLE>; > > + }; > > + > > + home { > > + label = "Home"; > > + gpios = <&gpio3 25 GPIO_ACTIVE_LOW>; > > + linux,code = <KEY_HOME>; > > + }; > > + > > + power { > > + label = "Power"; > > + gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; > > + linux,code = <KEY_POWER>; > > + wakeup-source; > > + }; > > + }; > > + > > + leds: leds { > > + compatible = "gpio-leds"; > > + pinctrl-names = "default"; > > + pinctrl-0 = <&pinctrl_led>; > > + > > + on { > > + label = "tolinoshine2hd:white:on"; > > + gpios = <&gpio5 13 GPIO_ACTIVE_LOW>; > > + linux,default-trigger = "timer"; > > + }; > > + }; > > + > > + memory@80000000 { > > + device_type = "memory"; > > + reg = <0x80000000 0x20000000>; > > + }; > > + > > + reg_wifi: regulator-wifi { > > + compatible = "regulator-fixed"; > > + pinctrl-names = "default"; > > + pinctrl-0 = <&pinctrl_wifi_power>; > > + regulator-name = "SD3_SPWR"; > > + regulator-min-microvolt = <3000000>; > > + regulator-max-microvolt = <3000000>; > > + gpio = <&gpio4 29 GPIO_ACTIVE_HIGH>; > > Missing enable-active-high? > no. I should rather use GPIO_ACTIVE_LOW to avoid that confusion. corresponding code in vendor kernel is the function _ntx_wifi_power_ctrl() Regards, Andreas
On Sun, 16 Aug 2020 14:54:41 +0200 Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote: > On Sat, Aug 15, 2020 at 09:33:36PM +0200, Andreas Kemnade wrote: > > This adds a devicetree for the Tolino Shine 2 HD Ebook reader. It is based > > on boards marked with "37NB-E60QF0+4A2". It is equipped with an i.MX6SL > > SoC. > > > > Expected to work: > > - Buttons > > - Wifi > > - Touchscreen > > - LED > > - uSD > > - USB > > - RTC > > > > Not working due to missing drivers: > > - Backlight (requires NTXEC driver) > > - EPD > > > > Not working due to unknown reasons: > > - deep sleep (echo standby >/sys/power/state works), > > wakeup fails when imx_gpc_pre_suspend(true) was called. > > > > Signed-off-by: Andreas Kemnade <andreas@kemnade.info> > > --- > > Reason for RFC: The suspend trouble might be caused by bad devicetree. > > But as the devicetree is already useful I decided to submit it. > [...] > > +++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts > > @@ -0,0 +1,582 @@ > > +// SPDX-License-Identifier: (GPL-2.0) > > I don't think the parentheses are required when you don't have a logical > operator (OR) in the SPDX expression. > > > +&i2c1 { > > + pinctrl-names = "default","sleep"; > > + pinctrl-0 = <&pinctrl_i2c1>; > > + pinctrl-1 = <&pinctrl_i2c1_sleep>; > > + status = "okay"; > > + > > + /* TODO: embedded controller at 0x43 (driver missing) */ > > Sorry for the delay, BTW. I'm still (slowly) working on v2. > > > + ricoh619: pmic@32 { > > + compatible = "ricoh,rc5t619"; > > + pinctrl-names = "default"; > > + pinctrl-0 = <&pinctrl_ricoh_gpio>; > > + reg = <0x32>; > > + interrupt-parent = <&gpio5>; > > + interrupts = <11 IRQ_TYPE_EDGE_FALLING>; > > + system-power-controller; > > + > > + regulators { > > How did you derive the regulator voltages? > Several sources: - deriving from the existing device trees, - looking for board specific variances in board-mx6sl_ntx.c of the Tolino kernel, - looking for comments in the file. I compared a register dump of the PMIC from both the vendor kernel and my devicetree and found no significant differences. > > + pinctrl_hog: hoggrp { > > + fsl,pins = < > > + MX6SL_PAD_LCD_DAT0__GPIO2_IO20 0x79 > > + MX6SL_PAD_LCD_DAT1__GPIO2_IO21 0x79 > > + MX6SL_PAD_LCD_DAT2__GPIO2_IO22 0x79 > > + MX6SL_PAD_LCD_DAT3__GPIO2_IO23 0x79 > > + MX6SL_PAD_LCD_DAT4__GPIO2_IO24 0x79 > > + MX6SL_PAD_LCD_DAT5__GPIO2_IO25 0x79 > > + MX6SL_PAD_LCD_DAT6__GPIO2_IO26 0x79 > > + MX6SL_PAD_LCD_DAT7__GPIO2_IO27 0x79 > > + MX6SL_PAD_LCD_DAT8__GPIO2_IO28 0x79 > > + MX6SL_PAD_LCD_DAT9__GPIO2_IO29 0x79 > > + MX6SL_PAD_LCD_DAT10__GPIO2_IO30 0x79 > > + MX6SL_PAD_LCD_DAT11__GPIO2_IO31 0x79 > > + MX6SL_PAD_LCD_DAT12__GPIO3_IO00 0x79 > > + MX6SL_PAD_LCD_DAT13__GPIO3_IO01 0x79 > > + MX6SL_PAD_LCD_DAT14__GPIO3_IO02 0x79 > > + MX6SL_PAD_LCD_DAT15__GPIO3_IO03 0x79 > > + MX6SL_PAD_LCD_DAT16__GPIO3_IO04 0x79 > > + MX6SL_PAD_LCD_DAT17__GPIO3_IO05 0x79 > > + MX6SL_PAD_LCD_DAT18__GPIO3_IO06 0x79 > > + MX6SL_PAD_LCD_DAT19__GPIO3_IO07 0x79 > > + MX6SL_PAD_LCD_DAT20__GPIO3_IO08 0x79 > > + MX6SL_PAD_LCD_DAT21__GPIO3_IO09 0x79 > > + MX6SL_PAD_LCD_DAT22__GPIO3_IO10 0x79 > > + MX6SL_PAD_LCD_DAT23__GPIO3_IO11 0x79 > > + MX6SL_PAD_LCD_CLK__GPIO2_IO15 0x79 > > + MX6SL_PAD_LCD_ENABLE__GPIO2_IO16 0x79 > > + MX6SL_PAD_LCD_HSYNC__GPIO2_IO17 0x79 > > + MX6SL_PAD_LCD_VSYNC__GPIO2_IO18 0x79 > > + MX6SL_PAD_LCD_RESET__GPIO2_IO19 0x79 > > + MX6SL_PAD_KEY_COL3__GPIO3_IO30 0x79 > > + MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x79 > > + MX6SL_PAD_ECSPI2_MOSI__GPIO4_IO13 0x79 > > + MX6SL_PAD_KEY_COL5__GPIO4_IO02 0x79 > > + MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x79 > > + >; > > + }; > > Why are there so many hogged pins? Will some of them receive a proper > configuration once the EPDC driver is implemented? > I copied them over and found no hints in the Tolino kernel that it is a bad idea. Regards, Andreas
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index e6a1cac0bfc7..c65fa3852246 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -581,6 +581,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ imx6qp-zii-rdu2.dtb dtb-$(CONFIG_SOC_IMX6SL) += \ imx6sl-evk.dtb \ + imx6sl-tolino-shine2hd.dtb \ imx6sl-tolino-shine3.dtb \ imx6sl-warp.dtb dtb-$(CONFIG_SOC_IMX6SLL) += \ diff --git a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts new file mode 100644 index 000000000000..7b28e19a1d98 --- /dev/null +++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts @@ -0,0 +1,582 @@ +// SPDX-License-Identifier: (GPL-2.0) +/* + * Device tree for the Tolino Shine 2 HD ebook reader + * + * Name on mainboard is: 37NB-E60QF0+4A2 + * Serials start with: E60QF2 + * + * Copyright 2020 Andreas Kemnade + */ + +/dts-v1/; + +#include <dt-bindings/input/input.h> +#include <dt-bindings/gpio/gpio.h> +#include "imx6sl.dtsi" + +/ { + model = "Tolino Shine 2 HD"; + compatible = "kobo,tolino-shine2hd", "fsl,imx6sl"; + + chosen { + stdout-path = &uart1; + }; + + gpio_keys: gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_gpio_keys>; + + cover { + label = "Cover"; + gpios = <&gpio5 12 GPIO_ACTIVE_LOW>; + linux,code = <SW_LID>; + linux,input-type = <EV_SW>; + wakeup-source; + }; + + fl { + label = "Frontlight"; + gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; + linux,code = <KEY_BRIGHTNESS_CYCLE>; + }; + + home { + label = "Home"; + gpios = <&gpio3 25 GPIO_ACTIVE_LOW>; + linux,code = <KEY_HOME>; + }; + + power { + label = "Power"; + gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; + linux,code = <KEY_POWER>; + wakeup-source; + }; + }; + + leds: leds { + compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_led>; + + on { + label = "tolinoshine2hd:white:on"; + gpios = <&gpio5 13 GPIO_ACTIVE_LOW>; + linux,default-trigger = "timer"; + }; + }; + + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x20000000>; + }; + + reg_wifi: regulator-wifi { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_wifi_power>; + regulator-name = "SD3_SPWR"; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; + gpio = <&gpio4 29 GPIO_ACTIVE_HIGH>; + }; + + wifi_pwrseq: wifi_pwrseq { + compatible = "mmc-pwrseq-simple"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_wifi_reset>; + post-power-on-delay-ms = <20>; + reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; + }; +}; + +&i2c1 { + pinctrl-names = "default","sleep"; + pinctrl-0 = <&pinctrl_i2c1>; + pinctrl-1 = <&pinctrl_i2c1_sleep>; + status = "okay"; + + /* TODO: embedded controller at 0x43 (driver missing) */ + +}; + +&i2c2 { + pinctrl-names = "default","sleep"; + pinctrl-0 = <&pinctrl_i2c2>; + pinctrl-1 = <&pinctrl_i2c2_sleep>; + clock-frequency = <100000>; + status = "okay"; + + zforce: touchscreen@50 { + compatible = "neonode,zforce"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_zforce>; + reg = <0x50>; + interrupt-parent = <&gpio5>; + interrupts = <6 IRQ_TYPE_EDGE_FALLING>; + vdd-supply = <&ldo1_reg>; + + reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; + x-size = <1072>; + y-size = <1448>; + }; + + /* TODO: TPS65185 PMIC for E Ink at 0x68 */ + +}; + +&i2c3 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c3>; + clock-frequency = <400000>; + status = "okay"; + + ricoh619: pmic@32 { + compatible = "ricoh,rc5t619"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ricoh_gpio>; + reg = <0x32>; + interrupt-parent = <&gpio5>; + interrupts = <11 IRQ_TYPE_EDGE_FALLING>; + system-power-controller; + + regulators { + dcdc1_reg: DCDC1 { + regulator-name = "DCDC1"; + regulator-min-microvolt = <300000>; + regulator-max-microvolt = <1875000>; + regulator-always-on; + regulator-boot-on; + + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-max-microvolt = <900000>; + regulator-suspend-min-microvolt = <900000>; + }; + }; + + /* Core3_3V3 */ + dcdc2_reg: DCDC2 { + regulator-name = "DCDC2"; + regulator-always-on; + regulator-boot-on; + + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-max-microvolt = <3100000>; + regulator-suspend-min-microvolt = <3100000>; + }; + }; + + dcdc3_reg: DCDC3 { + regulator-name = "DCDC3"; + regulator-min-microvolt = <300000>; + regulator-max-microvolt = <1875000>; + regulator-always-on; + regulator-boot-on; + + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-max-microvolt = <1140000>; + regulator-suspend-min-microvolt = <1140000>; + }; + }; + + /* Core4_1V2 */ + dcdc4_reg: DCDC4 { + regulator-name = "DCDC4"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + regulator-boot-on; + + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-max-microvolt = <1140000>; + regulator-suspend-min-microvolt = <1140000>; + }; + }; + + /* Core4_1V8 */ + dcdc5_reg: DCDC5 { + regulator-name = "DCDC5"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + regulator-boot-on; + + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-max-microvolt = <1700000>; + regulator-suspend-min-microvolt = <1700000>; + }; + }; + + /* IR_3V3 */ + ldo1_reg: LDO1 { + regulator-name = "LDO1"; + regulator-boot-on; + }; + + /* Core1_3V3 */ + ldo2_reg: LDO2 { + regulator-name = "LDO2"; + regulator-always-on; + regulator-boot-on; + + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-max-microvolt = <3000000>; + regulator-suspend-min-microvolt = <3000000>; + }; + }; + + /* Core5_1V2 */ + ldo3_reg: LDO3 { + regulator-name = "LDO3"; + regulator-always-on; + regulator-boot-on; + }; + + ldo4_reg: LDO4 { + regulator-name = "LDO4"; + regulator-boot-on; + }; + + /* SPD_3V3 */ + ldo5_reg: LDO5 { + regulator-name = "LDO5"; + regulator-always-on; + regulator-boot-on; + }; + + /* DDR_0V6 */ + ldo6_reg: LDO6 { + regulator-name = "LDO6"; + regulator-always-on; + regulator-boot-on; + }; + + /* VDD_PWM */ + ldo7_reg: LDO7 { + regulator-name = "LDO7"; + regulator-always-on; + regulator-boot-on; + }; + + /* ldo_1v8 */ + ldo8_reg: LDO8 { + regulator-name = "LDO8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + regulator-boot-on; + }; + + ldo9_reg: LDO9 { + regulator-name = "LDO9"; + regulator-boot-on; + }; + + ldo10_reg: LDO10 { + regulator-name = "LDO10"; + regulator-boot-on; + }; + + ldortc1_reg: LDORTC1 { + regulator-name = "LDORTC1"; + regulator-always-on; + regulator-boot-on; + }; + }; + }; +}; + +&iomuxc { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_hog>; + + pinctrl_gpio_keys: gpio-keysgrp { + fsl,pins = < + MX6SL_PAD_SD1_DAT1__GPIO5_IO08 0x17059 + MX6SL_PAD_SD1_DAT4__GPIO5_IO12 0x17059 + MX6SL_PAD_KEY_COL1__GPIO3_IO26 0x17059 + MX6SL_PAD_KEY_ROW0__GPIO3_IO25 0x17059 + >; + }; + + pinctrl_hog: hoggrp { + fsl,pins = < + MX6SL_PAD_LCD_DAT0__GPIO2_IO20 0x79 + MX6SL_PAD_LCD_DAT1__GPIO2_IO21 0x79 + MX6SL_PAD_LCD_DAT2__GPIO2_IO22 0x79 + MX6SL_PAD_LCD_DAT3__GPIO2_IO23 0x79 + MX6SL_PAD_LCD_DAT4__GPIO2_IO24 0x79 + MX6SL_PAD_LCD_DAT5__GPIO2_IO25 0x79 + MX6SL_PAD_LCD_DAT6__GPIO2_IO26 0x79 + MX6SL_PAD_LCD_DAT7__GPIO2_IO27 0x79 + MX6SL_PAD_LCD_DAT8__GPIO2_IO28 0x79 + MX6SL_PAD_LCD_DAT9__GPIO2_IO29 0x79 + MX6SL_PAD_LCD_DAT10__GPIO2_IO30 0x79 + MX6SL_PAD_LCD_DAT11__GPIO2_IO31 0x79 + MX6SL_PAD_LCD_DAT12__GPIO3_IO00 0x79 + MX6SL_PAD_LCD_DAT13__GPIO3_IO01 0x79 + MX6SL_PAD_LCD_DAT14__GPIO3_IO02 0x79 + MX6SL_PAD_LCD_DAT15__GPIO3_IO03 0x79 + MX6SL_PAD_LCD_DAT16__GPIO3_IO04 0x79 + MX6SL_PAD_LCD_DAT17__GPIO3_IO05 0x79 + MX6SL_PAD_LCD_DAT18__GPIO3_IO06 0x79 + MX6SL_PAD_LCD_DAT19__GPIO3_IO07 0x79 + MX6SL_PAD_LCD_DAT20__GPIO3_IO08 0x79 + MX6SL_PAD_LCD_DAT21__GPIO3_IO09 0x79 + MX6SL_PAD_LCD_DAT22__GPIO3_IO10 0x79 + MX6SL_PAD_LCD_DAT23__GPIO3_IO11 0x79 + MX6SL_PAD_LCD_CLK__GPIO2_IO15 0x79 + MX6SL_PAD_LCD_ENABLE__GPIO2_IO16 0x79 + MX6SL_PAD_LCD_HSYNC__GPIO2_IO17 0x79 + MX6SL_PAD_LCD_VSYNC__GPIO2_IO18 0x79 + MX6SL_PAD_LCD_RESET__GPIO2_IO19 0x79 + MX6SL_PAD_KEY_COL3__GPIO3_IO30 0x79 + MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x79 + MX6SL_PAD_ECSPI2_MOSI__GPIO4_IO13 0x79 + MX6SL_PAD_KEY_COL5__GPIO4_IO02 0x79 + MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x79 + >; + }; + + pinctrl_i2c1: i2c1grp { + fsl,pins = < + MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001f8b1 + MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001f8b1 + >; + }; + + pinctrl_i2c1_sleep: i2c1grp-sleep { + fsl,pins = < + MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x400108b1 + MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x400108b1 + >; + }; + + pinctrl_i2c2: i2c2grp { + fsl,pins = < + MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x4001f8b1 + MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x4001f8b1 + >; + }; + + pinctrl_i2c2_sleep: i2c2grp-sleep { + fsl,pins = < + MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x400108b1 + MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x400108b1 + >; + }; + + pinctrl_i2c3: i2c3grp { + fsl,pins = < + MX6SL_PAD_REF_CLK_24M__I2C3_SCL 0x4001f8b1 + MX6SL_PAD_REF_CLK_32K__I2C3_SDA 0x4001f8b1 + >; + }; + + pinctrl_led: ledgrp { + fsl,pins = < + MX6SL_PAD_SD1_DAT2__GPIO5_IO13 0x17059 + >; + }; + + pinctrl_ricoh_gpio: ricoh_gpiogrp { + fsl,pins = < + MX6SL_PAD_SD1_CLK__GPIO5_IO15 0x1b8b1 /* ricoh619 chg */ + MX6SL_PAD_SD1_DAT0__GPIO5_IO11 0x1b8b1 /* ricoh619 irq */ + MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x1b8b1 /* ricoh619 bat_low_int */ + >; + }; + + pinctrl_uart1: uart1grp { + fsl,pins = < + MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1 + MX6SL_PAD_UART1_RXD__UART1_TX_DATA 0x1b0b1 + >; + }; + + pinctrl_usbotg1: usbotg1grp { + fsl,pins = < + MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059 + >; + }; + + pinctrl_usdhc2: usdhc2grp { + fsl,pins = < + MX6SL_PAD_SD2_CMD__SD2_CMD 0x17059 + MX6SL_PAD_SD2_CLK__SD2_CLK 0x13059 + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x17059 + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x17059 + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x17059 + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x17059 + >; + }; + + pinctrl_usdhc2_100mhz: usdhc2grp-100mhz { + fsl,pins = < + MX6SL_PAD_SD2_CMD__SD2_CMD 0x170b9 + MX6SL_PAD_SD2_CLK__SD2_CLK 0x130b9 + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170b9 + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170b9 + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170b9 + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170b9 + >; + }; + + pinctrl_usdhc2_200mhz: usdhc2grp-200mhz { + fsl,pins = < + MX6SL_PAD_SD2_CMD__SD2_CMD 0x170f9 + MX6SL_PAD_SD2_CLK__SD2_CLK 0x130f9 + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x170f9 + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x170f9 + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x170f9 + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x170f9 + >; + }; + + pinctrl_usdhc2_sleep: usdhc2grp-sleep { + fsl,pins = < + MX6SL_PAD_SD2_CMD__GPIO5_IO04 0x100f9 + MX6SL_PAD_SD2_CLK__GPIO5_IO05 0x100f9 + MX6SL_PAD_SD2_DAT0__GPIO5_IO01 0x100f9 + MX6SL_PAD_SD2_DAT1__GPIO4_IO30 0x100f9 + MX6SL_PAD_SD2_DAT2__GPIO5_IO03 0x100f9 + MX6SL_PAD_SD2_DAT3__GPIO4_IO28 0x100f9 + >; + }; + + pinctrl_usdhc3: usdhc3grp { + fsl,pins = < + MX6SL_PAD_SD3_CMD__SD3_CMD 0x11059 + MX6SL_PAD_SD3_CLK__SD3_CLK 0x11059 + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x11059 + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x11059 + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x11059 + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x11059 + >; + }; + + pinctrl_usdhc3_100mhz: usdhc3grp-100mhz { + fsl,pins = < + MX6SL_PAD_SD3_CMD__SD3_CMD 0x170b9 + MX6SL_PAD_SD3_CLK__SD3_CLK 0x170b9 + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170b9 + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170b9 + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170b9 + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170b9 + >; + }; + + pinctrl_usdhc3_200mhz: usdhc3grp-200mhz { + fsl,pins = < + MX6SL_PAD_SD3_CMD__SD3_CMD 0x170f9 + MX6SL_PAD_SD3_CLK__SD3_CLK 0x170f9 + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x170f9 + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x170f9 + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x170f9 + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x170f9 + >; + }; + + pinctrl_usdhc3_sleep: usdhc3grp-sleep { + fsl,pins = < + MX6SL_PAD_SD3_CMD__GPIO5_IO21 0x100c1 + MX6SL_PAD_SD3_CLK__GPIO5_IO18 0x100c1 + MX6SL_PAD_SD3_DAT0__GPIO5_IO19 0x100c1 + MX6SL_PAD_SD3_DAT1__GPIO5_IO20 0x100c1 + MX6SL_PAD_SD3_DAT2__GPIO5_IO16 0x100c1 + MX6SL_PAD_SD3_DAT3__GPIO5_IO17 0x100c1 + >; + }; + + pinctrl_wifi_power: wifi-powergrp { + fsl,pins = < + MX6SL_PAD_SD2_DAT6__GPIO4_IO29 0x10059 /* WIFI_3V3_ON */ + >; + }; + + pinctrl_wifi_reset: wifi-resetgrp { + fsl,pins = < + MX6SL_PAD_SD2_DAT7__GPIO5_IO00 0x10059 /* WIFI_RST */ + >; + }; + + pinctrl_zforce: zforcegrp { + fsl,pins = < + MX6SL_PAD_SD1_DAT3__GPIO5_IO06 0x17059 /* TP_INT */ + MX6SL_PAD_SD1_DAT5__GPIO5_IO09 0x10059 /* TP_RST */ + >; + }; +}; + +®_vdd1p1 { + vin-supply = <&dcdc2_reg>; +}; + +®_vdd2p5 { + vin-supply = <&dcdc2_reg>; +}; + +®_arm { + vin-supply = <&dcdc3_reg>; +}; + +®_soc { + vin-supply = <&dcdc1_reg>; +}; + +®_pu { + vin-supply = <&dcdc1_reg>; +}; + +&snvs_rtc { + /* we are using the RTC in the PMIC, not disabled in imx6sl.dtsi */ + status = "disabled"; +}; + +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; + status = "okay"; +}; + +&usdhc2 { + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; + pinctrl-0 = <&pinctrl_usdhc2>; + pinctrl-1 = <&pinctrl_usdhc2_100mhz>; + pinctrl-2 = <&pinctrl_usdhc2_200mhz>; + pinctrl-3 = <&pinctrl_usdhc2_sleep>; + non-removable; + status = "okay"; +}; + +&usdhc3 { + pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep"; + pinctrl-0 = <&pinctrl_usdhc3>; + pinctrl-1 = <&pinctrl_usdhc3_100mhz>; + pinctrl-2 = <&pinctrl_usdhc3_200mhz>; + pinctrl-3 = <&pinctrl_usdhc3_sleep>; + vmmc-supply = <®_wifi>; + mmc-pwrseq = <&wifi_pwrseq>; + cap-power-off-card; + non-removable; + status = "okay"; + + /* CyberTan WC121 SDIO WiFi */ +}; + + +&usbotg1 { + pinctrl-names = "default"; + disable-over-current; + srp-disable; + hnp-disable; + adp-disable; + status = "okay"; +};
This adds a devicetree for the Tolino Shine 2 HD Ebook reader. It is based on boards marked with "37NB-E60QF0+4A2". It is equipped with an i.MX6SL SoC. Expected to work: - Buttons - Wifi - Touchscreen - LED - uSD - USB - RTC Not working due to missing drivers: - Backlight (requires NTXEC driver) - EPD Not working due to unknown reasons: - deep sleep (echo standby >/sys/power/state works), wakeup fails when imx_gpc_pre_suspend(true) was called. Signed-off-by: Andreas Kemnade <andreas@kemnade.info> --- Reason for RFC: The suspend trouble might be caused by bad devicetree. But as the devicetree is already useful I decided to submit it. arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts | 582 +++++++++++++++++++ 2 files changed, 583 insertions(+) create mode 100644 arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts