Subject: Re: [PATCH v2] ARM: dts: Add devicetree for Samsung GT-S7710

From: Stephan Gerhold <[email-masked]>
Date: Tue, 10 Mar 2020 10:50:46 +0100

On Sat, Mar 07, 2020 at 08:36:27PM +0100, Linus Walleij wrote:
> The Samsung GT-S7710 also known as XCover 2 or Skomer is a
> Ux500-based mobile phone. In the source code release from
> Samsung's open source site it is referred to as "Skomer".
> 
> Cc: Stephan Gerhold <[email-masked]>
> Signed-off-by: Linus Walleij <[email-masked]>
> ---
> ChangeLog v1->v2:
> - Set SD level shifter to be a simple fixed regulator
>   at 2.9V
> - Set the eMMC supply LDO to be at 3.3V not 1.8V
> - Move the accelerator to the hardware I2C2 bus instead
>   of the bit-banged GPIO bus.
> - Move the touchscreen placeholder to the hardware I2C3
>   bus.
> - Drop unused pin configs associated with the deleted
>   GPIO I2C buses.
> - Rename the two remaning bit-banged GPIO I2C buses as
>   i2c-gpio-0 and i2c-gpio-1.
> - Drop the UHS speeds from the SD card, no 1.8V
> - Flag the eMMC card as nonremovable and tag that it
>   supports mmc-ddr-1_8v (works great when testing).
> - Use standard mc2_a_1 pin config for the eMMC SDI2 slot.
> - Use standard UART pin control set-ups just like Golden.
> - Use mc0_a_1 for the SD card pin config, but EXTEND IT
>   so we also cover DAT31DIR. Apparently this machine
>   makes use of DAT31DIR!
> - Move the level shifter GPIO pin control into its own
>   pin config node and associate it with the level
>   shifter regulator.
> - Switch the WLAN SDIO to use "mc1_a_2" configs instead
>   of the mock group which was buggy anyway.
> - Do not disable USB, drop custom USB pin config which
>   is identical to the default.

Thanks for taking the time to fix all this. Looks much cleaner now :)

> ---
>  arch/arm/boot/dts/Makefile                    |   3 +-
>  .../arm/boot/dts/ste-ux500-samsung-skomer.dts | 583 ++++++++++++++++++
>  2 files changed, 585 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/boot/dts/ste-ux500-samsung-skomer.dts
> 
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index d6546d2676b9..a7671831ecf6 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -1202,7 +1202,8 @@ dtb-$(CONFIG_ARCH_U8500) += \
>  	ste-hrefv60plus-stuib.dtb \
>  	ste-hrefv60plus-tvk.dtb \
>  	ste-href520-tvk.dtb \
> -	ste-ux500-samsung-golden.dtb
> +	ste-ux500-samsung-golden.dtb \
> +	ste-ux500-samsung-skomer.dtb
>  dtb-$(CONFIG_ARCH_UNIPHIER) += \
>  	uniphier-ld4-ref.dtb \
>  	uniphier-ld6b-ref.dtb \
> diff --git a/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts b/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts
> new file mode 100644
> index 000000000000..f799e45f5b10
> --- /dev/null
> +++ b/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts
> @@ -0,0 +1,583 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Devicetree for the Samsung XCover 2 GT-S7710 also known as Skomer.
> + */
> +
> +/dts-v1/;
> +#include "ste-db8500.dtsi"
> +#include "ste-ab8505.dtsi"
> +#include "ste-dbx5x0-pinctrl.dtsi"
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +
> +/ {
> +	model = "Samsung XCover 2 (GT-S7710)";
> +	compatible = "samsung,skomer", "st-ericsson,u8500";
> +
> +	chosen {
> +		stdout-path = &serial2;
> +	};
> +
> +	/* TI TXS0206 level translator for 2.9 V */
> +	sd_level_translator: regulator-gpio {
> +		compatible = "regulator-fixed";
> +
> +		/* GPIO87 EN */
> +		gpios = <&gpio2 23 GPIO_ACTIVE_HIGH>;
> +		enable-active-high;
> +
> +		regulator-name = "sd-level-translator";
> +		regulator-min-microvolt = <2900000>;
> +		regulator-max-microvolt = <2900000>;
> +		regulator-type = "voltage";
> +
> +		startup-delay-us = <200>;
> +
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&sd_level_translator_default>;
> +	};
> +
> +	/* External LDO MIC5366-3.3YMT for eMMC */
> +	ldo_3v3_reg: regulator-gpio-ldo-3v3 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "en-3v3-fixed-supply";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +		gpio = <&gpio6 31 GPIO_ACTIVE_HIGH>;
> +		startup-delay-us = <5000>;
> +		enable-active-high;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&emmc_ldo_en_default_mode>;
> +	};
> +
> +	wlan_en: regulator-gpio-wlan-en {
> +		compatible = "regulator-fixed";
> +		regulator-name = "wl-reg-on";
> +		regulator-min-microvolt = <3000000>;
> +		regulator-max-microvolt = <3000000>;
> +		startup-delay-us = <200000>;
> +		/* GPIO215 WLAN_EN */
> +		gpio = <&gpio6 23 GPIO_ACTIVE_HIGH>;
> +		enable-active-high;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&wlan_en_default_mode>;
> +	};
> +
> +	vibrator {
> +		compatible = "gpio-vibrator";
> +		enable-gpios = <&gpio6 3 GPIO_ACTIVE_HIGH>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&vibrator_default>;
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&gpio_keys_default_mode>;
> +
> +		button-home {
> +			linux,code = <KEY_HOME>;
> +			label = "HOME";
> +			/* GPIO91 */
> +			gpios = <&gpio2 27 GPIO_ACTIVE_LOW>;
> +		};
> +		button-volup {
> +			linux,code = <KEY_VOLUMEUP>;
> +			label = "VOL+";
> +			/* GPIO67 */
> +			gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
> +		};
> +		button-voldown {
> +			linux,code = <KEY_VOLUMEDOWN>;
> +			label = "VOL-";
> +			/* GPIO92 */
> +			gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
> +		};
> +		button-menu {
> +			linux,code = <KEY_MENU>;
> +			label = "MENU";
> +			/* GPIO204 */
> +			gpios = <&gpio6 12 GPIO_ACTIVE_LOW>;
> +		};
> +		button-back {
> +			linux,code = <KEY_BACK>;
> +			label = "BACK";
> +			/* GPIO205 */
> +			gpios = <&gpio6 13 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	/*
> +	 * FIXME: this is not quite GPIO backlight. This is a
> +	 * KTD253 one-wire GPIO-controlled backlight. It can
> +	 * work as a GPIO backlight.
> +	 */
> +	gpio_bl: backlight {
> +		compatible = "gpio-backlight";
> +		/* GPIO 69 */
> +		gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&gpio_backlight_default_mode>;
> +	};
> +
> +	i2c-gpio-0 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&gpio4 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&gpio4 15 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&i2c_gpio_0_default>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		/* TODO: this should be used by the NCP6914 Camera power management unit */
> +	};
> +
> +	i2c-gpio-1 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&gpio4 24 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&gpio4 23 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&i2c_gpio_1_default>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		/* TODO: this should be used by the ALPS HSCDTD008A compass sensor */
> +	};
> +
> +	soc {
> +		// External Micro SD slot
> +		sdi0_per1@80126000 {
> +			arm,primecell-periphid = <0x10480180>;
> +			max-frequency = <100000000>;
> +			bus-width = <4>;
> +			cap-sd-highspeed;
> +			cap-mmc-highspeed;
> +			/* All direction control is used */
> +			st,sig-dir-cmd;
> +			st,sig-dir-dat0;
> +			st,sig-dir-dat2;
> +			st,sig-dir-dat31;
> +			st,sig-pin-fbclk;
> +			full-pwr-cycle;
> +			vmmc-supply = <&ab8500_ldo_aux3_reg>;
> +			vqmmc-supply = <&sd_level_translator>;
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&mc0_a_1_default>;
> +			pinctrl-1 = <&mc0_a_1_sleep>;
> +			status = "okay";
> +		};
> +
> +		// WLAN SDIO channel
> +		sdi1_per2@80118000 {
> +			arm,primecell-periphid = <0x10480180>;
> +			max-frequency = <50000000>;
> +			bus-width = <4>;
> +			non-removable;
> +			cap-sd-highspeed;
> +			vmmc-supply = <&wlan_en>;
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&mc1_a_2_default>;
> +			pinctrl-1 = <&mc1_a_2_sleep>;
> +			status = "okay";
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			wifi@1 {
> +				compatible = "brcm,bcm4329-fmac";
> +				reg = <1>;
> +				/* GPIO216 WL_HOST_WAKE */
> +				interrupt-parent = <&gpio6>;
> +				interrupts = <24 IRQ_TYPE_EDGE_FALLING>;
> +				interrupt-names = "host-wake";
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&wlan_default_mode>;
> +			};
> +		};
> +
> +		// eMMC
> +		sdi2_per3@80005000 {
> +			arm,primecell-periphid = <0x10480180>;
> +		        max-frequency = <100000000>;
> +			bus-width = <8>;
> +			non-removable;
> +			cap-mmc-highspeed;
> +			mmc-ddr-1_8v;
> +			vmmc-supply = <&ldo_3v3_reg>;
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&mc2_a_1_default>;
> +			pinctrl-1 = <&mc2_a_1_sleep>;
> +
> +			status = "okay";
> +		};
> +
> +		/* GBF (Bluetooth) UART */
> +		uart@80120000 {
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&u0_a_1_default>;
> +			pinctrl-1 = <&u0_a_1_sleep>;
> +			status = "okay";
> +
> +			/* FIXME: not quite working yet, probably needs regulators */

Not sure which regulators you would add here. AFAIK BCM4334 is supplied
directly by the battery, internal regulators for BT get activated with
the "shutdown" GPIO.

But yeah, for some reason it's not working properly.
Just wanted to mention it, no need for a change here :)

> +			bluetooth {
> +				compatible = "brcm,bcm4330-bt";
> +				shutdown-gpios = <&gpio6 30 GPIO_ACTIVE_HIGH>;
> +				device-wakeup-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
> +				host-wakeup-gpios = <&gpio3 1 GPIO_ACTIVE_HIGH>;
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&bluetooth_default_mode>;
> +			};
> +		};
> +
> +		/* GPF UART */
> +		uart@80121000 {
> +			status = "okay";
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&u1rxtx_a_1_default &u1ctsrts_a_1_default>;
> +			pinctrl-1 = <&u1rxtx_a_1_sleep &u1ctsrts_a_1_sleep>;
> +		};
> +
> +		/* Debugging console UART connected to AB8505 USB */
> +		uart@80007000 {
> +			status = "okay";
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&u2rxtx_c_1_default>;
> +			pinctrl-1 = <&u2rxtx_c_1_sleep>;
> +		};
> +
> +		prcmu@80157000 {
> +			ab8505 {
> +				ab8500_usb {
> +					pinctrl-names = "default", "sleep";
> +					pinctrl-0 = <&usb_a_1_default>;
> +					pinctrl-1 = <&usb_a_1_sleep>;
> +				};
> +
> +				ab8505-regulators {
> +					ab8500_ldo_aux1 {
> +						/* Used for VDD for sensors */
> +						regulator-name = "AUX1";
> +						regulator-min-microvolt = <3000000>;
> +						regulator-max-microvolt = <3300000>;
> +					};
> +
> +					ab8500_ldo_aux2 {
> +						/* Supplies the Cypress TMA140 touchscreen only with 3.3V */
> +						regulator-name = "AUX2";
> +						regulator-min-microvolt = <3300000>;
> +						regulator-max-microvolt = <3300000>;
> +					};
> +
> +					ab8500_ldo_aux3 {
> +						/* Used for voltage for external MMC/SD card */
> +						regulator-name = "AUX3";
> +						regulator-min-microvolt = <1100000>;
> +						regulator-max-microvolt = <3300000>;
> +					};
> +
> +					ab8500_ldo_aux4 {
> +						regulator-name = "AUX4";
> +						/* Hammer to 3.0V for the display */
> +						regulator-min-microvolt = <3000000>;
> +						regulator-max-microvolt = <3000000>;
> +					};
> +
> +					ab8500_ldo_aux5 {
> +						regulator-name = "AUX5";
> +						regulator-min-microvolt = <1050000>;
> +						regulator-max-microvolt = <2790000>;
> +						regulator-always-on;
> +					};
> +
> +					ab8500_ldo_aux6 {
> +						regulator-name = "AUX6";
> +						/* Hammer to 1.8V for the display */
> +						regulator-min-microvolt = <1800000>;
> +						regulator-max-microvolt = <1800000>;
> +					};
> +
> +					ab8500_ldo_aux8 {
> +						/* Mostly VIO for sensors */
> +						regulator-name = "AUX8";
> +					};
> +				};
> +			};
> +		};
> +
> +		/* I2C0 */
> +		i2c@80004000 {
> +			status = "okay";
> +
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&i2c0_a_1_default>;
> +			pinctrl-1 = <&i2c0_a_1_sleep>;
> +
> +			proximity@44 {
> +				compatible = "sharp,gp2ap002s00f";
> +				clock-frequency = <400000>;
> +				reg = <0x44>;
> +
> +				interrupt-parent = <&gpio4>;
> +				interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
> +				vdd-supply = <&ab8500_ldo_aux1_reg>;
> +				vio-supply = <&ab8500_ldo_aux8_reg>;
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&gp2ap002_skomer_default>;
> +				sharp,proximity-far-hysteresis = /bits/ 8 <0x2f>;
> +				sharp,proximity-close-hysteresis = /bits/ 8 <0x0f>;
> +			};
> +		};
> +
> +
> +		/* I2C2 */
> +		i2c@80128000 {
> +			status = "okay";
> +
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&i2c2_b_2_default>;
> +			pinctrl-1 = <&i2c2_b_2_sleep>;
> +
> +			accel@18 {
> +				compatible = "bosch,bma254";
> +				clock-frequency = <400000>;
> +				reg = <0x18>;
> +
> +				/* GPIO224 used as "smart alert" interrupt */
> +				interrupt-parent = <&gpio7>;
> +				interrupts = <0 IRQ_TYPE_EDGE_RISING>;
> +
> +				mount-matrix = "0", "1", "0",
> +					       "-1", "0", "0",
> +					       "0", "0", "1";
> +				vdd-supply = <&ab8500_ldo_aux1_reg>;
> +				vddio-supply = <&ab8500_ldo_aux8_reg>;
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&bma254_skomer_default>;
> +			};
> +		};
> +
> +		/* I2C3 */
> +		i2c@80110000 {
> +			status = "okay";
> +
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&i2c3_c_2_default>;
> +			pinctrl-1 = <&i2c3_c_2_sleep>;
> +
> +			/* TODO: this should be used by the Cypress TMA140 touchscreen */
> +		};
> +
> +		mcde@a0350000 {
> +			status = "okay";
> +			pinctrl-names = "default";
> +			pinctrl-0 = <&dsi_default_mode>;
> +
> +			dsi@a0351000 {
> +				panel {
> +					/* NT35510-based Hydis HVA40WV1 */
> +					compatible = "hydis,hva40wv1", "novatek,nt35510";
> +					reg = <0>;
> +					/* v_lcd_3v0 2.3-4.8V */
> +					vdd-supply = <&ab8500_ldo_aux4_reg>;
> +					/* v_lcd_1v8 1.65-3.3V */
> +					vddi-supply = <&ab8500_ldo_aux6_reg>;
> +					/* GPIO 139 */
> +					reset-gpios = <&gpio4 11 GPIO_ACTIVE_LOW>;
> +					pinctrl-names = "default";
> +					pinctrl-0 = <&display_default_mode>;
> +					backlight = <&gpio_bl>;
> +				};
> +			};
> +		};
> +	};
> +};
> +
> +&pinctrl {
> +	/*
> +	 * This extends the MC0 default config to include DAT32DIR
> +	 * which is used by this machine. If we don't do this the
> +	 * SD card does not work.
> +	 */
> +	sdi0 {
> +		mc0_a_1_default {
> +			default_mux {
> +				function = "mc0";
> +				/* This machine uses the DAT31 pin */
> +				groups = "mc0_a_1", "mc0dat31dir_a_1";
> +			};
> +			default_cfg5 {
> +				pins = "GPIO21_AB3"; /* DAT31DIR */
> +				ste,config = <&out_hi>;
> +			};
> +		};
> +	};
> +
> +	mcde {
> +		dsi_default_mode: dsi_default {
> +			default_mux1 {
> +				/* Mux in VSI0 used for DSI TE */
> +				function = "lcd";
> +				groups =
> +				"lcdvsi0_a_1"; /* VSI0 for LCD */
> +			};
> +			default_cfg1 {
> +				pins =
> +				"GPIO68_E1"; /* VSI0 */

Overall it looks good to me now, just two cosmetic comments:

The "groups" line above and this "pins" line isn't particularly long,
so I think it would be better readable if you keep it on one line.
(the unindented line wrapping is a bit hard to read...)

> +				ste,config = <&in_nopull>;
> +			};
> +		};
> +	};
> +
> +	/* Two GPIO lines used by the display */
> +	display {
> +		display_default_mode: display_default {
> +			skomer_cfg1 {
> +				/*
> +				 * OLED DETECT or check_pba, this appears to be high
> +				 * on "PBA" which I guess is "prototype board A".
> +				 */
> +				pins = "GPIO93_B7";
> +				ste,config = <&gpio_in_nopull>;
> +			};
> +			skomer_cfg2 {
> +				pins = "GPIO139_C9";
> +				/*
> +				 * MIPI_DSI0_RESET_N resets the display, leave high
> +				 * (de-asserted) so we only assert reset explicitly
> +				 * from the display driver.
> +				 */
> +				ste,config = <&gpio_out_hi>;
> +			};
> +		};
> +	};
> +	backlight {
> +		gpio_backlight_default_mode: backlight_default {
> +			skomer_cfg1 {
> +				pins = "GPIO69_E2"; /* LCD_BL_CTRL */
> +				ste,config = <&gpio_out_lo>;
> +			};
> +		};
> +	};
> +	/* GPIO that enables the 2.9V SD card level translator */
> +	sd-level-translator {
> +		sd_level_translator_default: sd_level_translator_default {
> +			/* level shifter on GPIO87 */
> +			skomer_cfg1 {
> +				pins = "GPIO87_B3";
> +				ste,config = <&gpio_out_hi>;
> +			};
> +		};
> +	};
> +	/* GPIO that enables the LDO regulator for the eMMC */
> +	emmc-ldo {
> +		emmc_ldo_en_default_mode: emmc_ldo_default {
> +			/* LDO enable on GPIO223 */
> +			skomer_cfg1 {
> +				pins = "GPIO223_AH9";
> +				ste,config = <&gpio_out_hi>;
> +			};
> +		};
> +	};
> +	/* GPIO keys */
> +	gpio-keys {
> +		gpio_keys_default_mode: gpio_keys_default {
> +			skomer_cfg1 {
> +				pins = "GPIO67_G2", /* VOL UP */
> +				       "GPIO91_B6", /* HOME */
> +				       "GPIO92_D6", /* VOL DOWN */
> +				       "GPIO204_AF23", /* MENU */
> +				       "GPIO205_AG23"; /* BACK */
> +					ste,config = <&gpio_in_pu>;

And here the indentation is weird, it should be on the same level
as "pins". With that fixed:

Reviewed-by: Stephan Gerhold <[email-masked]>

Thank you!
Stephan

> +			};
> +		};
> +	};
> +	/* Interrupt line for BMA254 */
> +	bma254 {
> +		bma254_skomer_default: bma254_skomer {
> +			skomer_cfg1 {
> +				pins = "GPIO224_AG9";
> +				ste,config = <&gpio_in_pd>;
> +			};
> +		};
> +	};
> +	/* Interrupt line for light/proximity sensor GP2AP002 */
> +	gp2ap002 {
> +		gp2ap002_skomer_default: gp2ap002_skomer {
> +			skomer_cfg1 {
> +				pins = "GPIO146_D13";
> +				ste,config = <&gpio_in_nopull>;
> +			};
> +		};
> +	};
> +	/* GPIO-based I2C bus for NCP6914 */
> +	i2c-gpio-0 {
> +		i2c_gpio_0_default: i2c_gpio_0 {
> +			skomer_cfg1 {
> +				pins = "GPIO143_D12", "GPIO144_B13";
> +				ste,config = <&gpio_in_nopull>;
> +			};
> +		};
> +	};
> +	/* GPIO-based I2C bus for ALPS HSCD compass */
> +	i2c-gpio-1 {
> +		i2c_gpio_1_default: i2c_gpio_1 {
> +			skomer_cfg1 {
> +				pins = "GPIO151_B17", "GPIO152_D16";
> +				ste,config = <&gpio_in_nopull>;
> +			};
> +		};
> +	};
> +	wlan {
> +		wlan_default_mode: wlan_default {
> +			skomer_cfg1 {
> +				pins = "GPIO216_AG12";
> +				ste,config = <&gpio_in_pd>;
> +			};
> +		};
> +		wlan_en_default_mode: wlan_en_default {
> +			skomer_cfg2 {
> +				pins = "GPIO215_AH13";
> +				ste,config = <&gpio_out_lo>;
> +			};
> +		};
> +	};
> +	bluetooth {
> +		bluetooth_default_mode: bluetooth_default {
> +			skomer_cfg1 {
> +				pins = "GPIO199_AH23", "GPIO222_AJ9";
> +				ste,config = <&gpio_out_lo>;
> +			};
> +			skomer_cfg2 {
> +				pins = "GPIO97_D9";
> +				ste,config = <&gpio_in_nopull>;
> +			};
> +		};
> +	};
> +	vibrator {
> +		vibrator_default: vibrator_default {
> +			skomer_cfg1 {
> +				pins = "GPIO195_AG28";	/* MOT_EN */
> +				ste,config = <&gpio_out_lo>;
> +			};
> +		};
> +	};
> +};
> +
> +&ab8505_gpio {
> +	/* Hog a few default settings */
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&gpio_default>;
> +
> +	gpio {
> +		gpio_default: gpio_default {
> +			skomer_mux {
> +				/* Change unused pins to GPIO mode */
> +				function = "gpio";
> +				groups = "gpio3_a_1",	/* default: SysClkReq4 */
> +					 "gpio14_a_1";	/* default: PWMOut1 */
> +			};
> +			skomer_cfg1 {
> +				pins = "GPIO11_B17", "GPIO13_D17", "GPIO50_L4";
> +				bias-disable;
> +			};
> +		};
> +	};
> +};
> -- 
> 2.21.1
> 

_______________________________________________
linux-arm-kernel mailing list
[email-masked]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel