ASoC: Don't force bias on ground referenced devices
Currently we force all devices in the system to be at the same bias level. This is due to concerns about power or pop/click impacts from either ramping VMID or mismatching VMID on the analogue I/O lines between connected devices but does mean we power devices up more often than we really need to. If a device flags idle_bias_off this will usually mean that it's either all digital or ground referenced (in which case the idle and powered bias levels are identical) so this concern does not apply and we can save some power by leaving it off when not needed itself. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
8c75615834
commit
85a843c50f
|
@ -1319,13 +1319,16 @@ static int dapm_power_widgets(struct snd_soc_dapm_context *dapm, int event)
|
|||
}
|
||||
}
|
||||
|
||||
/* Force all contexts in the card to the same bias state */
|
||||
/* Force all contexts in the card to the same bias state if
|
||||
* they're not ground referenced.
|
||||
*/
|
||||
bias = SND_SOC_BIAS_OFF;
|
||||
list_for_each_entry(d, &card->dapm_list, list)
|
||||
if (d->target_bias_level > bias)
|
||||
bias = d->target_bias_level;
|
||||
list_for_each_entry(d, &card->dapm_list, list)
|
||||
d->target_bias_level = bias;
|
||||
if (!d->idle_bias_off)
|
||||
d->target_bias_level = bias;
|
||||
|
||||
trace_snd_soc_dapm_walk_done(card);
|
||||
|
||||
|
|
Loading…
Reference in New Issue