The Lenovo Thinkpad X13s has a WCN6855 Bluetooth controller on uart2,
add this.
Signed-off-by: Steev Klimaszewski <steev@kali.org>
Link: https://lore.kernel.org/r/20230207052829.3996-5-steev@kali.org
---
Changes since v4:
* Address Konrad's review comments.
Changes since v3:
* Add vreg_s1c
* Add regulators and not dead code
* Fix commit message changelog
Changes since v2:
* Remove dead code and add TODO comment
* Make dtbs_check happy with the pin definitions
.../qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 76 +++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
index f936b020a71d..ad20cfb3a830 100644
--- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
+++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
@@ -24,6 +24,8 @@ / {
aliases {
i2c4 = &i2c4;
i2c21 = &i2c21;
+ serial0 = &uart17;
+ serial1 = &uart2;
};
wcd938x: audio-codec {
@@ -297,6 +299,15 @@ pmc8280c-rpmh-regulators {
qcom,pmic-id = "c";
vdd-bob-supply = <&vreg_vph_pwr>;
+ vreg_s1c: smps1 {
+ regulator-name = "vreg_s1c";
+ regulator-min-microvolt = <1880000>;
+ regulator-max-microvolt = <1900000>;
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_AUTO>,
+ <RPMH_REGULATOR_MODE_RET>;
+ regulator-allow-set-load;
+ };
+
vreg_l1c: ldo1 {
regulator-name = "vreg_l1c";
regulator-min-microvolt = <1800000>;
@@ -712,6 +723,32 @@ &qup0 {
status = "okay";
};
+&uart2 {
+ pinctrl-0 = <&uart2_state>;
+ pinctrl-names = "default";
+
+ status = "okay";
+
+ bluetooth {
+ compatible = "qcom,wcn6855-bt";
+
+ vddio-supply = <&vreg_s10b>;
+ vddbtcxmx-supply = <&vreg_s12b>;
+ vddrfacmn-supply = <&vreg_s12b>;
+ vddrfa0p8-supply = <&vreg_s12b>;
+ vddrfa1p2-supply = <&vreg_s11b>;
+ vddrfa1p7-supply = <&vreg_s1c>;
+
+ max-speed = <3200000>;
+
+ enable-gpios = <&tlmm 133 GPIO_ACTIVE_HIGH>;
+ swctrl-gpios = <&tlmm 132 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-0 = <&bt_en>;
+ pinctrl-names = "default";
+ };
+};
+
&qup1 {
status = "okay";
};
@@ -720,6 +757,11 @@ &qup2 {
status = "okay";
};
+&uart17 {
+ compatible = "qcom,geni-debug-uart";
+ status = "okay";
+};
+
&remoteproc_adsp {
firmware-name = "qcom/sc8280xp/LENOVO/21BX/qcadsp8280.mbn";
@@ -980,6 +1022,19 @@ hastings_reg_en: hastings-reg-en-state {
&tlmm {
gpio-reserved-ranges = <70 2>, <74 6>, <83 4>, <125 2>, <128 2>, <154 7>;
+ bt_en: bt-en-state {
+ hstp-sw-ctrl-pins {
+ pins = "gpio132";
+ function = "gpio";
+ };
+
+ hstp-bt-en-pins {
+ pins = "gpio133";
+ function = "gpio";
+ drive-strength = <16>;
+ };
+ };
+
edp_reg_en: edp-reg-en-state {
pins = "gpio25";
function = "gpio";
@@ -1001,6 +1056,27 @@ i2c4_default: i2c4-default-state {
bias-disable;
};
+ uart2_state: uart2-state {
+ cts-pins {
+ pins = "gpio122";
+ function = "qup2";
+ bias-disable;
+ };
+
+ rts-tx-pins {
+ pins = "gpio122", "gpio123";
+ function = "qup2";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ rx-pins {
+ pins = "gpio124";
+ function = "qup2";
+ bias-pull-up;
+ };
+ };
+
i2c21_default: i2c21-default-state {
pins = "gpio81", "gpio82";
function = "qup21";
--
2.39.1
On Wed, Feb 08, 2023 at 08:09:16PM -0600, Steev Klimaszewski wrote:
> The Lenovo Thinkpad X13s has a WCN6855 Bluetooth controller on uart2,
> add this.
>
> Signed-off-by: Steev Klimaszewski <steev@kali.org>
> Link: https://lore.kernel.org/r/20230207052829.3996-5-steev@kali.org
This link should not be needed.
Also, please update the patch Subject to use the following prefix:
arm64: dts: qcom: sc8280xp-x13s: ...
> ---
> Changes since v4:
> * Address Konrad's review comments.
>
> Changes since v3:
> * Add vreg_s1c
> * Add regulators and not dead code
> * Fix commit message changelog
>
> Changes since v2:
> * Remove dead code and add TODO comment
> * Make dtbs_check happy with the pin definitions
> .../qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 76 +++++++++++++++++++
> 1 file changed, 76 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
> index f936b020a71d..ad20cfb3a830 100644
> --- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
> +++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
> @@ -24,6 +24,8 @@ / {
> aliases {
> i2c4 = &i2c4;
> i2c21 = &i2c21;
> + serial0 = &uart17;
This is an unrelated change that does not belong in this patch.
> + serial1 = &uart2;
> };
>
> wcd938x: audio-codec {
> @@ -297,6 +299,15 @@ pmc8280c-rpmh-regulators {
> qcom,pmic-id = "c";
> vdd-bob-supply = <&vreg_vph_pwr>;
>
> + vreg_s1c: smps1 {
> + regulator-name = "vreg_s1c";
> + regulator-min-microvolt = <1880000>;
> + regulator-max-microvolt = <1900000>;
> + regulator-allowed-modes = <RPMH_REGULATOR_MODE_AUTO>,
> + <RPMH_REGULATOR_MODE_RET>;
> + regulator-allow-set-load;
Don't you need to specify initial-mode as well?
> + };
> +
> vreg_l1c: ldo1 {
> regulator-name = "vreg_l1c";
> regulator-min-microvolt = <1800000>;
> @@ -712,6 +723,32 @@ &qup0 {
> status = "okay";
> };
>
> +&uart2 {
> + pinctrl-0 = <&uart2_state>;
> + pinctrl-names = "default";
> +
> + status = "okay";
> +
> + bluetooth {
> + compatible = "qcom,wcn6855-bt";
> +
> + vddio-supply = <&vreg_s10b>;
> + vddbtcxmx-supply = <&vreg_s12b>;
> + vddrfacmn-supply = <&vreg_s12b>;
> + vddrfa0p8-supply = <&vreg_s12b>;
> + vddrfa1p2-supply = <&vreg_s11b>;
> + vddrfa1p7-supply = <&vreg_s1c>;
> +
> + max-speed = <3200000>;
> +
> + enable-gpios = <&tlmm 133 GPIO_ACTIVE_HIGH>;
> + swctrl-gpios = <&tlmm 132 GPIO_ACTIVE_HIGH>;
> +
> + pinctrl-0 = <&bt_en>;
> + pinctrl-names = "default";
> + };
> +};
> +
> &qup1 {
> status = "okay";
> };
> @@ -720,6 +757,11 @@ &qup2 {
> status = "okay";
> };
>
> +&uart17 {
> + compatible = "qcom,geni-debug-uart";
> + status = "okay";
> +};
This bit does not belong here either. We don't have any means of
accessing the debug uart on the X13s so we should probably just leave it
disabled.
> +
> &remoteproc_adsp {
> firmware-name = "qcom/sc8280xp/LENOVO/21BX/qcadsp8280.mbn";
>
> @@ -980,6 +1022,19 @@ hastings_reg_en: hastings-reg-en-state {
> &tlmm {
> gpio-reserved-ranges = <70 2>, <74 6>, <83 4>, <125 2>, <128 2>, <154 7>;
>
> + bt_en: bt-en-state {
As you are configuring more than one pin, please rename this as:
bt_default: bt-default-state
> + hstp-sw-ctrl-pins {
> + pins = "gpio132";
> + function = "gpio";
You should define the bias configuration as well. I guess we need to
keep the default pull-down enabled.
> + };
> +
> + hstp-bt-en-pins {
> + pins = "gpio133";
> + function = "gpio";
> + drive-strength = <16>;
bias-disable?
> + };
> + };
> +
> edp_reg_en: edp-reg-en-state {
> pins = "gpio25";
> function = "gpio";
> @@ -1001,6 +1056,27 @@ i2c4_default: i2c4-default-state {
> bias-disable;
> };
>
> + uart2_state: uart2-state {
Rename this one too:
uart2_default: uart2-default-state
> + cts-pins {
> + pins = "gpio122";
This should be gpio121 (gpio122 is rts).
> + function = "qup2";
> + bias-disable;
Don't we need a pull-down on this one to avoid a floating input when the
module is powered down?
> + };
> +
> + rts-tx-pins {
Please split this in two nodes.
> + pins = "gpio122", "gpio123";
> + function = "qup2";
> + drive-strength = <2>;
> + bias-disable;
> + };
> +
> + rx-pins {
> + pins = "gpio124";
> + function = "qup2";
> + bias-pull-up;
> + };
> + };
> +
> i2c21_default: i2c21-default-state {
> pins = "gpio81", "gpio82";
> function = "qup21";
Johan
On Thu, Mar 9, 2023 at 11:24 AM Johan Hovold <johan@kernel.org> wrote:
>
> On Wed, Feb 08, 2023 at 08:09:16PM -0600, Steev Klimaszewski wrote:
> > The Lenovo Thinkpad X13s has a WCN6855 Bluetooth controller on uart2,
> > add this.
> >
> > Signed-off-by: Steev Klimaszewski <steev@kali.org>
> > Link: https://lore.kernel.org/r/20230207052829.3996-5-steev@kali.org
>
> This link should not be needed.
>
> Also, please update the patch Subject to use the following prefix:
>
> arm64: dts: qcom: sc8280xp-x13s: ...
>
Yeah, that was me screwing up my patch, will make those changes for v6
> > ---
> > Changes since v4:
> > * Address Konrad's review comments.
> >
> > Changes since v3:
> > * Add vreg_s1c
> > * Add regulators and not dead code
> > * Fix commit message changelog
> >
> > Changes since v2:
> > * Remove dead code and add TODO comment
> > * Make dtbs_check happy with the pin definitions
> > .../qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 76 +++++++++++++++++++
> > 1 file changed, 76 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
> > index f936b020a71d..ad20cfb3a830 100644
> > --- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
> > +++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
> > @@ -24,6 +24,8 @@ / {
> > aliases {
> > i2c4 = &i2c4;
> > i2c21 = &i2c21;
> > + serial0 = &uart17;
>
> This is an unrelated change that does not belong in this patch.
>
> > + serial1 = &uart2;
> > };
> >
> > wcd938x: audio-codec {
> > @@ -297,6 +299,15 @@ pmc8280c-rpmh-regulators {
> > qcom,pmic-id = "c";
> > vdd-bob-supply = <&vreg_vph_pwr>;
> >
> > + vreg_s1c: smps1 {
> > + regulator-name = "vreg_s1c";
> > + regulator-min-microvolt = <1880000>;
> > + regulator-max-microvolt = <1900000>;
> > + regulator-allowed-modes = <RPMH_REGULATOR_MODE_AUTO>,
> > + <RPMH_REGULATOR_MODE_RET>;
> > + regulator-allow-set-load;
>
> Don't you need to specify initial-mode as well?
>
> > + };
> > +
> > vreg_l1c: ldo1 {
> > regulator-name = "vreg_l1c";
> > regulator-min-microvolt = <1800000>;
> > @@ -712,6 +723,32 @@ &qup0 {
> > status = "okay";
> > };
> >
> > +&uart2 {
> > + pinctrl-0 = <&uart2_state>;
> > + pinctrl-names = "default";
> > +
> > + status = "okay";
> > +
> > + bluetooth {
> > + compatible = "qcom,wcn6855-bt";
> > +
> > + vddio-supply = <&vreg_s10b>;
> > + vddbtcxmx-supply = <&vreg_s12b>;
> > + vddrfacmn-supply = <&vreg_s12b>;
> > + vddrfa0p8-supply = <&vreg_s12b>;
> > + vddrfa1p2-supply = <&vreg_s11b>;
> > + vddrfa1p7-supply = <&vreg_s1c>;
> > +
> > + max-speed = <3200000>;
> > +
> > + enable-gpios = <&tlmm 133 GPIO_ACTIVE_HIGH>;
> > + swctrl-gpios = <&tlmm 132 GPIO_ACTIVE_HIGH>;
> > +
> > + pinctrl-0 = <&bt_en>;
> > + pinctrl-names = "default";
> > + };
> > +};
> > +
> > &qup1 {
> > status = "okay";
> > };
> > @@ -720,6 +757,11 @@ &qup2 {
> > status = "okay";
> > };
> >
> > +&uart17 {
> > + compatible = "qcom,geni-debug-uart";
> > + status = "okay";
> > +};
>
> This bit does not belong here either. We don't have any means of
> accessing the debug uart on the X13s so we should probably just leave it
> disabled.
>
Will drop it (and the above one as well)
> > +
> > &remoteproc_adsp {
> > firmware-name = "qcom/sc8280xp/LENOVO/21BX/qcadsp8280.mbn";
> >
> > @@ -980,6 +1022,19 @@ hastings_reg_en: hastings-reg-en-state {
> > &tlmm {
> > gpio-reserved-ranges = <70 2>, <74 6>, <83 4>, <125 2>, <128 2>, <154 7>;
> >
> > + bt_en: bt-en-state {
>
> As you are configuring more than one pin, please rename this as:
>
> bt_default: bt-default-state
>
> > + hstp-sw-ctrl-pins {
> > + pins = "gpio132";
> > + function = "gpio";
>
> You should define the bias configuration as well. I guess we need to
> keep the default pull-down enabled.
>
> > + };
> > +
> > + hstp-bt-en-pins {
> > + pins = "gpio133";
> > + function = "gpio";
> > + drive-strength = <16>;
>
> bias-disable?
>
> > + };
> > + };
> > +
> > edp_reg_en: edp-reg-en-state {
> > pins = "gpio25";
> > function = "gpio";
> > @@ -1001,6 +1056,27 @@ i2c4_default: i2c4-default-state {
> > bias-disable;
> > };
> >
> > + uart2_state: uart2-state {
>
> Rename this one too:
>
> uart2_default: uart2-default-state
>
> > + cts-pins {
> > + pins = "gpio122";
>
> This should be gpio121 (gpio122 is rts).
>
You are right that it should be... however... if I actually set it to
be 121.... bluetooth doesn't actually come up/work?
> > + function = "qup2";
> > + bias-disable;
>
> Don't we need a pull-down on this one to avoid a floating input when the
> module is powered down?
>
Maybe? I don't have access to the schematics or anything so I was
going with the best guess based on what worked by poking and prodding.
Will try this.
> > + };
> > +
> > + rts-tx-pins {
>
> Please split this in two nodes.
>
> > + pins = "gpio122", "gpio123";
> > + function = "qup2";
> > + drive-strength = <2>;
> > + bias-disable;
> > + };
> > +
> > + rx-pins {
> > + pins = "gpio124";
> > + function = "qup2";
> > + bias-pull-up;
> > + };
> > + };
> > +
> > i2c21_default: i2c21-default-state {
> > pins = "gpio81", "gpio82";
> > function = "qup21";
>
> Johan
On Thu, Mar 09, 2023 at 02:07:58PM -0600, Steev Klimaszewski wrote:
> On Thu, Mar 9, 2023 at 11:24 AM Johan Hovold <johan@kernel.org> wrote:
> > On Wed, Feb 08, 2023 at 08:09:16PM -0600, Steev Klimaszewski wrote:
> > > + uart2_state: uart2-state {
> >
> > Rename this one too:
> >
> > uart2_default: uart2-default-state
> >
> > > + cts-pins {
> > > + pins = "gpio122";
> >
> > This should be gpio121 (gpio122 is rts).
> >
>
> You are right that it should be... however... if I actually set it to
> be 121.... bluetooth doesn't actually come up/work?
I'm running with this fixed locally and it's working here.
Not muxing the cts-pin should break flow control (e.g. the host will
send data regardless of if the device signals that it's ready to receive
it).
> > > + function = "qup2";
> > > + bias-disable;
> >
> > Don't we need a pull-down on this one to avoid a floating input when the
> > module is powered down?
>
> Maybe? I don't have access to the schematics or anything so I was
> going with the best guess based on what worked by poking and prodding.
> Will try this.
There are no external resistors and most of the Qualcomm boards with
these Bluetooth modules appear to enable the internal pull-down on cts.
But there are also two boards that recently switched to bias-bus-hold:
3d0e375bae55 ("arm64: dts: qcom: sc7280-qcard: Configure CTS pin to bias-bus-hold for bluetooth")
to avoid leakage. Perhaps that's what we want here too.
Johan
© 2016 - 2026 Red Hat, Inc.