Files
linux/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts
Linus Walleij 435e62d566 ARM: dts: Fix boot regression on Skomer
commit d9058d6a0e upstream.

The signal routing on the Skomer board was incorrect making
it impossible to mount root from the SD card. Fix this up.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Cc: stable@vger.kernel.org
Cc: Stefan Hansson <newbyte@disroot.org>
Link: https://lore.kernel.org/r/20220205235312.446730-1-linus.walleij@linaro.org'
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-02-16 12:54:21 +01:00

610 lines
14 KiB
Plaintext

// 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>;
};
};
ktd253: backlight {
compatible = "kinetic,ktd253";
/* GPIO 69 */
enable-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
/* Default to 13/32 brightness */
default-brightness = <13>;
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>;
magnetometer@c {
compatible = "alps,hscdtd008a";
reg = <0x0c>;
avdd-supply = <&ab8500_ldo_aux1_reg>;
dvdd-supply = <&ab8500_ldo_aux8_reg>;
};
};
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-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 */
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.0V */
regulator-name = "AUX2";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
};
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";
/* Intended for 1V8 for touchscreen but actually left unused */
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <2790000>;
};
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>;
/* Cypress CY8CTMA140 touchscreen */
touchscreen@20 {
compatible = "cypress,cy8ctma140";
clock-frequency = <400000>;
reg = <0x20>;
touchscreen-size-x = <480>;
touchscreen-size-y = <800>;
touchscreen-max-pressure = <255>;
/* GPIO218 for IRQ */
interrupt-parent = <&gpio6>;
interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
/* VDD is "digital supply" nominally 1.71-3.6V */
vdd-supply = <&ab8500_ldo_aux2_reg>;
/* VCPIN is "analog supply", 2.7-3.6 V */
vcpin-supply = <&ab8500_ldo_aux2_reg>;
pinctrl-names = "default";
pinctrl-0 = <&tma140_skomer_default>;
};
};
mcde@a0350000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&dsi_default_mode>;
dsi-controller@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 = <&ktd253>;
};
};
};
};
};
&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 */
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>;
};
};
};
/* 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>;
};
};
};
/* Interrupt line for the Cypress TMA140 touchscreen */
touchscreen {
tma140_skomer_default: tma140_skomer {
skomer_cfg1 {
pins = "GPIO218_AH11";
ste,config = <&gpio_in_nopull>;
};
};
};
};
&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;
};
};
};
};