ARM: sun5i: chip: Enable Wi-Fi SDIO chip
authorMaxime Ripard <maxime.ripard@free-electrons.com>
Wed, 22 Jul 2015 14:51:33 +0000 (16:51 +0200)
committerMaxime Ripard <maxime.ripard@free-electrons.com>
Tue, 22 Nov 2016 14:33:54 +0000 (15:33 +0100)
The WiFi chip is powered through a GPIO and two regulators in parallel.
Since that case is not supported yet, just set them as always on before we
rework the regulator framework to deal with those.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
arch/arm/boot/dts/sun5i-r8-chip.dts

index b68a123..e616084 100644 (file)
                        default-state = "on";
                };
        };
+
+       mmc0_pwrseq: mmc0_pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               pinctrl-names = "default";
+               pinctrl-0 = <&chip_wifi_reg_on_pin>;
+               reset-gpios = <&pio 2 19 GPIO_ACTIVE_LOW>; /* PC19 */
+       };
 };
 
 &be0 {
        };
 };
 
+&mmc0_pins_a {
+       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+};
+
 &mmc0 {
        pinctrl-names = "default";
        pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
+       mmc-pwrseq = <&mmc0_pwrseq>;
        bus-width = <4>;
        non-removable;
        status = "okay";
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
        };
 
+       chip_wifi_reg_on_pin: chip_wifi_reg_on_pin@0 {
+               allwinner,pins = "PC19";
+               allwinner,function = "gpio_out";
+               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+       };
+
        chip_id_det_pin: chip_id_det_pin@0 {
                allwinner,pins = "PG2";
                allwinner,function = "gpio_in";
        regulator-always-on;
 };
 
+/*
+ * Both LDO3 and LDO4 are used in parallel to power up the WiFi/BT
+ * Chip.
+ *
+ * If those are not enabled, the SDIO part will not enumerate, and
+ * since there's no way currently to pass DT infos to an SDIO device,
+ * we cannot really do better than this ugly hack for now.
+ */
+&reg_ldo3 {
+       regulator-min-microvolt = <3300000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "vcc-wifi-1";
+       regulator-always-on;
+};
+
+&reg_ldo4 {
+       regulator-min-microvolt = <3300000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "vcc-wifi-2";
+       regulator-always-on;
+};
+
 &reg_ldo5 {
        regulator-min-microvolt = <1800000>;
        regulator-max-microvolt = <1800000>;