Skip to content

Commit 46188db

Browse files
jhovoldbroonie
authored andcommitted
ASoC: codecs: lpass-wsa-macro: fix compander volume hack
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: 2c4066e ("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>
1 parent b53cc61 commit 46188db

File tree

1 file changed

+0
-7
lines changed

1 file changed

+0
-7
lines changed

sound/soc/codecs/lpass-wsa-macro.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,7 +1584,6 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
15841584
u16 gain_reg;
15851585
u16 reg;
15861586
int val;
1587-
int offset_val = 0;
15881587
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
15891588

15901589
if (w->shift == WSA_MACRO_COMP1) {
@@ -1623,10 +1622,8 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
16231622
CDC_WSA_RX1_RX_PATH_MIX_SEC0,
16241623
CDC_WSA_RX_PGA_HALF_DB_MASK,
16251624
CDC_WSA_RX_PGA_HALF_DB_ENABLE);
1626-
offset_val = -2;
16271625
}
16281626
val = snd_soc_component_read(component, gain_reg);
1629-
val += offset_val;
16301627
snd_soc_component_write(component, gain_reg, val);
16311628
wsa_macro_config_ear_spkr_gain(component, wsa,
16321629
event, gain_reg);
@@ -1654,10 +1651,6 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
16541651
CDC_WSA_RX1_RX_PATH_MIX_SEC0,
16551652
CDC_WSA_RX_PGA_HALF_DB_MASK,
16561653
CDC_WSA_RX_PGA_HALF_DB_DISABLE);
1657-
offset_val = 2;
1658-
val = snd_soc_component_read(component, gain_reg);
1659-
val += offset_val;
1660-
snd_soc_component_write(component, gain_reg, val);
16611654
}
16621655
wsa_macro_config_ear_spkr_gain(component, wsa,
16631656
event, gain_reg);

0 commit comments

Comments
 (0)