diff options
author | Sumit Bhattacharya <sumitb@nvidia.com> | 2011-12-07 20:30:34 +0530 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-15 11:49:12 +0530 |
commit | 7b15aa600d2da8f4b9068b156abaf04124a91269 (patch) | |
tree | c794de2989bf649689dece0d1efa11cd54eb59c6 /sound/soc/tegra/tegra_wm8753.c | |
parent | cdd76764cc44d9b6091672af235d52a377a0a4d2 (diff) |
ASoC: Tegra WM8753 machine: Disable regulator when not in use
On whistler audio regulator used to remain enabled always independent
of whether audio playback/capture is going on or not. Only enable
audio regulator when any playback/capture is going on using audio
codec.
Change-Id: Ifb8bf722434306a429aa08345215efde75c8ab38
Signed-off-by: Sumit Bhattacharya <sumitb@nvidia.com>
Reviewed-on: http://git-master/r/68695
Reviewed-by: Lokesh Pathak <lpathak@nvidia.com>
Tested-by: Lokesh Pathak <lpathak@nvidia.com>
Diffstat (limited to 'sound/soc/tegra/tegra_wm8753.c')
-rw-r--r-- | sound/soc/tegra/tegra_wm8753.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/sound/soc/tegra/tegra_wm8753.c b/sound/soc/tegra/tegra_wm8753.c index 2405a0fe1320..15c6c6e0aa48 100644 --- a/sound/soc/tegra/tegra_wm8753.c +++ b/sound/soc/tegra/tegra_wm8753.c @@ -287,9 +287,27 @@ static int tegra_hw_free(struct snd_pcm_substream *substream) return 0; } +static int tegra_wm8753_startup(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct tegra_wm8753 *machine = snd_soc_card_get_drvdata(rtd->card); + + return regulator_enable(machine->audio_reg); +} + +static void tegra_wm8753_shutdown(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct tegra_wm8753 *machine = snd_soc_card_get_drvdata(rtd->card); + + regulator_disable(machine->audio_reg); +} + static struct snd_soc_ops tegra_wm8753_ops = { .hw_params = tegra_wm8753_hw_params, .hw_free = tegra_hw_free, + .startup = tegra_wm8753_startup, + .shutdown = tegra_wm8753_shutdown, }; static struct snd_soc_ops tegra_bt_sco_ops = { @@ -434,14 +452,6 @@ static int tegra_wm8753_init(struct snd_soc_pcm_runtime *rtd) ret = PTR_ERR(machine->audio_reg); return ret; } - - ret = regulator_enable(machine->audio_reg); - if (ret) { - dev_err(card->dev, "cannot enable avddio_audio reg\n"); - regulator_put(machine->audio_reg); - machine->audio_reg = NULL; - return ret; - } } if (gpio_is_valid(pdata->gpio_spkr_en)) { |