Message ID | 20250320115633.4248-6-srinivas.kandagatla@linaro.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | ASoC: wcd938x: enable t14s audio headset | expand |
On Thu, Mar 20, 2025 at 11:56:33AM +0000, srinivas.kandagatla@linaro.org wrote: > From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > > On Lenovo ThinkPad T14s, the headset is connected via a HiFi mux to > support CTIA and OMTP headsets. This switch is used to minimise pop and > click during headset type switching. > > Enable the mux controls required to power this switch along with wiring up > gpio that control the headset switching. > > Without this, headset audio will be very noisy and might see headset > detection errors. > > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > --- > .../qcom/x1e78100-lenovo-thinkpad-t14s.dts | 25 +++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > index b2c2347f54fa..b40775c20493 100644 > --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > @@ -19,6 +19,16 @@ / { > compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100"; > chassis-type = "laptop"; > > + /* two muxes together support CTIA and OMTP switching */ > + us_euro_mux_ctrl: mux-controller { This node should find its place so that the nodes are sorted alphabetically. > + compatible = "gpio-mux"; > + pinctrl-0 = <&us_euro_hs_sel>; > + pinctrl-names = "default"; > + mux-supply = <&vreg_l16b_2p5>; > + #mux-control-cells = <0>; > + mux-gpios = <&tlmm 68 GPIO_ACTIVE_HIGH>; > + }; > + > wcd938x: audio-codec { > compatible = "qcom,wcd9385-codec"; > [...] > @@ -942,6 +960,13 @@ int-n-pins { > }; > }; > > + us_euro_hs_sel: us-euro-hs-sel-state { This one also should be moved to keep them sorted. LGTM otherwise. > + pins = "gpio68"; > + function = "gpio"; > + bias-pull-down; > + drive-strength = <2>; > + }; > + > kybd_default: kybd-default-state { > pins = "gpio67"; > function = "gpio"; > -- > 2.39.5 >
Hi Srini, On Thu, 20 Mar 2025 at 12:02, <srinivas.kandagatla@linaro.org> wrote: > > From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > > On Lenovo ThinkPad T14s, the headset is connected via a HiFi mux to > support CTIA and OMTP headsets. This switch is used to minimise pop and > click during headset type switching. > > Enable the mux controls required to power this switch along with wiring up > gpio that control the headset switching. > > Without this, headset audio will be very noisy and might see headset > detection errors. > > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> I tested this series (with https://github.com/alsa-project/alsa-ucm-conf/pull/522 and latest audioreach firmware X1E80100-LENOVO-Thinkpad-T14s-tplg.bin) on top of Johan's kernel (https://github.com/jhovold/linux/tree/wip/x1e80100-6.14-rc7/) on OLED T14s with Gnome and PipeWire/WirePlumber from Debian unstable and everything appears to work OK. The following works: - internal speakers (no regression) - internal mic (no regression) - 3-pin headset, the default output auto-switches when plugged/unplugged - 4-pin headset with mic, the default output/input auto-switches when plugged/unplugged Please let me know if I can test anything else. Tested-by: Christopher Obbard <christopher.obbard@linaro.org> > --- > .../qcom/x1e78100-lenovo-thinkpad-t14s.dts | 25 +++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > index b2c2347f54fa..b40775c20493 100644 > --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > @@ -19,6 +19,16 @@ / { > compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100"; > chassis-type = "laptop"; > > + /* two muxes together support CTIA and OMTP switching */ > + us_euro_mux_ctrl: mux-controller { > + compatible = "gpio-mux"; > + pinctrl-0 = <&us_euro_hs_sel>; > + pinctrl-names = "default"; > + mux-supply = <&vreg_l16b_2p5>; > + #mux-control-cells = <0>; > + mux-gpios = <&tlmm 68 GPIO_ACTIVE_HIGH>; > + }; > + > wcd938x: audio-codec { > compatible = "qcom,wcd9385-codec"; > > @@ -36,6 +46,7 @@ wcd938x: audio-codec { > qcom,tx-device = <&wcd_tx>; > > reset-gpios = <&tlmm 191 GPIO_ACTIVE_LOW>; > + mux-controls = <&us_euro_mux_ctrl>; > > vdd-buck-supply = <&vreg_l15b_1p8>; > vdd-rxtx-supply = <&vreg_l15b_1p8>; > @@ -367,6 +378,13 @@ vreg_l15b_1p8: ldo15 { > regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > }; > > + vreg_l16b_2p5: ldo16 { > + regulator-name = "vreg_l16b_2p5"; > + regulator-min-microvolt = <2504000>; > + regulator-max-microvolt = <2504000>; > + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; > + }; > + > vreg_l17b_2p5: ldo17 { > regulator-name = "vreg_l17b_2p5"; > regulator-min-microvolt = <2504000>; > @@ -942,6 +960,13 @@ int-n-pins { > }; > }; > > + us_euro_hs_sel: us-euro-hs-sel-state { > + pins = "gpio68"; > + function = "gpio"; > + bias-pull-down; > + drive-strength = <2>; > + }; > + > kybd_default: kybd-default-state { > pins = "gpio67"; > function = "gpio"; > -- > 2.39.5 > >
On 20/03/2025 12:56, srinivas.kandagatla@linaro.org wrote: > 1 file changed, 25 insertions(+) > > diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > index b2c2347f54fa..b40775c20493 100644 > --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts > @@ -19,6 +19,16 @@ / { > compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100"; > chassis-type = "laptop"; > > + /* two muxes together support CTIA and OMTP switching */ > + us_euro_mux_ctrl: mux-controller { This goes somewhere after audio-codec, because nodes are ordered by node name. > + compatible = "gpio-mux"; > + pinctrl-0 = <&us_euro_hs_sel>; > + pinctrl-names = "default"; > + mux-supply = <&vreg_l16b_2p5>; > + #mux-control-cells = <0>; > + mux-gpios = <&tlmm 68 GPIO_ACTIVE_HIGH>; > + }; > + With placement fixed: Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Best regards, Krzysztof
diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts index b2c2347f54fa..b40775c20493 100644 --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts @@ -19,6 +19,16 @@ / { compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100"; chassis-type = "laptop"; + /* two muxes together support CTIA and OMTP switching */ + us_euro_mux_ctrl: mux-controller { + compatible = "gpio-mux"; + pinctrl-0 = <&us_euro_hs_sel>; + pinctrl-names = "default"; + mux-supply = <&vreg_l16b_2p5>; + #mux-control-cells = <0>; + mux-gpios = <&tlmm 68 GPIO_ACTIVE_HIGH>; + }; + wcd938x: audio-codec { compatible = "qcom,wcd9385-codec"; @@ -36,6 +46,7 @@ wcd938x: audio-codec { qcom,tx-device = <&wcd_tx>; reset-gpios = <&tlmm 191 GPIO_ACTIVE_LOW>; + mux-controls = <&us_euro_mux_ctrl>; vdd-buck-supply = <&vreg_l15b_1p8>; vdd-rxtx-supply = <&vreg_l15b_1p8>; @@ -367,6 +378,13 @@ vreg_l15b_1p8: ldo15 { regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; }; + vreg_l16b_2p5: ldo16 { + regulator-name = "vreg_l16b_2p5"; + regulator-min-microvolt = <2504000>; + regulator-max-microvolt = <2504000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + vreg_l17b_2p5: ldo17 { regulator-name = "vreg_l17b_2p5"; regulator-min-microvolt = <2504000>; @@ -942,6 +960,13 @@ int-n-pins { }; }; + us_euro_hs_sel: us-euro-hs-sel-state { + pins = "gpio68"; + function = "gpio"; + bias-pull-down; + drive-strength = <2>; + }; + kybd_default: kybd-default-state { pins = "gpio67"; function = "gpio";