linux-stable/sound
Cristian Ciocaltea c599ce16ab ASoC: es8316: Increment max value for ALC Capture Target Volume control
[ Upstream commit 6f07342903 ]

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: b8b88b7087 ("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>
2023-08-11 11:45:08 +02:00
..
ac97 ALSA: ac97: fix PM reference leak in ac97_bus_remove() 2021-07-20 16:16:08 +02:00
aoa ALSA: aoa: Fix I2S device accounting 2022-11-03 23:52:33 +09:00
arm
atmel
core treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
drivers ALSA: mts64: fix possible null-ptr-defer in snd_mts64_interrupt 2023-01-18 11:30:15 +01:00
firewire ALSA: fireworks: fix wrong return count shorter than expected by 4 bytes 2022-05-12 12:20:23 +02:00
hda ALSA: hda: fix potential memleak in 'add_widget_node' 2022-11-25 17:40:18 +01:00
i2c ALSA: i2c/cs8427: fix iec958 mixer control deactivation 2023-04-20 12:04:39 +02:00
isa treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
mips
oss
parisc
pci ALSA: hda/realtek - Fix inverted bass GPIO pin on Acer 8951G 2023-05-30 12:42:14 +01:00
pcmcia
ppc ALSA: ppc: fix error return code in snd_pmac_probe() 2021-07-20 16:16:09 +02:00
sh ALSA: sh: Fix compile warning wrt const 2020-02-24 08:34:45 +01:00
soc ASoC: es8316: Increment max value for ALC Capture Target Volume control 2023-08-11 11:45:08 +02:00
sparc
spi ALSA: spi: Add check for clk_enable() 2022-04-15 14:14:45 +02:00
synth ALSA: emux: Avoid potential array out-of-bound in snd_emux_xg_control() 2023-02-22 12:47:16 +01:00
usb treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
x86 ALSA: intel_hdmi: Fix reference to PCM buffer address 2022-03-08 19:04:07 +01:00
xen
ac97_bus.c
Kconfig
last.c
Makefile
sound_core.c sound: fix a memory leak bug 2019-08-16 10:12:39 +02:00