linux/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
Ulf Hansson ea45267873 arm64: dts: hikey: Fix WiFi support
The description of the connection between the dwmmc (SDIO) controller and
the Wifi chip, which is attached to the SDIO bus is wrong. Currently the
SDIO card can't be detected and thus the Wifi doesn't work.

Let's fix this by assigning the correct vmmc supply, which is the always on
regulator VDD_3V3 and remove the WLAN enable regulator altogether. Then to
properly deal with the power on/off sequence, add a mmc-pwrseq node to
describe the resources needed to detect the SDIO card.

Except for the WLAN enable GPIO and its corresponding assert/de-assert
delays, the mmc-pwrseq node also contains a handle to a clock provided by
the hi655x pmic. This clock is also needed to be able to turn on the WiFi
chip.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
2017-05-23 14:18:10 +02:00

517 lines
12 KiB
Plaintext

/*
* dts file for Hisilicon HiKey Development Board
*
* Copyright (C) 2015, Hisilicon Ltd.
*
*/
/dts-v1/;
#include "hi6220.dtsi"
#include "hikey-pinctrl.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
model = "HiKey Development Board";
compatible = "hisilicon,hi6220-hikey", "hisilicon,hi6220";
aliases {
serial0 = &uart0; /* On board UART0 */
serial1 = &uart1; /* BT UART */
serial2 = &uart2; /* LS Expansion UART0 */
serial3 = &uart3; /* LS Expansion UART1 */
};
chosen {
stdout-path = "serial3:115200n8";
};
/*
* Reserve below regions from memory node:
*
* 0x05e0,0000 - 0x05ef,ffff: MCU firmware runtime using
* 0x05f0,1000 - 0x05f0,1fff: Reboot reason
* 0x06df,f000 - 0x06df,ffff: Mailbox message data
* 0x0740,f000 - 0x0740,ffff: MCU firmware section
* 0x21f0,0000 - 0x21ff,ffff: pstore/ramoops buffer
* 0x3e00,0000 - 0x3fff,ffff: OP-TEE
*/
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x05e00000>,
<0x00000000 0x05f00000 0x00000000 0x00001000>,
<0x00000000 0x05f02000 0x00000000 0x00efd000>,
<0x00000000 0x06e00000 0x00000000 0x0060f000>,
<0x00000000 0x07410000 0x00000000 0x1aaf0000>,
<0x00000000 0x22000000 0x00000000 0x1c000000>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ramoops@0x21f00000 {
compatible = "ramoops";
reg = <0x0 0x21f00000 0x0 0x00100000>;
record-size = <0x00020000>;
console-size = <0x00020000>;
ftrace-size = <0x00020000>;
};
/* global autoconfigured region for contiguous allocations */
linux,cma {
compatible = "shared-dma-pool";
reusable;
size = <0x00000000 0x08000000>;
linux,cma-default;
};
};
reboot-mode-syscon@5f01000 {
compatible = "syscon", "simple-mfd";
reg = <0x0 0x05f01000 0x0 0x00001000>;
reboot-mode {
compatible = "syscon-reboot-mode";
offset = <0x0>;
mode-normal = <0x77665501>;
mode-bootloader = <0x77665500>;
mode-recovery = <0x77665502>;
};
};
reg_sys_5v: regulator@0 {
compatible = "regulator-fixed";
regulator-name = "SYS_5V";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-boot-on;
regulator-always-on;
};
reg_vdd_3v3: regulator@1 {
compatible = "regulator-fixed";
regulator-name = "VDD_3V3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
regulator-always-on;
vin-supply = <&reg_sys_5v>;
};
reg_5v_hub: regulator@2 {
compatible = "regulator-fixed";
regulator-name = "5V_HUB";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-boot-on;
gpio = <&gpio0 7 0>;
regulator-always-on;
vin-supply = <&reg_sys_5v>;
};
wl1835_pwrseq: wl1835-pwrseq {
compatible = "mmc-pwrseq-simple";
/* WLAN_EN GPIO */
reset-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
clocks = <&pmic>;
clock-names = "ext_clock";
power-off-delay-us = <10>;
};
soc {
spi0: spi@f7106000 {
status = "ok";
};
i2c0: i2c@f7100000 {
status = "ok";
};
i2c1: i2c@f7101000 {
status = "ok";
};
uart1: uart@f7111000 {
assigned-clocks = <&sys_ctrl HI6220_UART1_SRC>;
assigned-clock-rates = <150000000>;
status = "ok";
bluetooth {
compatible = "ti,wl1835-st";
enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
};
};
uart2: uart@f7112000 {
status = "ok";
};
uart3: uart@f7113000 {
status = "ok";
};
/*
* Legend: proper name = the GPIO line is used as GPIO
* NC = not connected (not routed from the SoC)
* "[PER]" = pin is muxed for peripheral (not GPIO)
* "" = no idea, schematic doesn't say, could be
* unrouted (not connected to any external pin)
* LSEC = Low Speed External Connector
* HSEC = High Speed External Connector
*
* Pin assignments taken from LeMaker and CircuitCo Schematics
* Rev A1.
*
* For the lines routed to the external connectors the
* lines are named after the 96Boards CE Specification 1.0,
* Appendix "Expansion Connector Signal Description".
*
* When the 96Board naming of a line and the schematic name of
* the same line are in conflict, the 96Board specification
* takes precedence, which means that the external UART on the
* LSEC is named UART0 while the schematic and SoC names this
* UART2. This is only for the informational lines i.e. "[FOO]",
* the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
* ones actually used for GPIO.
*/
gpio0: gpio@f8011000 {
gpio-line-names = "PWR_HOLD", "DSI_SEL",
"USB_HUB_RESET_N", "USB_SEL", "HDMI_PD", "WL_REG_ON",
"PWRON_DET", "5V_HUB_EN";
};
gpio1: gpio@f8012000 {
gpio-line-names = "SD_DET", "HDMI_INT", "PMU_IRQ_N",
"WL_HOST_WAKE", "NC", "NC", "NC", "BT_REG_ON";
};
gpio2: gpio@f8013000 {
gpio-line-names =
"GPIO-A", /* LSEC Pin 23: GPIO2_0 */
"GPIO-B", /* LSEC Pin 24: GPIO2_1 */
"GPIO-C", /* LSEC Pin 25: GPIO2_2 */
"GPIO-D", /* LSEC Pin 26: GPIO2_3 */
"GPIO-E", /* LSEC Pin 27: GPIO2_4 */
"USB_ID_DET", "USB_VBUS_DET",
"GPIO-H"; /* LSEC Pin 30: GPIO2_7 */
};
gpio3: gpio@f8014000 {
gpio-line-names = "GPIO3_0", "NC", "NC", "", "NC", "",
"WLAN_ACTIVE", "NC", "NC";
};
gpio4: gpio@f7020000 {
gpio-line-names = "USER_LED1", "USER_LED2", "USER_LED3",
"USER_LED4", "SD_SEL", "NC", "NC", "BT_ACTIVE";
};
gpio5: gpio@f7021000 {
gpio-line-names = "NC", "NC",
"[UART1_RxD]", /* LSEC Pin 11: UART3_RX */
"[UART1_TxD]", /* LSEC Pin 13: UART3_TX */
"[AUX_SSI1]", "NC",
"[PCM_CLK]", /* LSEC Pin 18: MODEM_PCM_XCLK */
"[PCM_FS]"; /* LSEC Pin 16: MODEM_PCM_XFS */
};
gpio6: gpio@f7022000 {
gpio-line-names =
"[SPI0_DIN]", /* Pin 10: SPI0_DI */
"[SPI0_DOUT]", /* Pin 14: SPI0_DO */
"[SPI0_CS]", /* Pin 12: SPI0_CS_N */
"[SPI0_SCLK]", /* Pin 8: SPI0_SCLK */
"NC", "NC", "NC",
"GPIO-G"; /* Pin 29: GPIO6_7_DSI_TE0 */
};
gpio7: gpio@f7023000 {
gpio-line-names = "NC", "NC", "NC", "NC",
"[PCM_DI]", /* Pin 22: MODEM_PCM_DI */
"[PCM_DO]", /* Pin 20: MODEM_PCM_DO */
"NC", "NC";
};
gpio8: gpio@f7024000 {
gpio-line-names = "NC", "[CEC_CLK_19_2MHZ]", "NC",
"", "", "", "", "", "";
};
gpio9: gpio@f7025000 {
gpio-line-names = "",
"GPIO-J", /* LSEC Pin 32: ISP_PWDN0_GPIO9_1 */
"GPIO-L", /* LSEC Pin 34: ISP_PWDN1_GPIO9_2 */
"NC", "NC", "NC", "NC", "[ISP_CCLK0]";
};
gpio10: gpio@f7026000 {
gpio-line-names = "BOOT_SEL",
"[ISP_CCLK1]",
"GPIO-I", /* LSEC Pin 31: ISP_RSTB0_GPIO10_2 */
"GPIO-K", /* LSEC Pin 33: ISP_RSTB1_GPIO10_3 */
"NC", "NC",
"[I2C2_SDA]", /* HSEC Pin 34: ISP0_SDA */
"[I2C2_SCL]"; /* HSEC Pin 32: ISP0_SCL */
};
gpio11: gpio@f7027000 {
gpio-line-names =
"[I2C3_SDA]", /* HSEC Pin 38: ISP1_SDA */
"[I2C3_SCL]", /* HSEC Pin 36: ISP1_SCL */
"", "NC", "NC", "NC", "", "";
};
gpio12: gpio@f7028000 {
gpio-line-names = "[BT_PCM_XFS]", "[BT_PCM_DI]",
"[BT_PCM_DO]",
"NC", "NC", "NC", "NC",
"GPIO-F"; /* LSEC Pin 28: BL_PWM_GPIO12_7 */
};
gpio13: gpio@f7029000 {
gpio-line-names = "[UART0_RX]", "[UART0_TX]",
"[BT_UART1_CTS]", "[BT_UART1_RTS]",
"[BT_UART1_RX]", "[BT_UART1_TX]",
"[UART0_CTS]", /* LSEC Pin 3: UART2_CTS_N */
"[UART0_RTS]"; /* LSEC Pin 9: UART2_RTS_N */
};
gpio14: gpio@f702a000 {
gpio-line-names =
"[UART0_RxD]", /* LSEC Pin 7: UART2_RX */
"[UART0_TxD]", /* LSEC Pin 5: UART2_TX */
"[I2C0_SCL]", /* LSEC Pin 15: I2C0_SCL */
"[I2C0_SDA]", /* LSEC Pin 17: I2C0_SDA */
"[I2C1_SCL]", /* LSEC Pin 19: I2C1_SCL */
"[I2C1_SDA]", /* LSEC Pin 21: I2C1_SDA */
"[I2C2_SCL]", "[I2C2_SDA]";
};
gpio15: gpio@f702b000 {
gpio-line-names = "", "", "", "", "", "", "NC", "";
};
/* GPIO blocks 16 thru 19 do not appear to be routed to pins */
dwmmc_0: dwmmc0@f723d000 {
cap-mmc-highspeed;
non-removable;
bus-width = <0x8>;
vmmc-supply = <&ldo19>;
};
dwmmc_1: dwmmc1@f723e000 {
card-detect-delay = <200>;
cap-sd-highspeed;
sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
vqmmc-supply = <&ldo7>;
vmmc-supply = <&ldo10>;
bus-width = <0x4>;
disable-wp;
cd-gpios = <&gpio1 0 1>;
};
dwmmc_2: dwmmc2@f723f000 {
bus-width = <0x4>;
non-removable;
vmmc-supply = <&reg_vdd_3v3>;
mmc-pwrseq = <&wl1835_pwrseq>;
#address-cells = <0x1>;
#size-cells = <0x0>;
wlcore: wlcore@2 {
compatible = "ti,wl1835";
reg = <2>; /* sdio func num */
/* WL_IRQ, WL_HOST_WAKE_GPIO1_3 */
interrupt-parent = <&gpio1>;
interrupts = <3 IRQ_TYPE_EDGE_RISING>;
};
};
};
leds {
compatible = "gpio-leds";
user_led4 {
label = "user_led4";
gpios = <&gpio4 0 0>; /* <&gpio_user_led_1>; */
linux,default-trigger = "heartbeat";
};
user_led3 {
label = "user_led3";
gpios = <&gpio4 1 0>; /* <&gpio_user_led_2>; */
linux,default-trigger = "mmc0";
};
user_led2 {
label = "user_led2";
gpios = <&gpio4 2 0>; /* <&gpio_user_led_3>; */
linux,default-trigger = "mmc1";
};
user_led1 {
label = "user_led1";
gpios = <&gpio4 3 0>; /* <&gpio_user_led_4>; */
linux,default-trigger = "cpu0";
};
wlan_active_led {
label = "wifi_active";
gpios = <&gpio3 5 0>; /* <&gpio_wlan_active_led>; */
linux,default-trigger = "phy0tx";
default-state = "off";
};
bt_active_led {
label = "bt_active";
gpios = <&gpio4 7 0>; /* <&gpio_bt_active_led>; */
linux,default-trigger = "hci0rx";
default-state = "off";
};
};
pmic: pmic@f8000000 {
compatible = "hisilicon,hi655x-pmic";
reg = <0x0 0xf8000000 0x0 0x1000>;
#clock-cells = <0>;
interrupt-controller;
#interrupt-cells = <2>;
pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
regulators {
ldo2: LDO2 {
regulator-name = "LDO2_2V8";
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <3200000>;
regulator-enable-ramp-delay = <120>;
};
ldo7: LDO7 {
regulator-name = "LDO7_SDIO";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <120>;
};
ldo10: LDO10 {
regulator-name = "LDO10_2V85";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3000000>;
regulator-enable-ramp-delay = <360>;
};
ldo13: LDO13 {
regulator-name = "LDO13_1V8";
regulator-min-microvolt = <1600000>;
regulator-max-microvolt = <1950000>;
regulator-enable-ramp-delay = <120>;
};
ldo14: LDO14 {
regulator-name = "LDO14_2V8";
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <3200000>;
regulator-enable-ramp-delay = <120>;
};
ldo15: LDO15 {
regulator-name = "LDO15_1V8";
regulator-min-microvolt = <1600000>;
regulator-max-microvolt = <1950000>;
regulator-boot-on;
regulator-always-on;
regulator-enable-ramp-delay = <120>;
};
ldo17: LDO17 {
regulator-name = "LDO17_2V5";
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <3200000>;
regulator-enable-ramp-delay = <120>;
};
ldo19: LDO19 {
regulator-name = "LDO19_3V0";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3000000>;
regulator-enable-ramp-delay = <360>;
};
ldo21: LDO21 {
regulator-name = "LDO21_1V8";
regulator-min-microvolt = <1650000>;
regulator-max-microvolt = <2000000>;
regulator-always-on;
regulator-enable-ramp-delay = <120>;
};
ldo22: LDO22 {
regulator-name = "LDO22_1V2";
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1200000>;
regulator-boot-on;
regulator-always-on;
regulator-enable-ramp-delay = <120>;
};
};
};
firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
};
};
&uart2 {
label = "LS-UART0";
};
&uart3 {
label = "LS-UART1";
};
&ade {
status = "ok";
};
&dsi {
status = "ok";
ports {
/* 1 for output port */
port@1 {
reg = <1>;
dsi_out0: endpoint@0 {
remote-endpoint = <&adv7533_in>;
};
};
};
};
&i2c2 {
#address-cells = <1>;
#size-cells = <0>;
status = "ok";
adv7533: adv7533@39 {
compatible = "adi,adv7533";
reg = <0x39>;
interrupt-parent = <&gpio1>;
interrupts = <1 2>;
pd-gpio = <&gpio0 4 0>;
adi,dsi-lanes = <4>;
port {
adv7533_in: endpoint {
remote-endpoint = <&dsi_out0>;
};
};
};
};