Hi Srini, On Thu, 20 Mar 2025 at 12:02, <srinivas.kandagatla@xxxxxxxxxx> wrote: > > From: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx> > > 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@xxxxxxxxxx> 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@xxxxxxxxxx> > --- > .../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 > >