public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 1/4] ASoC: codecs: wsa883x: fix PA volume control
       [not found] <20240122181819.4038-1-johan+linaro@kernel.org>
@ 2024-01-22 18:18 ` Johan Hovold
  2024-01-22 18:18 ` [PATCH v5 2/4] ASoC: qcom: sc8280xp: limit speaker volumes Johan Hovold
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Johan Hovold @ 2024-01-22 18:18 UTC (permalink / raw)
  To: Mark Brown
  Cc: Srinivas Kandagatla, Banajit Goswami, Liam Girdwood,
	Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-sound,
	linux-kernel, Johan Hovold, stable

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>
---
 sound/soc/codecs/wsa883x.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c
index cb83c569e18d..a2e86ef7d18f 100644
--- a/sound/soc/codecs/wsa883x.c
+++ b/sound/soc/codecs/wsa883x.c
@@ -1098,7 +1098,11 @@ static int wsa_dev_mode_put(struct snd_kcontrol *kcontrol,
 	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)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5 2/4] ASoC: qcom: sc8280xp: limit speaker volumes
       [not found] <20240122181819.4038-1-johan+linaro@kernel.org>
  2024-01-22 18:18 ` [PATCH v5 1/4] ASoC: codecs: wsa883x: fix PA volume control Johan Hovold
@ 2024-01-22 18:18 ` Johan Hovold
  2024-01-22 18:18 ` [PATCH v5 3/4] ASoC: codecs: lpass-wsa-macro: fix compander volume hack Johan Hovold
       [not found] ` <170596045583.161959.6600754837297158632.b4-ty@kernel.org>
  3 siblings, 0 replies; 6+ messages in thread
From: Johan Hovold @ 2024-01-22 18:18 UTC (permalink / raw)
  To: Mark Brown
  Cc: Srinivas Kandagatla, Banajit Goswami, Liam Girdwood,
	Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-sound,
	linux-kernel, Johan Hovold, stable

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>
---
 sound/soc/qcom/sc8280xp.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c
index ed4bb551bfbb..b7fd503a1666 100644
--- a/sound/soc/qcom/sc8280xp.c
+++ b/sound/soc/qcom/sc8280xp.c
@@ -32,12 +32,14 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd)
 	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;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5 3/4] ASoC: codecs: lpass-wsa-macro: fix compander volume hack
       [not found] <20240122181819.4038-1-johan+linaro@kernel.org>
  2024-01-22 18:18 ` [PATCH v5 1/4] ASoC: codecs: wsa883x: fix PA volume control Johan Hovold
  2024-01-22 18:18 ` [PATCH v5 2/4] ASoC: qcom: sc8280xp: limit speaker volumes Johan Hovold
@ 2024-01-22 18:18 ` Johan Hovold
       [not found] ` <170596045583.161959.6600754837297158632.b4-ty@kernel.org>
  3 siblings, 0 replies; 6+ messages in thread
From: Johan Hovold @ 2024-01-22 18:18 UTC (permalink / raw)
  To: Mark Brown
  Cc: Srinivas Kandagatla, Banajit Goswami, Liam Girdwood,
	Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-sound,
	linux-kernel, Johan Hovold, stable

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>
---
 sound/soc/codecs/lpass-wsa-macro.c | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
index 7e21cec3c2fb..6ce309980cd1 100644
--- 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(struct snd_soc_dapm_widget *w,
 	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(struct snd_soc_dapm_widget *w,
 					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(struct snd_soc_dapm_widget *w,
 					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);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Stable backport request (was: [PATCH v5 0/4] ASoC: qcom: volume fixes and codec cleanups)
       [not found]   ` <ZbjxUF2IV3A5zNw5@hovoldconsulting.com>
@ 2024-02-03  8:36     ` Johan Hovold
  2024-02-03 16:04       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 6+ messages in thread
From: Johan Hovold @ 2024-02-03  8:36 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Sasha Levin
  Cc: Johan Hovold, Srinivas Kandagatla, Banajit Goswami, Liam Girdwood,
	Jaroslav Kysela, Mark Brown, Takashi Iwai, alsa-devel,
	linux-sound, linux-kernel, stable

Hi Greg and Sasha,

On Tue, Jan 30, 2024 at 01:53:37PM +0100, Johan Hovold wrote:
> On Mon, Jan 22, 2024 at 09:54:15PM +0000, Mark Brown wrote:
> > On Mon, 22 Jan 2024 19:18:15 +0100, Johan Hovold wrote:
> > > To reduce the risk of speaker damage the PA gain needs to be limited on
> > > machines like the Lenovo Thinkpad X13s until we have active speaker
> > > protection in place.
> > > 
> > > Limit the gain to the current default setting provided by the UCM
> > > configuration which most user have so far been using (due to a bug in
> > > the configuration files which prevented hardware volume control [1]).
> > > 
> > > [...]
> > 
> > Applied to
> > 
> >    https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
> 
> alsa-ucm-conf 1.2.11 was released yesterday, which means that it is now
> very urgent to get the speaker volume limitation backported to the
> stable trees.
> 
> Could you please try to make sure that these fixes get to Linus this
> week?

This series (and a related headphone codec fix) were merged into Linus's
tree yesterday.

I saw that the 6.7.4 stable patches were sent out for review over night,
but could it be possible to squeeze in also the following four fixes in
6.7.4 (and 6.6.16)?

	c481016bb4f8 ASoC: qcom: sc8280xp: limit speaker volumes
	4d0e8bdfa4a5 ASoC: codecs: wcd938x: fix headphones volume controls
	46188db080bd ASoC: codecs: lpass-wsa-macro: fix compander volume hack
	b53cc6144a3f ASoC: codecs: wsa883x: fix PA volume control

These are needed for proper volume control and, importantly, to prevent
users of the Lenovo ThinkPad X13s from potentially damaging their
speakers when the distros ship the latest UCM configuration files which
were released on Monday.

Johan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Stable backport request (was: [PATCH v5 0/4] ASoC: qcom: volume fixes and codec cleanups)
  2024-02-03  8:36     ` Stable backport request (was: [PATCH v5 0/4] ASoC: qcom: volume fixes and codec cleanups) Johan Hovold
@ 2024-02-03 16:04       ` Greg Kroah-Hartman
  2024-02-03 17:02         ` Johan Hovold
  0 siblings, 1 reply; 6+ messages in thread
From: Greg Kroah-Hartman @ 2024-02-03 16:04 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Sasha Levin, Johan Hovold, Srinivas Kandagatla, Banajit Goswami,
	Liam Girdwood, Jaroslav Kysela, Mark Brown, Takashi Iwai,
	alsa-devel, linux-sound, linux-kernel, stable

On Sat, Feb 03, 2024 at 09:36:14AM +0100, Johan Hovold wrote:
> Hi Greg and Sasha,
> 
> On Tue, Jan 30, 2024 at 01:53:37PM +0100, Johan Hovold wrote:
> > On Mon, Jan 22, 2024 at 09:54:15PM +0000, Mark Brown wrote:
> > > On Mon, 22 Jan 2024 19:18:15 +0100, Johan Hovold wrote:
> > > > To reduce the risk of speaker damage the PA gain needs to be limited on
> > > > machines like the Lenovo Thinkpad X13s until we have active speaker
> > > > protection in place.
> > > > 
> > > > Limit the gain to the current default setting provided by the UCM
> > > > configuration which most user have so far been using (due to a bug in
> > > > the configuration files which prevented hardware volume control [1]).
> > > > 
> > > > [...]
> > > 
> > > Applied to
> > > 
> > >    https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
> > 
> > alsa-ucm-conf 1.2.11 was released yesterday, which means that it is now
> > very urgent to get the speaker volume limitation backported to the
> > stable trees.
> > 
> > Could you please try to make sure that these fixes get to Linus this
> > week?
> 
> This series (and a related headphone codec fix) were merged into Linus's
> tree yesterday.
> 
> I saw that the 6.7.4 stable patches were sent out for review over night,
> but could it be possible to squeeze in also the following four fixes in
> 6.7.4 (and 6.6.16)?
> 
> 	c481016bb4f8 ASoC: qcom: sc8280xp: limit speaker volumes
> 	4d0e8bdfa4a5 ASoC: codecs: wcd938x: fix headphones volume controls
> 	46188db080bd ASoC: codecs: lpass-wsa-macro: fix compander volume hack
> 	b53cc6144a3f ASoC: codecs: wsa883x: fix PA volume control
> 
> These are needed for proper volume control and, importantly, to prevent
> users of the Lenovo ThinkPad X13s from potentially damaging their
> speakers when the distros ship the latest UCM configuration files which
> were released on Monday.

All now queued up for this round, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Stable backport request (was: [PATCH v5 0/4] ASoC: qcom: volume fixes and codec cleanups)
  2024-02-03 16:04       ` Greg Kroah-Hartman
@ 2024-02-03 17:02         ` Johan Hovold
  0 siblings, 0 replies; 6+ messages in thread
From: Johan Hovold @ 2024-02-03 17:02 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Sasha Levin, Johan Hovold, Srinivas Kandagatla, Banajit Goswami,
	Liam Girdwood, Jaroslav Kysela, Mark Brown, Takashi Iwai,
	alsa-devel, linux-sound, linux-kernel, stable

On Sat, Feb 03, 2024 at 08:04:01AM -0800, Greg Kroah-Hartman wrote:
> On Sat, Feb 03, 2024 at 09:36:14AM +0100, Johan Hovold wrote:

> > I saw that the 6.7.4 stable patches were sent out for review over night,
> > but could it be possible to squeeze in also the following four fixes in
> > 6.7.4 (and 6.6.16)?
> > 
> > 	c481016bb4f8 ASoC: qcom: sc8280xp: limit speaker volumes
> > 	4d0e8bdfa4a5 ASoC: codecs: wcd938x: fix headphones volume controls
> > 	46188db080bd ASoC: codecs: lpass-wsa-macro: fix compander volume hack
> > 	b53cc6144a3f ASoC: codecs: wsa883x: fix PA volume control

> All now queued up for this round, thanks.

Thanks, much appreciated!

Johan

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-02-03 17:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20240122181819.4038-1-johan+linaro@kernel.org>
2024-01-22 18:18 ` [PATCH v5 1/4] ASoC: codecs: wsa883x: fix PA volume control Johan Hovold
2024-01-22 18:18 ` [PATCH v5 2/4] ASoC: qcom: sc8280xp: limit speaker volumes Johan Hovold
2024-01-22 18:18 ` [PATCH v5 3/4] ASoC: codecs: lpass-wsa-macro: fix compander volume hack Johan Hovold
     [not found] ` <170596045583.161959.6600754837297158632.b4-ty@kernel.org>
     [not found]   ` <ZbjxUF2IV3A5zNw5@hovoldconsulting.com>
2024-02-03  8:36     ` Stable backport request (was: [PATCH v5 0/4] ASoC: qcom: volume fixes and codec cleanups) Johan Hovold
2024-02-03 16:04       ` Greg Kroah-Hartman
2024-02-03 17:02         ` Johan Hovold

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox