mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
ASoC: qcom: x1e80100: limit speaker volumes
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).
Based on commit c481016bb4 ("ASoC: qcom: sc8280xp: limit speaker
volumes") which addressed the same issue on the sc8280x SoC with some
minor changes as explained below.
The Digital Volume behaves almost identical to sc8280x since both use
the same lpass-wsa-macro, but x1e80100 has two sets of controls prefixed
with WSA and WSA2.
For PA x1e80100 machines use wsa884x amplifiers which expose a linear
scale from -9 dB to 9 dB with a 1.5 dB step size giving us
0 dB = -9 dB + 6 * 1.5 dB.
On x1e80100 there are two different speaker topologies we need to handle:
2-Speakers: SpkrLeft, Spkr Right
4-Speakers: WooferLeft, WooferRight, TweeterLeft, TweeterRight
Signed-off-by: Tobias Heider <tobias.heider@canonical.com>
Tested-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Link: https://patch.msgid.link/20260422-x1e80100-audio-limit-v2-1-333258b97697@canonical.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
cec9d64c09
commit
0a5ee0e520
|
|
@ -27,10 +27,29 @@ static int x1e80100_snd_init(struct snd_soc_pcm_runtime *rtd)
|
|||
{
|
||||
struct x1e80100_snd_data *data = snd_soc_card_get_drvdata(rtd->card);
|
||||
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
|
||||
struct snd_soc_card *card = rtd->card;
|
||||
struct snd_soc_jack *dp_jack = NULL;
|
||||
int dp_pcm_id = 0;
|
||||
|
||||
switch (cpu_dai->id) {
|
||||
case WSA_CODEC_DMA_RX_0:
|
||||
case WSA_CODEC_DMA_RX_1:
|
||||
/*
|
||||
* 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 WSA_RX0 Digital Volume", 81);
|
||||
snd_soc_limit_volume(card, "WSA WSA_RX1 Digital Volume", 81);
|
||||
snd_soc_limit_volume(card, "WSA2 WSA_RX0 Digital Volume", 81);
|
||||
snd_soc_limit_volume(card, "WSA2 WSA_RX1 Digital Volume", 81);
|
||||
snd_soc_limit_volume(card, "SpkrLeft PA Volume", 6);
|
||||
snd_soc_limit_volume(card, "SpkrRight PA Volume", 6);
|
||||
snd_soc_limit_volume(card, "WooferLeft PA Volume", 6);
|
||||
snd_soc_limit_volume(card, "TweeterLeft PA Volume", 6);
|
||||
snd_soc_limit_volume(card, "WooferRight PA Volume", 6);
|
||||
snd_soc_limit_volume(card, "TweeterRight PA Volume", 6);
|
||||
break;
|
||||
case DISPLAY_PORT_RX_0:
|
||||
dp_pcm_id = 0;
|
||||
dp_jack = &data->dp_jack[dp_pcm_id];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user