diff options
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/soc-dapm.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 873e6e76ee87..d0a4be38dc0f 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -1017,10 +1017,29 @@ EXPORT_SYMBOL_GPL(dapm_reg_event); int dapm_regulator_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { - if (SND_SOC_DAPM_EVENT_ON(event)) + int ret; + + if (SND_SOC_DAPM_EVENT_ON(event)) { + if (w->invert & SND_SOC_DAPM_REGULATOR_BYPASS) { + ret = regulator_allow_bypass(w->regulator, true); + if (ret != 0) + dev_warn(w->dapm->dev, + "Failed to bypass %s: %d\n", + w->name, ret); + } + return regulator_enable(w->regulator); - else + } else { + if (w->invert & SND_SOC_DAPM_REGULATOR_BYPASS) { + ret = regulator_allow_bypass(w->regulator, false); + if (ret != 0) + dev_warn(w->dapm->dev, + "Failed to unbypass %s: %d\n", + w->name, ret); + } + return regulator_disable_deferred(w->regulator, w->shift); + } } EXPORT_SYMBOL_GPL(dapm_regulator_event); |