• Cristian Ciocaltea's avatar
    ASoC: es8316: Increment max value for ALC Capture Target Volume control · 6f073429
    Cristian Ciocaltea authored
    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: b8b88b70 ("ASoC: add es8316 codec driver")
    Signed-off-by: default avatarCristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Link: https://lore.kernel.org/r/20230530181140.483936-2-cristian.ciocaltea@collabora.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    6f073429
es8316.c 27.5 KB