MIPS: DTS: CI20: Enable support for WiFi / Bluetooth
authorPaul Cercueil <paul@crapouillou.net>
Sun, 4 Jun 2023 14:56:40 +0000 (16:56 +0200)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Fri, 9 Jun 2023 07:55:38 +0000 (09:55 +0200)
Wire the WiFi/Bluetooth chip properly in the Device Tree.

- Provide it with the correct regulators and clocks;
- Change the MMC I/O bus to 1.8V which seems to be enough;
- Change the MMC I/O bus frequency to 25 MHz as 50 MHz causes errors;
- Fix the Bluetooth powerdown GPIO being inverted and add reset GPIO;
- Convert host-wakeup-gpios to IRQ.

With these changes, the WiFi works properly with the latest firmware
provided by linux-firmware. The Bluetooth does not work very well here,
as I cannot get my wireless keyboard to pair; but it does detect it, and
it does see the key presses when I type the pairing code.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/boot/dts/ingenic/ci20.dts

index bdbd064..cec0caa 100644 (file)
                gpios = <&gpe 3 GPIO_ACTIVE_LOW>;
        };
 
-       wlan0_power: fixedregulator-1 {
+       bt_power: fixedregulator-1 {
                compatible = "regulator-fixed";
 
-               regulator-name = "wlan0_power";
+               regulator-name = "bt_power";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-settling-time-us = <1400>;
+
+               vin-supply = <&vcc_50>;
 
                gpio = <&gpb 19 0>;
                enable-active-high;
                gpio = <&gpf 15 0>;
                enable-active-high;
        };
+
+       wifi_power: fixedregulator-4 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "wifi_power";
+
+               /*
+                * Technically it's 5V, the WiFi chip has its own internal
+                * regulators; but the MMC/SD subsystem won't accept such a
+                * value.
+                */
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-settling-time-us = <150000>;
+
+               vin-supply = <&bt_power>;
+       };
+
+       vcc_33v: fixedregulator-5 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "vcc_33v";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
+
+       wifi_pwrseq: pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               reset-gpios = <&gpf 7 GPIO_ACTIVE_LOW>;
+
+               clocks = <&rtc_dev>;
+               clock-names = "ext_clock";
+       };
 };
 
 &ext {
        pinctrl-0 = <&pins_mmc0>;
 
        cd-gpios = <&gpf 20 GPIO_ACTIVE_LOW>;
+       vmmc-supply = <&vcc_33v>;
+       vqmmc-supply = <&vcc_33v>;
 };
 
 &mmc1 {
        status = "okay";
 
        bus-width = <4>;
-       max-frequency = <50000000>;
+       max-frequency = <25000000>;
+       mmc-pwrseq = <&wifi_pwrseq>;
+       vmmc-supply = <&wifi_power>;
+       vqmmc-supply = <&wifi_io>;
        non-removable;
 
        pinctrl-names = "default";
        pinctrl-0 = <&pins_mmc1>;
 
-       brcmf: wifi@1 {
-/*             reg = <4>;*/
-               compatible = "brcm,bcm4330-fmac";
-               vcc-supply = <&wlan0_power>;
-               device-wakeup-gpios = <&gpd 9 GPIO_ACTIVE_HIGH>;
-               shutdown-gpios = <&gpf 7 GPIO_ACTIVE_LOW>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       wifi@1 {
+               compatible = "brcm,bcm4329-fmac";
+               reg = <1>;
+
+               interrupt-parent = <&gpd>;
+               interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
+               interrupt-names = "host-wake";
        };
 };
 
 
        bluetooth {
                compatible = "brcm,bcm4330-bt";
-               reset-gpios = <&gpf 8 GPIO_ACTIVE_HIGH>;
-               vcc-supply = <&wlan0_power>;
+
+               vbat-supply = <&bt_power>;
+               vddio-supply = <&wifi_io>;
+
+               interrupt-parent = <&gpf>;
+               interrupts = <6 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "host-wakeup";
+
+               clocks = <&rtc_dev>;
+               clock-names = "lpo";
+
+               reset-gpios = <&gpf 8 GPIO_ACTIVE_LOW>;
                device-wakeup-gpios = <&gpf 5 GPIO_ACTIVE_HIGH>;
-               host-wakeup-gpios = <&gpf 6 GPIO_ACTIVE_HIGH>;
-               shutdown-gpios = <&gpf 4 GPIO_ACTIVE_LOW>;
+               shutdown-gpios = <&gpf 4 GPIO_ACTIVE_HIGH>;
        };
 };
 
                                regulator-always-on;
                        };
                        wifi_io: LDO6 {
-                               regulator-min-microvolt = <2500000>;
-                               regulator-max-microvolt = <2500000>;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-settling-time-us = <150000>;
                                inl-supply = <&vcc_33v>;
                        };
                        cim_io_28: LDO7 {