diff options
Diffstat (limited to 'arm-hikey-fixWiFi.patch')
-rw-r--r-- | arm-hikey-fixWiFi.patch | 501 |
1 files changed, 501 insertions, 0 deletions
diff --git a/arm-hikey-fixWiFi.patch b/arm-hikey-fixWiFi.patch new file mode 100644 index 000000000..9ea70efd5 --- /dev/null +++ b/arm-hikey-fixWiFi.patch @@ -0,0 +1,501 @@ +From c477ebe21fabe0010a2ed324ce3a1762c757d867 Mon Sep 17 00:00:00 2001 +From: Ulf Hansson <ulf.hansson@linaro.org> +Date: Sat, 6 May 2017 11:41:30 +0200 +Subject: [PATCH 179/554] mmc: dt: pwrseq-simple: Invent power-off-delay-us + +During power off, after the GPIO pin has been asserted, some devices like +the Wifi chip from TI, Wl18xx, needs a delay before the host continues with +clock gating and turning off regulators as to follow a graceful shutdown +sequence. + +Therefore invent an optional power-off-delay-us DT binding for +mmc-pwrseq-simple, to allow us to support this constraint. + +Cc: devicetree@vger.kernel.org +Cc: Rob Herring <robh+dt@kernel.org> +Cc: linux-mmc@vger.kernel.org +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt b/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt +index e25436861867..9029b45b8a22 100644 +--- a/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt ++++ b/Documentation/devicetree/bindings/mmc/mmc-pwrseq-simple.txt +@@ -18,6 +18,8 @@ Optional properties: + "ext_clock" (External clock provided to the card). + - post-power-on-delay-ms : Delay in ms after powering the card and + de-asserting the reset-gpios (if any) ++- power-off-delay-us : Delay in us after asserting the reset-gpios (if any) ++ during power off of the card. + + Example: + +-- +2.13.0 + +From e9256e142f597edf90c68cec22db4c4aebaa27de Mon Sep 17 00:00:00 2001 +From: Ulf Hansson <ulf.hansson@linaro.org> +Date: Sat, 6 May 2017 11:43:05 +0200 +Subject: [PATCH 180/554] mmc: pwrseq_simple: Parse DTS for the + power-off-delay-us property + +If the optional power-off-delay-us property is found, insert the +corresponding delay after asserting the GPIO during power off. This enables +a graceful shutdown sequence for some devices. + +Cc: linux-mmc@vger.kernel.org +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + drivers/mmc/core/pwrseq_simple.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/mmc/core/pwrseq_simple.c b/drivers/mmc/core/pwrseq_simple.c +index 1304160de168..13ef162cf066 100644 +--- a/drivers/mmc/core/pwrseq_simple.c ++++ b/drivers/mmc/core/pwrseq_simple.c +@@ -27,6 +27,7 @@ struct mmc_pwrseq_simple { + struct mmc_pwrseq pwrseq; + bool clk_enabled; + u32 post_power_on_delay_ms; ++ u32 power_off_delay_us; + struct clk *ext_clk; + struct gpio_descs *reset_gpios; + }; +@@ -78,6 +79,10 @@ static void mmc_pwrseq_simple_power_off(struct mmc_host *host) + + mmc_pwrseq_simple_set_gpios_value(pwrseq, 1); + ++ if (pwrseq->power_off_delay_us) ++ usleep_range(pwrseq->power_off_delay_us, ++ 2 * pwrseq->power_off_delay_us); ++ + if (!IS_ERR(pwrseq->ext_clk) && pwrseq->clk_enabled) { + clk_disable_unprepare(pwrseq->ext_clk); + pwrseq->clk_enabled = false; +@@ -119,6 +124,8 @@ static int mmc_pwrseq_simple_probe(struct platform_device *pdev) + + device_property_read_u32(dev, "post-power-on-delay-ms", + &pwrseq->post_power_on_delay_ms); ++ device_property_read_u32(dev, "power-off-delay-us", ++ &pwrseq->power_off_delay_us); + + pwrseq->pwrseq.dev = dev; + pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops; +-- +2.13.0 + +From f74ac688c981138c914f9afba50b646146e35585 Mon Sep 17 00:00:00 2001 +From: Daniel Lezcano <daniel.lezcano@linaro.org> +Date: Mon, 24 Apr 2017 22:40:22 +0200 +Subject: [PATCH 181/554] mfd: dts: hi655x: Add clock binding for the pmic + +The hi655x PMIC provides the regulators but also a clock. The latter is +missing in the definition, so extend the documentation to include this as +well. + +Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> +Acked-by: Rob Herring <robh@kernel.org> +Acked-by: Lee Jones <lee.jones@linaro.org> +[Ulf: Split patch and updated changelog] +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt b/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt +index 05485699d70e..9630ac0e4b56 100644 +--- a/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt ++++ b/Documentation/devicetree/bindings/mfd/hisilicon,hi655x.txt +@@ -16,6 +16,11 @@ Required properties: + - reg: Base address of PMIC on Hi6220 SoC. + - interrupt-controller: Hi655x has internal IRQs (has own IRQ domain). + - pmic-gpios: The GPIO used by PMIC IRQ. ++- #clock-cells: From common clock binding; shall be set to 0 ++ ++Optional properties: ++- clock-output-names: From common clock binding to override the ++ default output clock name + + Example: + pmic: pmic@f8000000 { +@@ -24,4 +29,5 @@ Example: + interrupt-controller; + #interrupt-cells = <2>; + pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; ++ #clock-cells = <0>; + } +-- +2.13.0 + +From 307ded8968868e55343e063fbe96cff1efd77eb6 Mon Sep 17 00:00:00 2001 +From: Daniel Lezcano <daniel.lezcano@linaro.org> +Date: Mon, 24 Apr 2017 22:40:22 +0200 +Subject: [PATCH 182/554] arm64: dts: hikey: Add clock for the pmic mfd + +The hi655x PMIC provides the regulators but also a clock. The latter is +missing so let's add it. This clock is used by WiFi/Bluetooth chip, but +that connection is done in a separate change on top of this one. + +Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> +Acked-by: Rob Herring <robh@kernel.org> +Acked-by: Lee Jones <lee.jones@linaro.org> +[Ulf: Split patch and updated changelog] +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +index 75bce2d0b1a8..d22eb3a646c4 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts ++++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +@@ -330,6 +330,7 @@ + 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>; +-- +2.13.0 + +From 1b32a5ff98fbb271d2235ddcfe3b58f514f8260a Mon Sep 17 00:00:00 2001 +From: Ulf Hansson <ulf.hansson@linaro.org> +Date: Wed, 3 May 2017 12:46:55 +0200 +Subject: [PATCH 183/554] arm64: dts: hi6220: Move the fixed_5v_hub regulator + to the hikey dts + +The regulator is a part of the hikey board, therefore let's move it from +the hi6220 SoC dtsi file into the hikey dts file . Let's also rename the +regulator according to the datasheet (5V_HUB) to better reflect the HW. + +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 10 ++++++++++ + arch/arm64/boot/dts/hisilicon/hi6220.dtsi | 12 +----------- + 2 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +index d22eb3a646c4..0f6cba77fc76 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts ++++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +@@ -81,6 +81,16 @@ + }; + }; + ++ reg_5v_hub: regulator@0 { ++ 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; ++ }; ++ + soc { + spi0: spi@f7106000 { + status = "ok"; +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi +index 1e5129b19280..951152d44c02 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi ++++ b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi +@@ -725,20 +725,10 @@ + status = "disabled"; + }; + +- fixed_5v_hub: regulator@0 { +- compatible = "regulator-fixed"; +- regulator-name = "fixed_5v_hub"; +- regulator-min-microvolt = <5000000>; +- regulator-max-microvolt = <5000000>; +- regulator-boot-on; +- gpio = <&gpio0 7 0>; +- regulator-always-on; +- }; +- + usb_phy: usbphy { + compatible = "hisilicon,hi6220-usb-phy"; + #phy-cells = <0>; +- phy-supply = <&fixed_5v_hub>; ++ phy-supply = <®_5v_hub>; + hisilicon,peripheral-syscon = <&sys_ctrl>; + }; + +-- +2.13.0 + +From 84f7c60b31f10e3a438153bc7408ad536f585641 Mon Sep 17 00:00:00 2001 +From: Ulf Hansson <ulf.hansson@linaro.org> +Date: Wed, 3 May 2017 13:51:27 +0200 +Subject: [PATCH 184/554] arm64: dts: hikey: Add the SYS_5V and the VDD_3V3 + regulators + +Add these regulators to better describe the HW, but also because those is +needed in following changes. + +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +index 0f6cba77fc76..802f4a4bed30 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts ++++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +@@ -81,7 +81,26 @@ + }; + }; + +- reg_5v_hub: regulator@0 { ++ 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 = <®_sys_5v>; ++ }; ++ ++ reg_5v_hub: regulator@2 { + compatible = "regulator-fixed"; + regulator-name = "5V_HUB"; + regulator-min-microvolt = <5000000>; +@@ -89,6 +108,7 @@ + regulator-boot-on; + gpio = <&gpio0 7 0>; + regulator-always-on; ++ vin-supply = <®_sys_5v>; + }; + + soc { +-- +2.13.0 + +From 76f1dfb687150e852aa74573962cfc158a9570cc Mon Sep 17 00:00:00 2001 +From: Ulf Hansson <ulf.hansson@linaro.org> +Date: Wed, 3 May 2017 14:18:26 +0200 +Subject: [PATCH 185/554] arm64: dts: hi6220: Move board data from the dwmmc + nodes to hikey dts + +Move the board specific descriptions for the dwmmc nodes in the hi6220 SoC +dtsi, into the hikey dts as it's there these belongs. + +While changing this, let's take the opportunity to drop the use of the +"ti,non-removable" binding for one of the dwmmc device nodes, as it's not a +valid binding and not used. Drop also the unnecessary use of "num-slots = +<0x1>" for all of the dwmmc nodes, as there is no need to set this since +when default number of slots is one. + +Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> +Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> +Acked-by: Arnd Bergmann <arnd@arndb.de> +--- + arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 23 ++++++++++++++++++++++- + arch/arm64/boot/dts/hisilicon/hi6220.dtsi | 19 ------------------- + 2 files changed, 22 insertions(+), 20 deletions(-) + +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +index 802f4a4bed30..5132d8ed4664 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts ++++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +@@ -286,8 +286,29 @@ + + /* 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 { +- ti,non-removable; ++ broken-cd; ++ bus-width = <0x4>; + non-removable; + /* WL_EN */ + vmmc-supply = <&wlan_en_reg>; +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi +index 951152d44c02..5013e4b2ea71 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi ++++ b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi +@@ -756,17 +756,12 @@ + + dwmmc_0: dwmmc0@f723d000 { + compatible = "hisilicon,hi6220-dw-mshc"; +- num-slots = <0x1>; +- cap-mmc-highspeed; +- non-removable; + reg = <0x0 0xf723d000 0x0 0x1000>; + interrupts = <0x0 0x48 0x4>; + clocks = <&sys_ctrl 2>, <&sys_ctrl 1>; + clock-names = "ciu", "biu"; + resets = <&sys_ctrl PERIPH_RSTDIS0_MMC0>; + reset-names = "reset"; +- bus-width = <0x8>; +- vmmc-supply = <&ldo19>; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_pmx_func &emmc_clk_cfg_func + &emmc_cfg_func &emmc_rst_cfg_func>; +@@ -774,13 +769,7 @@ + + dwmmc_1: dwmmc1@f723e000 { + compatible = "hisilicon,hi6220-dw-mshc"; +- num-slots = <0x1>; +- card-detect-delay = <200>; + hisilicon,peripheral-syscon = <&ao_ctrl>; +- cap-sd-highspeed; +- sd-uhs-sdr12; +- sd-uhs-sdr25; +- sd-uhs-sdr50; + reg = <0x0 0xf723e000 0x0 0x1000>; + interrupts = <0x0 0x49 0x4>; + #address-cells = <0x1>; +@@ -789,11 +778,6 @@ + clock-names = "ciu", "biu"; + resets = <&sys_ctrl PERIPH_RSTDIS0_MMC1>; + reset-names = "reset"; +- vqmmc-supply = <&ldo7>; +- vmmc-supply = <&ldo10>; +- bus-width = <0x4>; +- disable-wp; +- cd-gpios = <&gpio1 0 1>; + pinctrl-names = "default", "idle"; + pinctrl-0 = <&sd_pmx_func &sd_clk_cfg_func &sd_cfg_func>; + pinctrl-1 = <&sd_pmx_idle &sd_clk_cfg_idle &sd_cfg_idle>; +@@ -801,15 +785,12 @@ + + dwmmc_2: dwmmc2@f723f000 { + compatible = "hisilicon,hi6220-dw-mshc"; +- num-slots = <0x1>; + reg = <0x0 0xf723f000 0x0 0x1000>; + interrupts = <0x0 0x4a 0x4>; + clocks = <&sys_ctrl HI6220_MMC2_CIUCLK>, <&sys_ctrl HI6220_MMC2_CLK>; + clock-names = "ciu", "biu"; + resets = <&sys_ctrl PERIPH_RSTDIS0_MMC2>; + reset-names = "reset"; +- bus-width = <0x4>; +- broken-cd; + pinctrl-names = "default", "idle"; + pinctrl-0 = <&sdio_pmx_func &sdio_clk_cfg_func &sdio_cfg_func>; + pinctrl-1 = <&sdio_pmx_idle &sdio_clk_cfg_idle &sdio_cfg_idle>; +-- +2.13.0 + +From ea452678734eb782126f999bf5c4fb3e71d3b196 Mon Sep 17 00:00:00 2001 +From: Ulf Hansson <ulf.hansson@linaro.org> +Date: Wed, 3 May 2017 16:11:33 +0200 +Subject: [PATCH 186/554] 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> +--- + arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts | 26 +++++++++++--------------- + 1 file changed, 11 insertions(+), 15 deletions(-) + +diff --git a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +index 5132d8ed4664..49f6a6242cf9 100644 +--- a/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts ++++ b/arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts +@@ -111,6 +111,15 @@ + vin-supply = <®_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"; +@@ -307,11 +316,10 @@ + }; + + dwmmc_2: dwmmc2@f723f000 { +- broken-cd; + bus-width = <0x4>; + non-removable; +- /* WL_EN */ +- vmmc-supply = <&wlan_en_reg>; ++ vmmc-supply = <®_vdd_3v3>; ++ mmc-pwrseq = <&wl1835_pwrseq>; + + #address-cells = <0x1>; + #size-cells = <0x0>; +@@ -323,18 +331,6 @@ + interrupts = <3 IRQ_TYPE_EDGE_RISING>; + }; + }; +- +- wlan_en_reg: regulator@1 { +- compatible = "regulator-fixed"; +- regulator-name = "wlan-en-regulator"; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- /* WLAN_EN GPIO */ +- gpio = <&gpio0 5 0>; +- /* WLAN card specific delay */ +- startup-delay-us = <70000>; +- enable-active-high; +- }; + }; + + leds { +-- +2.13.0 + |