diff mbox series

arm64: dts: qcom: sdm845-mtp: Add WCN3990 BT node

Message ID 20190117044006.12463-1-bjorn.andersson@linaro.org (mailing list archive)
State New, archived
Headers show
Series arm64: dts: qcom: sdm845-mtp: Add WCN3990 BT node | expand

Commit Message

Bjorn Andersson Jan. 17, 2019, 4:40 a.m. UTC
The SDM845 MTP has a WCN3990 Bluetooth chip on UART6, enable this.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
 arch/arm64/boot/dts/qcom/sdm845-mtp.dts | 44 +++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

Comments

Balakrishna Godavarthi Jan. 17, 2019, 6:10 a.m. UTC | #1
Hi Anderson,

On 2019-01-17 10:10, Bjorn Andersson wrote:
> The SDM845 MTP has a WCN3990 Bluetooth chip on UART6, enable this.
> 
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
>  arch/arm64/boot/dts/qcom/sdm845-mtp.dts | 44 +++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> index af8c6a2445a2..f65d5a674103 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> @@ -17,6 +17,7 @@
> 
>  	aliases {
>  		serial0 = &uart9;
> +		hsuart0 = &uart6;
>  	};
> 
>  	chosen {
> @@ -357,6 +358,10 @@
>  	clock-frequency = <400000>;
>  };
> 
> +&qupv3_id_0 {
> +	status = "okay";
> +};
> +
>  &qupv3_id_1 {
>  	status = "okay";
>  };
> @@ -373,6 +378,20 @@
>  	cd-gpios = <&tlmm 126 GPIO_ACTIVE_LOW>;
>  };
> 
> +&uart6 {
> +	status = "okay";
> +
> +	bluetooth {
> +		compatible = "qcom,wcn3990-bt";
> +
> +		vddio-supply = <&vreg_s4a_1p8>;
> +		vddxo-supply = <&vreg_l7a_1p8>;
> +		vddrf-supply = <&vreg_l17a_1p3>;
> +		vddch0-supply = <&vreg_l25a_3p3>;
> +		max-speed = <3200000>;
> +	};
> +};
> +
>  &uart9 {
>  	status = "okay";
>  };
> @@ -470,6 +489,31 @@
>  	};
>  };
> 
> +&qup_uart6_default {
> +	pinmux {
> +		pins = "gpio45", "gpio46", "gpio47", "gpio48";
> +		function = "qup6";
> +	};
> +
> +	ctsrx {
> +		pins = "gpio45", "gpio48";
> +		drive-strength = <2>;
> +		bias-no-pull;
> +	};
> +
> +	rts {
> +		pins = "gpio46";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};
> +
> +	tx {
> +		pins = "gpio47";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +};
> +
>  &qup_uart9_default {
>  	pinconf-tx {
>  		pins = "gpio4";


[Bala]:
        GPIO 45 is CTS
        GPIO 46 is RTS
        GPIO 47 is Tx
        GPIO 48 is Rx.

        Tx & RTS are inputs to APPS processor, bias should be disable as 
the source i.e. BT chip will pull them up.
        CTS & RX are outputs from APPS processor, where as CTS is GPIO 
which need to toggled, so the default state should be pull down.
              RX is should be pulled up.
        when TX & RX are pulled high it indicates that the lines are 
ideal i.e. no data.

Above is just my assumption, not sure whether they work on MTP.
Matthias Kaehlcke Jan. 17, 2019, 7:28 p.m. UTC | #2
On Wed, Jan 16, 2019 at 08:40:06PM -0800, Bjorn Andersson wrote:
> The SDM845 MTP has a WCN3990 Bluetooth chip on UART6, enable this.
> 
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
>  arch/arm64/boot/dts/qcom/sdm845-mtp.dts | 44 +++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> index af8c6a2445a2..f65d5a674103 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> @@ -17,6 +17,7 @@
>  
>  	aliases {
>  		serial0 = &uart9;
> +		hsuart0 = &uart6;
>  	};
>  
>  	chosen {
> @@ -357,6 +358,10 @@
>  	clock-frequency = <400000>;
>  };
>  
> +&qupv3_id_0 {
> +	status = "okay";
> +};
> +
>  &qupv3_id_1 {
>  	status = "okay";
>  };
> @@ -373,6 +378,20 @@
>  	cd-gpios = <&tlmm 126 GPIO_ACTIVE_LOW>;
>  };
>  
> +&uart6 {
> +	status = "okay";
> +
> +	bluetooth {
> +		compatible = "qcom,wcn3990-bt";
> +
> +		vddio-supply = <&vreg_s4a_1p8>;
> +		vddxo-supply = <&vreg_l7a_1p8>;
> +		vddrf-supply = <&vreg_l17a_1p3>;
> +		vddch0-supply = <&vreg_l25a_3p3>;
> +		max-speed = <3200000>;
> +	};
> +};
> +
>  &uart9 {
>  	status = "okay";
>  };
> @@ -470,6 +489,31 @@
>  	};
>  };
>  
> +&qup_uart6_default {
> +	pinmux {
> +		pins = "gpio45", "gpio46", "gpio47", "gpio48";
> +		function = "qup6";
> +	};
> +
> +	ctsrx {
> +		pins = "gpio45", "gpio48";
> +		drive-strength = <2>;

CTS and RX are input signals, no need to configure drive strength in
this case IIUC.

> +		bias-no-pull;

On another SDM845 based device we observe garbage on RX at
initialization time, unless we enable a pull-up.

> +	};
> +
> +	rts {
> +		pins = "gpio46";
> +		drive-strength = <2>;
> +		bias-pull-down;
> +	};

On our device we don't configure a pull on the lines driven by the
AP. I think a pull-down on RTS should be fine though since it matches
the pull (during reset) on CTS of the BT module.

> +	tx {
> +		pins = "gpio47";
> +		drive-strength = <2>;
> +		bias-pull-up;
> +	};
> +};

Similar to RTS, the pull matches the one on RXD of the BT module.

For reference, this is what we currently use on our device:

https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/1391888/3/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi

Cheers

Matthias
Bjorn Andersson Jan. 17, 2019, 9:53 p.m. UTC | #3
On Wed 16 Jan 22:10 PST 2019, Balakrishna Godavarthi wrote:

> Hi Anderson,
> 
> On 2019-01-17 10:10, Bjorn Andersson wrote:
[..]
> > +&qup_uart6_default {
> > +	pinmux {
> > +		pins = "gpio45", "gpio46", "gpio47", "gpio48";
> > +		function = "qup6";
> > +	};
> > +
> > +	ctsrx {
> > +		pins = "gpio45", "gpio48";
> > +		drive-strength = <2>;
> > +		bias-no-pull;
> > +	};
> > +
> > +	rts {
> > +		pins = "gpio46";
> > +		drive-strength = <2>;
> > +		bias-pull-down;
> > +	};
> > +
> > +	tx {
> > +		pins = "gpio47";
> > +		drive-strength = <2>;
> > +		bias-pull-up;
> > +	};
> > +};
> > +
> >  &qup_uart9_default {
> >  	pinconf-tx {
> >  		pins = "gpio4";
> 
> 
> [Bala]:
>        GPIO 45 is CTS
>        GPIO 46 is RTS
>        GPIO 47 is Tx
>        GPIO 48 is Rx.
> 
>        Tx & RTS are inputs to APPS processor, bias should be disable as the
> source i.e. BT chip will pull them up.
>        CTS & RX are outputs from APPS processor, where as CTS is GPIO which
> need to toggled, so the default state should be pull down.
>              RX is should be pulled up.
>        when TX & RX are pulled high it indicates that the lines are ideal
> i.e. no data.
> 
> Above is just my assumption, not sure whether they work on MTP.
> 

I will update and verify.

Thanks,
Bjorn
Bjorn Andersson Jan. 17, 2019, 9:55 p.m. UTC | #4
On Thu 17 Jan 11:28 PST 2019, Matthias Kaehlcke wrote:

> On Wed, Jan 16, 2019 at 08:40:06PM -0800, Bjorn Andersson wrote:
[..]
> > +&qup_uart6_default {
> > +	pinmux {
> > +		pins = "gpio45", "gpio46", "gpio47", "gpio48";
> > +		function = "qup6";
> > +	};
> > +
> > +	ctsrx {
> > +		pins = "gpio45", "gpio48";
> > +		drive-strength = <2>;
> 
> CTS and RX are input signals, no need to configure drive strength in
> this case IIUC.
> 

Right, didn't think that far when I hacked this up.

> > +		bias-no-pull;
> 
> On another SDM845 based device we observe garbage on RX at
> initialization time, unless we enable a pull-up.
> 
> > +	};
> > +
> > +	rts {
> > +		pins = "gpio46";
> > +		drive-strength = <2>;
> > +		bias-pull-down;
> > +	};
> 
> On our device we don't configure a pull on the lines driven by the
> AP. I think a pull-down on RTS should be fine though since it matches
> the pull (during reset) on CTS of the BT module.
> 
> > +	tx {
> > +		pins = "gpio47";
> > +		drive-strength = <2>;
> > +		bias-pull-up;
> > +	};
> > +};
> 
> Similar to RTS, the pull matches the one on RXD of the BT module.
> 
> For reference, this is what we currently use on our device:
> 
> https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/1391888/3/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
> 

Thanks, I will update the patch.

Regards,
Bjorn
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
index af8c6a2445a2..f65d5a674103 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
+++ b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
@@ -17,6 +17,7 @@ 
 
 	aliases {
 		serial0 = &uart9;
+		hsuart0 = &uart6;
 	};
 
 	chosen {
@@ -357,6 +358,10 @@ 
 	clock-frequency = <400000>;
 };
 
+&qupv3_id_0 {
+	status = "okay";
+};
+
 &qupv3_id_1 {
 	status = "okay";
 };
@@ -373,6 +378,20 @@ 
 	cd-gpios = <&tlmm 126 GPIO_ACTIVE_LOW>;
 };
 
+&uart6 {
+	status = "okay";
+
+	bluetooth {
+		compatible = "qcom,wcn3990-bt";
+
+		vddio-supply = <&vreg_s4a_1p8>;
+		vddxo-supply = <&vreg_l7a_1p8>;
+		vddrf-supply = <&vreg_l17a_1p3>;
+		vddch0-supply = <&vreg_l25a_3p3>;
+		max-speed = <3200000>;
+	};
+};
+
 &uart9 {
 	status = "okay";
 };
@@ -470,6 +489,31 @@ 
 	};
 };
 
+&qup_uart6_default {
+	pinmux {
+		pins = "gpio45", "gpio46", "gpio47", "gpio48";
+		function = "qup6";
+	};
+
+	ctsrx {
+		pins = "gpio45", "gpio48";
+		drive-strength = <2>;
+		bias-no-pull;
+	};
+
+	rts {
+		pins = "gpio46";
+		drive-strength = <2>;
+		bias-pull-down;
+	};
+
+	tx {
+		pins = "gpio47";
+		drive-strength = <2>;
+		bias-pull-up;
+	};
+};
+
 &qup_uart9_default {
 	pinconf-tx {
 		pins = "gpio4";