• Peter Ujfalusi's avatar
    ASoC: TWL4030: PM fix for output amplifiers · c96907f2
    Peter Ujfalusi authored
    Gain controls on outputs affect the power consumption
    when the gain is set to non 0 value.
    
    Outputs with amps have one register to configure the
    routing and the gain:
    PREDL_CTL (0x25):
    bit 0: Voice enable
    bit 1: Audio L1 enable
    bit 2: Audio L2 enable
    bit 3: Audio R2 enable
    bit 4-5: Gain (0x0 - power down, 0x1 - 6dB, 0x2 - 0dB, 0x3 - -6dB)
    
    bit 0 - 3: is handled in DAPM domain (DAPM_MIXER)
    bit 4 - 5: has simple volume control
    
    If there is no audio activity (BIAS_STANDBY), and
    user changes the volume, than the output amplifier will
    be enabled.
    If the user changes the routing (but the codec remains in
    BIAS_STANDBY), than the cached gain value also be written
    to the register, which enables the amplifier.
    
    The existing workaround for this is to have virtual
    PGAs associated with the outputs, and whit DAPM PMD
    the gain on the output will be forced to 0 (off) by
    bypassing the regcache.
    This failed to disable the amplifiers in several
    scenario (as mentioned above).
    
    Also if the codec is in BIAS_ON state, and user modifies
    a volume control, which path is actually not enabled, than
    that amplifier will be enabled as well, but it will
    be not turned off, since there is no DAPM path, which
    would make mute it.
    
    To prevent amps being enabled, when they are not
    needed, introduce the following workaround:
    Track the state of each of this type of output.
    In twl4030_write only allow actual write, when the
    given output is enabled, otherwise only update
    the reg_cache.
    The PGA event handlers on power up will write the cached
    value to the chip (restoring gain, routing selection).
    On power down 0 is written to the register (disabling
    the amp, and also just in case clearing the routing).
    Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@nokia.com>
    Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    c96907f2
twl4030.c 70.2 KB