]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.7-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Feb 2024 16:05:29 +0000 (08:05 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Feb 2024 16:05:29 +0000 (08:05 -0800)
added patches:
asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch
asoc-codecs-wcd938x-fix-headphones-volume-controls.patch
asoc-codecs-wsa883x-fix-pa-volume-control.patch
asoc-qcom-sc8280xp-limit-speaker-volumes.patch

queue-6.7/asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch [new file with mode: 0644]
queue-6.7/asoc-codecs-wcd938x-fix-headphones-volume-controls.patch [new file with mode: 0644]
queue-6.7/asoc-codecs-wsa883x-fix-pa-volume-control.patch [new file with mode: 0644]
queue-6.7/asoc-qcom-sc8280xp-limit-speaker-volumes.patch [new file with mode: 0644]
queue-6.7/series

diff --git a/queue-6.7/asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch b/queue-6.7/asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch
new file mode 100644 (file)
index 0000000..a8dba19
--- /dev/null
@@ -0,0 +1,74 @@
+From 46188db080bd1df7d2d28031b89e56f2fdbabd67 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Fri, 19 Jan 2024 12:24:19 +0100
+Subject: ASoC: codecs: lpass-wsa-macro: fix compander volume hack
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+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 <srinivas.kandagatla@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://msgid.link/r/20240119112420.7446-4-johan+linaro@kernel.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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
+@@ -1584,7 +1584,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) {
+@@ -1623,10 +1622,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);
+@@ -1654,10 +1651,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.7/asoc-codecs-wcd938x-fix-headphones-volume-controls.patch b/queue-6.7/asoc-codecs-wcd938x-fix-headphones-volume-controls.patch
new file mode 100644 (file)
index 0000000..7241989
--- /dev/null
@@ -0,0 +1,37 @@
+From 4d0e8bdfa4a57099dc7230952a460903f2e2f8de Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 22 Jan 2024 10:11:30 +0100
+Subject: ASoC: codecs: wcd938x: fix headphones volume controls
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit 4d0e8bdfa4a57099dc7230952a460903f2e2f8de upstream.
+
+The lowest headphones volume setting does not mute so the leave the TLV
+mute flag unset.
+
+This is specifically needed to let the sound server use the lowest gain
+setting.
+
+Fixes: c03226ba15fe ("ASoC: codecs: wcd938x: fix dB range for HPHL and HPHR")
+Cc:  <stable@vger.kernel.org>      # 6.5
+Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://msgid.link/r/20240122091130.27463-1-johan+linaro@kernel.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/codecs/wcd938x.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/soc/codecs/wcd938x.c
++++ b/sound/soc/codecs/wcd938x.c
+@@ -210,7 +210,7 @@ struct wcd938x_priv {
+ };
+ static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(ear_pa_gain, 600, -1800);
+-static const DECLARE_TLV_DB_SCALE(line_gain, -3000, 150, -3000);
++static const DECLARE_TLV_DB_SCALE(line_gain, -3000, 150, 0);
+ static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(analog_gain, 0, 3000);
+ struct wcd938x_mbhc_zdet_param {
diff --git a/queue-6.7/asoc-codecs-wsa883x-fix-pa-volume-control.patch b/queue-6.7/asoc-codecs-wsa883x-fix-pa-volume-control.patch
new file mode 100644 (file)
index 0000000..6f598c9
--- /dev/null
@@ -0,0 +1,48 @@
+From b53cc6144a3f6c8b56afcdec89d81195c9b0dc69 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Fri, 19 Jan 2024 12:24:17 +0100
+Subject: ASoC: codecs: wsa883x: fix PA volume control
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+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 <srinivas.kandagatla@linaro.org>
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://msgid.link/r/20240119112420.7446-2-johan+linaro@kernel.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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
+@@ -1098,7 +1098,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.7/asoc-qcom-sc8280xp-limit-speaker-volumes.patch b/queue-6.7/asoc-qcom-sc8280xp-limit-speaker-volumes.patch
new file mode 100644 (file)
index 0000000..e15ef9b
--- /dev/null
@@ -0,0 +1,55 @@
+From c481016bb4f8a9c059c39ac06e7b65e233a61f6a Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan+linaro@kernel.org>
+Date: Mon, 22 Jan 2024 19:18:17 +0100
+Subject: ASoC: qcom: sc8280xp: limit speaker volumes
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+commit c481016bb4f8a9c059c39ac06e7b65e233a61f6a upstream.
+
+The UCM configuration for the Lenovo ThinkPad X13s has up until now
+been setting the speaker PA volume to the minimum -3 dB when enabling
+the speakers, but this does not prevent the user from increasing the
+volume further.
+
+Limit the digital gain and PA volumes to a combined -3 dB in the machine
+driver to reduce the risk of speaker damage until we have active speaker
+protection in place (or higher safe levels have been established).
+
+Note that the PA volume limit cannot be set lower than 0 dB or
+PulseAudio gets confused when the first 16 levels all map to -3 dB.
+
+Also note that this will probably need to be generalised using
+machine-specific limits, but a common limit should do for now.
+
+Cc:  <stable@vger.kernel.org>  # 6.5
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Link: https://msgid.link/r/20240122181819.4038-3-johan+linaro@kernel.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/qcom/sc8280xp.c |   12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/sound/soc/qcom/sc8280xp.c
++++ b/sound/soc/qcom/sc8280xp.c
+@@ -34,12 +34,14 @@ static int sc8280xp_snd_init(struct snd_
+       case WSA_CODEC_DMA_RX_0:
+       case WSA_CODEC_DMA_RX_1:
+               /*
+-               * set limit of 0dB on Digital Volume for Speakers,
+-               * this can prevent damage of speakers to some extent without
+-               * active speaker protection
++               * Set limit of -3 dB on Digital Volume and 0 dB on PA Volume
++               * to reduce the risk of speaker damage until we have active
++               * speaker protection in place.
+                */
+-              snd_soc_limit_volume(card, "WSA_RX0 Digital Volume", 84);
+-              snd_soc_limit_volume(card, "WSA_RX1 Digital Volume", 84);
++              snd_soc_limit_volume(card, "WSA_RX0 Digital Volume", 81);
++              snd_soc_limit_volume(card, "WSA_RX1 Digital Volume", 81);
++              snd_soc_limit_volume(card, "SpkrLeft PA Volume", 17);
++              snd_soc_limit_volume(card, "SpkrRight PA Volume", 17);
+               break;
+       default:
+               break;
index 488e172c2c8c7192d1427abd5dcd80565a30926e..6efb3088676f48b3d65814273e89fd769dcf5d08 100644 (file)
@@ -349,3 +349,7 @@ revert-drm-amd-display-disable-psr-su-on-parade-0803-tcon-again.patch
 drm-msm-dsi-enable-runtime-pm.patch
 selftests-bpf-remove-flaky-test_btf_id-test.patch
 bonding-remove-print-in-bond_verify_device_path.patch
+asoc-qcom-sc8280xp-limit-speaker-volumes.patch
+asoc-codecs-wcd938x-fix-headphones-volume-controls.patch
+asoc-codecs-lpass-wsa-macro-fix-compander-volume-hack.patch
+asoc-codecs-wsa883x-fix-pa-volume-control.patch