summaryrefslogtreecommitdiff
path: root/sound/soc/tegra/tegra_wm8753.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/tegra/tegra_wm8753.c')
-rw-r--r--sound/soc/tegra/tegra_wm8753.c26
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)) {