lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 15 Feb 2023 18:31:57 +0100
From:   "H. Nikolaus Schaller" <hns@...delico.com>
To:     Paul Cercueil <paul@...pouillou.net>,
        Rob Herring <robh+dt@...nel.org>,
        Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
        Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
        Arnd Bergmann <arnd@...db.de>,
        Srinivas Kandagatla <srinivas.kandagatla@...aro.org>,
        Rafał Miłecki <rafal@...ecki.pl>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Kees Cook <keescook@...omium.org>,
        Matthias Brugger <matthias.bgg@...il.com>
Cc:     riccardo Mottola <riccardo.mottola@...ero.it>, paul@...die.org.uk,
        linux-mips@...r.kernel.org, devicetree@...r.kernel.org,
        linux-kernel@...r.kernel.org, letux-kernel@...nphoenux.org,
        kernel@...a-handheld.com,
        "H. Nikolaus Schaller" <hns@...delico.com>
Subject: [RFC 2/3] MIPS: DTS: CI20: fixes for WiFi/Bluetooth

CI20 has a BCM4330 based WiFi and Bluetooth module.

- add proper power supply regulators
- fix polarity of some GPIOs
- add a simple pwrseq node for WiFi
- reduce max-frequency for WiFi since 50 MHz seems not to work
- add fixed regulators to activate the BT_WAKE and WL_WAKE gpios
  before the chip is powered up.
  This can not be done by the driver since it is not loaded if
  compiled as kernel module before the WiFi/BT module responds.
- add clock chain from the external i2c rtc through the clk32k
  to the WiFi and Bluetooth module.

Signed-off-by: H. Nikolaus Schaller <hns@...delico.com>
---
 arch/mips/boot/dts/ingenic/ci20.dts | 77 ++++++++++++++++++++++++-----
 1 file changed, 65 insertions(+), 12 deletions(-)

diff --git a/arch/mips/boot/dts/ingenic/ci20.dts b/arch/mips/boot/dts/ingenic/ci20.dts
index 8f21d2304737c..139507d8c26e3 100644
--- a/arch/mips/boot/dts/ingenic/ci20.dts
+++ b/arch/mips/boot/dts/ingenic/ci20.dts
@@ -97,13 +97,45 @@ ir: ir {
 		gpios = <&gpe 3 GPIO_ACTIVE_LOW>;
 	};
 
+	/* WORKAROUND: Keeping WLAN wake high before power on. No simple driver fix */
+	wlan0_wake: fixedregulator@4 {
+		compatible = "regulator-fixed";
+		regulator-name = "wlan0_wake";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		gpio = <&gpd 9 GPIO_ACTIVE_HIGH>;/* WL_WAKE */
+		enable-active-high;
+		regulator-always-on;
+	};
+
+	/* WORKAROUND: Keeping BT wake high before power on. No simple driver fix */
+	bt_wake: fixedregulator@7 {
+		compatible = "regulator-fixed";
+		regulator-name = "bt_wake";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		gpio = <&gpf 5 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	wlan0_pwrseq: wlan0_pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&gpf 7 GPIO_ACTIVE_LOW>;
+		clocks = <&rtc_dev>;
+		clock-names = "clk32k";
+		post-power-on-delay-ms = <150>;
+	};
+
 	wlan0_power: fixedregulator@1 {
 		compatible = "regulator-fixed";
 
 		regulator-name = "wlan0_power";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
 
-		gpio = <&gpb 19 GPIO_ACTIVE_LOW>;
+		gpio = <&gpb 19 GPIO_ACTIVE_HIGH>;
 		enable-active-high;
+		regulator-always-on;
 	};
 
 	otg_power: fixedregulator@2 {
@@ -159,6 +191,9 @@ &mmc0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&pins_mmc0>;
 
+	vmmc-supply = <&vcc_33>;
+	vqmmc-supply = <&vcc_33>;	/* VDDIOMSC */
+
 	cd-gpios = <&gpf 20 GPIO_ACTIVE_LOW>;
 };
 
@@ -166,21 +201,34 @@ &mmc1 {
 	status = "okay";
 
 	bus-width = <4>;
-	max-frequency = <50000000>;
+	max-frequency = <25000000>;
 	non-removable;
 
 	pinctrl-names = "default";
 	pinctrl-0 = <&pins_mmc1>;
 
+	vmmc-supply = <&wlan0_power>;
+	vqmmc-supply = <&wlan0_io>;
+
+	mmc-pwrseq = <&wlan0_pwrseq>;
+
+	#address-cells = <1>;
+	#size-cells = <0>;
+
 	brcmf: wifi@1 {
-/*		reg = <4>;*/
+		reg = <1>;
 		compatible = "brcm,bcm4330-fmac";
 		vcc-supply = <&wlan0_power>;
-		device-wakeup-gpios = <&gpd 9 GPIO_ACTIVE_HIGH>;
-		shutdown-gpios = <&gpf 7 GPIO_ACTIVE_LOW>;
 	};
 };
 
+&rtc_dev {
+	clocks = <&ext_rtc 0>, <&ext_rtc 0>;
+	clock-names = "rtc", "clk32k";
+
+	system-power-controller;
+};
+
 &uart0 {
 	status = "okay";
 
@@ -204,11 +252,16 @@ &uart2 {
 
 	bluetooth {
 		compatible = "brcm,bcm4330-bt";
-		reset-gpios = <&gpf 8 GPIO_ACTIVE_HIGH>;
-		vcc-supply = <&wlan0_power>;
-		device-wakeup-gpios = <&gpf 5 GPIO_ACTIVE_HIGH>;
-		host-wakeup-gpios = <&gpf 6 GPIO_ACTIVE_HIGH>;
-		shutdown-gpios = <&gpf 4 GPIO_ACTIVE_LOW>;
+		vbat-supply = <&wlan0_power &bt_wake>;
+		vddio-supply = <&wlan0_power>;
+		max-speed = <115200>;	/* stay with default data rate */
+		brcm,bt-pcm-int-params = [01 02 00 01 01];
+		shutdown-gpios = <&gpf 4 GPIO_ACTIVE_HIGH>;
+		reset-gpios = <&gpf 8 GPIO_ACTIVE_LOW>;
+		interrupt-parent = <&gpf>;
+		interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
+		clocks = <&rtc_dev>;
+		clock-names = "clk32k";
 	};
 };
 
@@ -270,7 +323,7 @@ vcc_25: LDO_REG5 {
 				regulator-max-microvolt = <2500000>;
 				regulator-always-on;
 			};
-			wifi_io: LDO_REG6 {
+			wlan0_io: LDO_REG6 {
 				regulator-name = "LDO_REG6";
 				regulator-min-microvolt = <2500000>;
 				regulator-max-microvolt = <2500000>;
@@ -344,7 +397,7 @@ &i2c4 {
 
 	clock-frequency = <400000>;
 
-		rtc@51 {
+		ext_rtc: rtc@51 {
 			compatible = "nxp,pcf8563";
 			reg = <0x51>;
 
-- 
2.38.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ