From: Greg Kroah-Hartman Date: Sat, 3 Feb 2024 16:04:36 +0000 (-0800) Subject: 6.1-stable patches X-Git-Tag: v6.1.77~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c48f518eebeeee2115d0a08f79801d0f9d4eb10a;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch asoc-codecs-wsa883x-fix-pa-volume-control.patch --- diff --git a/queue-6.1/asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch b/queue-6.1/asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch new file mode 100644 index 00000000000..1a5121de58b --- /dev/null +++ b/queue-6.1/asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch @@ -0,0 +1,74 @@ +From 46188db080bd1df7d2d28031b89e56f2fdbabd67 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 19 Jan 2024 12:24:19 +0100 +Subject: ASoC: codecs: lpass-wsa-macro: fix compander volume hack + +From: Johan Hovold + +commit 46188db080bd1df7d2d28031b89e56f2fdbabd67 upstream. + +The LPASS WSA macro codec driver is updating the digital gain settings +behind the back of user space on DAPM events if companding has been +enabled. + +As compander control is exported to user space, this can result in the +digital gain setting being incremented (or decremented) every time the +sound server is started and the codec suspended depending on what the +UCM configuration looks like. + +Soon enough playback will become distorted (or too quiet). + +This is specifically a problem on the Lenovo ThinkPad X13s as this +bypasses the limit for the digital gain setting that has been set by the +machine driver. + +Fix this by simply dropping the compander gain offset hack. If someone +cares about modelling the impact of the compander setting this can +possibly be done by exporting it as a volume control later. + +Note that the volume registers still need to be written after enabling +clocks in order for any prior updates to take effect. + +Fixes: 2c4066e5d428 ("ASoC: codecs: lpass-wsa-macro: add dapm widgets and route") +Cc: stable@vger.kernel.org # 5.11 +Cc: Srinivas Kandagatla +Signed-off-by: Johan Hovold +Link: https://msgid.link/r/20240119112420.7446-4-johan+linaro@kernel.org +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/lpass-wsa-macro.c | 7 ------- + 1 file changed, 7 deletions(-) + +--- a/sound/soc/codecs/lpass-wsa-macro.c ++++ b/sound/soc/codecs/lpass-wsa-macro.c +@@ -1581,7 +1581,6 @@ static int wsa_macro_enable_interpolator + u16 gain_reg; + u16 reg; + int val; +- int offset_val = 0; + struct wsa_macro *wsa = snd_soc_component_get_drvdata(component); + + if (w->shift == WSA_MACRO_COMP1) { +@@ -1620,10 +1619,8 @@ static int wsa_macro_enable_interpolator + CDC_WSA_RX1_RX_PATH_MIX_SEC0, + CDC_WSA_RX_PGA_HALF_DB_MASK, + CDC_WSA_RX_PGA_HALF_DB_ENABLE); +- offset_val = -2; + } + val = snd_soc_component_read(component, gain_reg); +- val += offset_val; + snd_soc_component_write(component, gain_reg, val); + wsa_macro_config_ear_spkr_gain(component, wsa, + event, gain_reg); +@@ -1651,10 +1648,6 @@ static int wsa_macro_enable_interpolator + CDC_WSA_RX1_RX_PATH_MIX_SEC0, + CDC_WSA_RX_PGA_HALF_DB_MASK, + CDC_WSA_RX_PGA_HALF_DB_DISABLE); +- offset_val = 2; +- val = snd_soc_component_read(component, gain_reg); +- val += offset_val; +- snd_soc_component_write(component, gain_reg, val); + } + wsa_macro_config_ear_spkr_gain(component, wsa, + event, gain_reg); diff --git a/queue-6.1/asoc-codecs-wsa883x-fix-pa-volume-control.patch b/queue-6.1/asoc-codecs-wsa883x-fix-pa-volume-control.patch new file mode 100644 index 00000000000..7e59d20ee92 --- /dev/null +++ b/queue-6.1/asoc-codecs-wsa883x-fix-pa-volume-control.patch @@ -0,0 +1,48 @@ +From b53cc6144a3f6c8b56afcdec89d81195c9b0dc69 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 19 Jan 2024 12:24:17 +0100 +Subject: ASoC: codecs: wsa883x: fix PA volume control + +From: Johan Hovold + +commit b53cc6144a3f6c8b56afcdec89d81195c9b0dc69 upstream. + +The PA gain can be set in steps of 1.5 dB from -3 dB to 18 dB, that is, +in 15 levels. + +Fix the dB values for the PA volume control as experiments using wsa8835 +show that the first 16 levels all map to the same lowest gain while the +last three map to the highest gain. + +These values specifically need to be correct for the sound server to +provide proper volume control. + +Note that level 0 (-3 dB) does not mute the PA so the mute flag should +also not be set. + +Fixes: cdb09e623143 ("ASoC: codecs: wsa883x: add control, dapm widgets and map") +Cc: stable@vger.kernel.org # 6.0 +Cc: Srinivas Kandagatla +Signed-off-by: Johan Hovold +Link: https://msgid.link/r/20240119112420.7446-2-johan+linaro@kernel.org +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/wsa883x.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/sound/soc/codecs/wsa883x.c ++++ b/sound/soc/codecs/wsa883x.c +@@ -1102,7 +1102,11 @@ static int wsa_dev_mode_put(struct snd_k + return 1; + } + +-static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, -300); ++static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(pa_gain, ++ 0, 14, TLV_DB_SCALE_ITEM(-300, 0, 0), ++ 15, 29, TLV_DB_SCALE_ITEM(-300, 150, 0), ++ 30, 31, TLV_DB_SCALE_ITEM(1800, 0, 0), ++); + + static int wsa883x_get_swr_port(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) diff --git a/queue-6.1/series b/queue-6.1/series index ac1c86db549..cb16ce5e108 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -216,3 +216,5 @@ drm-msm-dsi-enable-runtime-pm.patch loongarch-smp-call-rcutree_report_cpu_starting-at-tlb_init.patch gve-fix-use-after-free-vulnerability.patch bonding-remove-print-in-bond_verify_device_path.patch +asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch +asoc-codecs-wsa883x-fix-pa-volume-control.patch