ASoC: intel/sdw_utils: Add volume limit to cs42l43 speakers
[ Upstream commit 02b44a2b2bdcee03cbb92484d31e9ca1b91b2a38 ] The volume control for cs42l43 speakers has a maximum gain of +31.5 dB. However, for many use cases, this can cause distorted audio, depending various factors, such as other signal-processing elements in the chain, for example if the audio passes through a gain control before reaching the codec or the signal path has been tuned for a particular maximum gain in the codec. In the case of systems which use the soc_sdw_cs42l43 driver, audio will likely be distorted in all cases above 0 dB, therefore add a volume limit of 128, which is 0 dB maximum volume inside this driver. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20250430103134.24579-2-sbinding@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6b1a9a7647
commit
5926bc887d
@@ -20,6 +20,8 @@
|
||||
#include <sound/soc-dapm.h>
|
||||
#include <sound/soc_sdw_utils.h>
|
||||
|
||||
#define CS42L43_SPK_VOLUME_0DB 128 /* 0dB Max */
|
||||
|
||||
static const struct snd_soc_dapm_route cs42l43_hs_map[] = {
|
||||
{ "Headphone", NULL, "cs42l43 AMP3_OUT" },
|
||||
{ "Headphone", NULL, "cs42l43 AMP4_OUT" },
|
||||
@@ -117,6 +119,14 @@ int asoc_sdw_cs42l43_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_so
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ret = snd_soc_limit_volume(card, "cs42l43 Speaker Digital Volume",
|
||||
CS42L43_SPK_VOLUME_0DB);
|
||||
if (ret)
|
||||
dev_err(card->dev, "cs42l43 speaker volume limit failed: %d\n", ret);
|
||||
else
|
||||
dev_info(card->dev, "Setting CS42L43 Speaker volume limit to %d\n",
|
||||
CS42L43_SPK_VOLUME_0DB);
|
||||
|
||||
ret = snd_soc_dapm_add_routes(&card->dapm, cs42l43_spk_map,
|
||||
ARRAY_SIZE(cs42l43_spk_map));
|
||||
if (ret)
|
||||
|
||||
Reference in New Issue
Block a user