On Sun, Apr 26, 2020 at 11:35:57AM -0700, Jonathan Bakker wrote: > Add support for following devices: > - touchkeys connected over i2c-gpio > - s6e63m0 panel connected over spi-gpio > - fsa9480 microusb switch over i2c-gpio > - wm8994 over i2c-gpio (no machine driver yet) > - all common i2c-gpio devices Please split it per functionality, e.g.: 1. Add sound, 2. Add panel, 3. Add touchkeys (unless part of panel), 4. The remaining i2c-gpio devices without bindings could go as one. > > Signed-off-by: Jonathan Bakker <xc-racer2@xxxxxxx> > Signed-off-by: Paweł Chmiel <pawel.mikolaj.chmiel@xxxxxxxxx> > --- > arch/arm/boot/dts/s5pv210-aries.dtsi | 282 ++++++++++++++++++++-- > arch/arm/boot/dts/s5pv210-fascinate4g.dts | 6 + > 2 files changed, 270 insertions(+), 18 deletions(-) > > diff --git a/arch/arm/boot/dts/s5pv210-aries.dtsi b/arch/arm/boot/dts/s5pv210-aries.dtsi > index f83df426f2b6..ef966d13d83d 100644 > --- a/arch/arm/boot/dts/s5pv210-aries.dtsi > +++ b/arch/arm/boot/dts/s5pv210-aries.dtsi > @@ -12,8 +12,14 @@ > compatible = "samsung,aries", "samsung,s5pv210"; > > aliases { > + i2c4 = &i2c_sound; > + i2c5 = &i2c_accel; > i2c6 = &i2c_pmic; > + i2c7 = &i2c_musb; > i2c9 = &i2c_fuel; > + i2c10 = &i2c_touchkey; > + i2c11 = &i2c_prox; > + i2c12 = &i2c_magnetometer; > }; > > memory@30000000 { > @@ -48,6 +54,18 @@ > gpio = <&gpj1 1 GPIO_ACTIVE_HIGH>; > }; > > + touchkey_vdd: regulator-fixed-1 { > + compatible = "regulator-fixed"; > + regulator-name = "VTOUCH_3.3V"; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + enable-active-high; > + gpio = <&gpj3 2 GPIO_ACTIVE_HIGH>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&touchkey_vdd_ena>; > + }; > + > wifi_pwrseq: wifi-pwrseq { > compatible = "mmc-pwrseq-simple"; > reset-gpios = <&gpg1 2 GPIO_ACTIVE_LOW>; > @@ -57,7 +75,69 @@ > power-off-delay-us = <500>; > }; > > - i2c_pmic: i2c-gpio-0 { > + i2c_sound: i2c-gpio-0 { > + compatible = "i2c-gpio"; > + sda-gpios = <&mp05 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + scl-gpios = <&mp05 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + i2c-gpio,delay-us = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&sound_i2c_pins>; > + > + wm8994: wm8994@1a { > + compatible = "wlf,wm8994"; > + reg = <0x1a>; > + > + #sound-dai-cells = <0>; > + > + gpio-controller; > + #gpio-cells = <2>; > + > + clocks = <&clocks MOUT_CLKOUT>; > + clock-names = "MCLK1"; > + > + AVDD2-supply = <&buck3_reg>; > + DBVDD-supply = <&buck3_reg>; No such supply, check the bindings. > + CPVDD-supply = <&buck3_reg>; > + SPKVDD1-supply = <&buck3_reg>; > + SPKVDD2-supply = <&buck3_reg>; > + > + wlf,gpio-cfg = <0xa101 0x8100 0x0100 0x0100 0x8100 > + 0xa101 0x0100 0x8100 0x0100 0x0100 > + 0x0100>; > + > + wlf,ldo1ena = <&gpf3 4 GPIO_ACTIVE_HIGH>; > + wlf,ldo2ena = <&gpf3 4 GPIO_ACTIVE_HIGH>; > + > + wlf,lineout1-se; > + wlf,lineout2-se; > + > + assigned-clocks = <&clocks MOUT_CLKOUT>; > + assigned-clock-rates = <0>; > + assigned-clock-parents = <&xusbxti>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&codec_ldo>; > + }; > + }; > + > + i2c_accel: i2c-gpio-1 { > + compatible = "i2c-gpio"; > + sda-gpios = <&gpj3 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + scl-gpios = <&gpj3 7 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + i2c-gpio,delay-us = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&accel_i2c_pins>; > + > + /* bma023 accelerometer, no mainline binding */ status disabled ... unless you need it for user-space I2C tools? > + }; > + > + i2c_pmic: i2c-gpio-2 { > compatible = "i2c-gpio"; > sda-gpios = <&gpj4 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > scl-gpios = <&gpj4 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > @@ -137,8 +217,6 @@ > regulator-name = "VLCD_1.8V"; > regulator-min-microvolt = <1800000>; > regulator-max-microvolt = <1800000>; > - /* Till we get panel driver */ > - regulator-always-on; > > regulator-state-mem { > regulator-off-in-suspend; > @@ -237,8 +315,6 @@ > regulator-name = "VCC_3.0V_LCD"; > regulator-min-microvolt = <3000000>; > regulator-max-microvolt = <3000000>; > - /* Till we get panel driver */ > - regulator-always-on; > > regulator-state-mem { > regulator-off-in-suspend; > @@ -309,7 +385,26 @@ > }; > }; > > - i2c_fuel: i2c-gpio-1 { > + i2c_musb: i2c-gpio-3 { > + compatible = "i2c-gpio"; > + sda-gpios = <&gpj3 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + scl-gpios = <&gpj3 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + i2c-gpio,delay-us = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&musb_i2c_pins>; > + > + fsa9480: musb@25 { > + compatible = "fcs,fsa9480"; > + reg = <0x25>; > + interrupt-parent = <&gph2>; > + interrupts = <7 IRQ_TYPE_EDGE_FALLING>; > + }; > + }; > + > + i2c_fuel: i2c-gpio-4 { > compatible = "i2c-gpio"; > sda-gpios = <&mp05 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > scl-gpios = <&mp05 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > @@ -328,6 +423,60 @@ > }; > }; > > + i2c_touchkey: i2c-gpio-5 { > + compatible = "i2c-gpio"; > + sda-gpios = <&gpj3 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + scl-gpios = <&gpj3 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + i2c-gpio,delay-us = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&touchkey_i2c_pins>; > + > + touchkey@20 { > + compatible = "cypress,aries-touchkey"; > + reg = <0x20>; > + vdd-supply = <&touchkey_vdd>; > + vcc-supply = <&buck3_reg>; > + linux,keycodes = <KEY_MENU KEY_BACK > + KEY_HOMEPAGE KEY_SEARCH>; > + interrupt-parent = <&gpj4>; > + interrupts = <1 IRQ_TYPE_LEVEL_LOW>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&touchkey_irq>; > + }; > + }; > + > + i2c_prox: i2c-gpio-6 { > + compatible = "i2c-gpio"; > + sda-gpios = <&gpg2 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + scl-gpios = <&gpg0 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + i2c-gpio,delay-us = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&prox_i2c_pins>; > + > + /* Sharp gp2a prox/light sensor, incomplete mainline binding */ The same - disable, unless you access it from user-space. > + }; > + > + i2c_magnetometer: i2c-gpio-7 { > + compatible = "i2c-gpio"; > + sda-gpios = <&gpj0 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + scl-gpios = <&gpj0 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; > + i2c-gpio,delay-us = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&magnetometer_i2c_pins>; > + > + /* Yamaha yas529 magnetometer, no mainline binding */ The same - disable, unless you access it from user-space. > + }; > + > vibrator: pwm-vibrator { > compatible = "pwm-vibrator"; > pwms = <&pwm 1 44642 0>; > @@ -343,6 +492,39 @@ > offset = <0x681c>; /* PS_HOLD_CONTROL */ > value = <0x5200>; > }; > + > + spi_lcd: spi-gpio-0 { > + compatible = "spi-gpio"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + sck-gpios = <&mp04 1 GPIO_ACTIVE_HIGH>; > + mosi-gpios = <&mp04 3 GPIO_ACTIVE_HIGH>; > + cs-gpios = <&mp01 1 GPIO_ACTIVE_HIGH>; > + num-chipselects = <1>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&lcd_spi_pins>; > + > + panel@0 { > + compatible = "samsung,s6e63m0"; > + reg = <0>; > + reset-gpios = <&mp05 5 GPIO_ACTIVE_LOW>; > + vdd3-supply = <&ldo7_reg>; > + vci-supply = <&ldo17_reg>; > + spi-cs-high; > + spi-max-frequency = <1200000>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&panel_rst>; > + > + port { > + lcd_ep: endpoint { > + remote-endpoint = <&fimd_ep>; > + }; > + }; > + }; > + }; > }; > > &fimd { > @@ -353,18 +535,13 @@ > samsung,invert-vden; > samsung,invert-vclk; > > - display-timings { > - timing-0 { > - /* 480x800@60Hz */ > - clock-frequency = <25628040>; > - hactive = <480>; > - vactive = <800>; > - hfront-porch = <16>; > - hback-porch = <16>; > - hsync-len = <2>; > - vfront-porch = <28>; > - vback-porch = <1>; > - vsync-len = <2>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@3 { > + reg = <3>; > + fimd_ep: endpoint { > + remote-endpoint = <&lcd_ep>; > }; > }; > }; > @@ -405,6 +582,19 @@ > samsung,pin-val = <1>; > }; > > + codec_ldo: codec-ldo { > + samsung,pins = "gpf3-4"; > + samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + }; > + > + prox_i2c_pins: gp2a-i2c-pins { > + samsung,pins = "gpg0-2", "gpg2-2"; > + samsung,pin-function = <EXYNOS_PIN_FUNC_F>; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > wlan_gpio_rst: wlan-gpio-rst { > samsung,pins = "gpg1-2"; > samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>; > @@ -438,6 +628,13 @@ > samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > }; > > + magnetometer_i2c_pins: yas529-i2c-pins { > + samsung,pins = "gpj0-0", "gpj0-1"; > + samsung,pin-function = <EXYNOS_PIN_FUNC_F>; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > ts_irq: ts-irq { > samsung,pins = "gpj0-5"; > samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>; > @@ -445,17 +642,66 @@ > samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > }; > > + touchkey_i2c_pins: touchkey-i2c-pins { > + samsung,pins = "gpj3-0", "gpj3-1"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > + touchkey_vdd_ena: touchkey-vdd-ena { > + samsung,pins = "gpj3-2"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > + musb_i2c_pins: musb-i2c-pins { > + samsung,pins = "gpj3-4", "gpj3-5"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > + accel_i2c_pins: accel-i2c-pins { > + samsung,pins = "gpj3-6", "gpj3-7"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > pmic_i2c_pins: pmic-i2c-pins { > samsung,pins = "gpj4-0", "gpj4-3"; > samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > }; > > + touchkey_irq: touchkey-irq { > + samsung,pins = "gpj4-1"; > + samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>; > + samsung,pin-pud = <S3C64XX_PIN_PULL_UP>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > + lcd_spi_pins: spi-lcd-pins { > + samsung,pins = "mp01-1", "mp04-1", "mp04-3"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > fg_i2c_pins: fg-i2c-pins { > samsung,pins = "mp05-0", "mp05-1"; > samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > }; > + > + sound_i2c_pins: sound-i2c-pins { > + samsung,pins = "mp05-2", "mp05-3"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > + > + panel_rst: panel-rst { > + samsung,pins = "mp05-5"; > + samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>; > + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; > + }; > }; > > &pwm { > diff --git a/arch/arm/boot/dts/s5pv210-fascinate4g.dts b/arch/arm/boot/dts/s5pv210-fascinate4g.dts > index 94dcb9b64b9a..42e6e2de197d 100644 > --- a/arch/arm/boot/dts/s5pv210-fascinate4g.dts > +++ b/arch/arm/boot/dts/s5pv210-fascinate4g.dts > @@ -278,3 +278,9 @@ > PIN_SLP(mp07-7, INPUT, DOWN); > }; > }; > + > +&wm8994 { > + /* GPIO3 (BCLK2) and GPIO4 (LRCLK2) as outputs */ > + wlf,gpio-cfg = <0xa101 0x8100 0x8100 0x8100 0x8100 0xa101 > + 0x0100 0x8100 0x0100 0x0100 0x0100>; Indent the line till opening <. Best regards, Krzysztof