| From fccbe8e3a2d8d9351271ae6205222ad2cb191a86 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 30 May 2023 21:11:38 +0300 |
| Subject: ASoC: es8316: Increment max value for ALC Capture Target Volume |
| control |
| |
| From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> |
| |
| [ Upstream commit 6f073429037cd79d7311cd8236311c53f5ea8f01 ] |
| |
| The following error occurs when trying to restore a previously saved |
| ALSA mixer state (tested on a Rock 5B board): |
| |
| $ alsactl --no-ucm -f /tmp/asound.state store hw:Analog |
| $ alsactl --no-ucm -I -f /tmp/asound.state restore hw:Analog |
| alsactl: set_control:1475: Cannot write control '2:0:0:ALC Capture Target Volume:0' : Invalid argument |
| |
| According to ES8316 datasheet, the register at address 0x2B, which is |
| related to the above mixer control, contains by default the value 0xB0. |
| Considering the corresponding ALC target bits (ALCLVL) are 7:4, the |
| control is initialized with 11, which is one step above the maximum |
| value allowed by the driver: |
| |
| ALCLVL | dB gain |
| -------+-------- |
| 0000 | -16.5 |
| 0001 | -15.0 |
| 0010 | -13.5 |
| .... | ..... |
| 0111 | -6.0 |
| 1000 | -4.5 |
| 1001 | -3.0 |
| 1010 | -1.5 |
| .... | ..... |
| 1111 | -1.5 |
| |
| The tests performed using the VU meter feature (--vumeter=TYPE) of |
| arecord/aplay confirm the specs are correct and there is no measured |
| gain if the 1011-1111 range would have been mapped to 0 dB: |
| |
| dB gain | VU meter % |
| --------+----------- |
| -6.0 | 30-31 |
| -4.5 | 35-36 |
| -3.0 | 42-43 |
| -1.5 | 50-51 |
| 0.0 | 50-51 |
| |
| Increment the max value allowed for ALC Capture Target Volume control, |
| so that it matches the hardware default. Additionally, update the |
| related TLV to prevent an artificial extension of the dB gain range. |
| |
| Fixes: b8b88b70875a ("ASoC: add es8316 codec driver") |
| Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> |
| Link: https://lore.kernel.org/r/20230530181140.483936-2-cristian.ciocaltea@collabora.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/codecs/es8316.c | 9 +++++++-- |
| 1 file changed, 7 insertions(+), 2 deletions(-) |
| |
| diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c |
| index 0410f2e5183c3..fad918c44ec97 100644 |
| --- a/sound/soc/codecs/es8316.c |
| +++ b/sound/soc/codecs/es8316.c |
| @@ -45,7 +45,12 @@ static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(dac_vol_tlv, -9600, 50, 1); |
| static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(adc_vol_tlv, -9600, 50, 1); |
| static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_max_gain_tlv, -650, 150, 0); |
| static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_min_gain_tlv, -1200, 150, 0); |
| -static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(alc_target_tlv, -1650, 150, 0); |
| + |
| +static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(alc_target_tlv, |
| + 0, 10, TLV_DB_SCALE_ITEM(-1650, 150, 0), |
| + 11, 11, TLV_DB_SCALE_ITEM(-150, 0, 0), |
| +); |
| + |
| static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpmixer_gain_tlv, |
| 0, 4, TLV_DB_SCALE_ITEM(-1200, 150, 0), |
| 8, 11, TLV_DB_SCALE_ITEM(-450, 150, 0), |
| @@ -107,7 +112,7 @@ static const struct snd_kcontrol_new es8316_snd_controls[] = { |
| alc_max_gain_tlv), |
| SOC_SINGLE_TLV("ALC Capture Min Volume", ES8316_ADC_ALC2, 0, 28, 0, |
| alc_min_gain_tlv), |
| - SOC_SINGLE_TLV("ALC Capture Target Volume", ES8316_ADC_ALC3, 4, 10, 0, |
| + SOC_SINGLE_TLV("ALC Capture Target Volume", ES8316_ADC_ALC3, 4, 11, 0, |
| alc_target_tlv), |
| SOC_SINGLE("ALC Capture Hold Time", ES8316_ADC_ALC3, 0, 10, 0), |
| SOC_SINGLE("ALC Capture Decay Time", ES8316_ADC_ALC4, 4, 10, 0), |
| -- |
| 2.39.2 |
| |