aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/tlv320dac33.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>2010-04-30 07:59:35 -0400
committerLiam Girdwood <lrg@slimlogic.co.uk>2010-05-03 07:55:48 -0400
commit0b61d2b9f2f78fc55faaedcc37f622ffd4103d14 (patch)
treee9644b438dc3907cd90f978c2bc2c110f2ab0c6f /sound/soc/codecs/tlv320dac33.c
parent239fe55c7fe17d67403cb1e9222fcaea84248974 (diff)
ASoC: tlv320dac33: Manage a pointer for snd_pcm_substream in private structure
As a preparation for supporting codec to be turned off, when we are in BIAS_STANDBY. The substream must be easily available in other places than pcm_* callbacks. Manage a pointer in _startup, and _shutdown for this. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Diffstat (limited to 'sound/soc/codecs/tlv320dac33.c')
-rw-r--r--sound/soc/codecs/tlv320dac33.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index 9944721a055c..50d152215abd 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -91,6 +91,7 @@ struct tlv320dac33_priv {
91 struct work_struct work; 91 struct work_struct work;
92 struct snd_soc_codec codec; 92 struct snd_soc_codec codec;
93 struct regulator_bulk_data supplies[DAC33_NUM_SUPPLIES]; 93 struct regulator_bulk_data supplies[DAC33_NUM_SUPPLIES];
94 struct snd_pcm_substream *substream;
94 int power_gpio; 95 int power_gpio;
95 int chip_power; 96 int chip_power;
96 int irq; 97 int irq;
@@ -720,6 +721,31 @@ static void dac33_oscwait(struct snd_soc_codec *codec)
720 "internal oscillator calibration failed\n"); 721 "internal oscillator calibration failed\n");
721} 722}
722 723
724static int dac33_startup(struct snd_pcm_substream *substream,
725 struct snd_soc_dai *dai)
726{
727 struct snd_soc_pcm_runtime *rtd = substream->private_data;
728 struct snd_soc_device *socdev = rtd->socdev;
729 struct snd_soc_codec *codec = socdev->card->codec;
730 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
731
732 /* Stream started, save the substream pointer */
733 dac33->substream = substream;
734
735 return 0;
736}
737
738static void dac33_shutdown(struct snd_pcm_substream *substream,
739 struct snd_soc_dai *dai)
740{
741 struct snd_soc_pcm_runtime *rtd = substream->private_data;
742 struct snd_soc_device *socdev = rtd->socdev;
743 struct snd_soc_codec *codec = socdev->card->codec;
744 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
745
746 dac33->substream = NULL;
747}
748
723static int dac33_hw_params(struct snd_pcm_substream *substream, 749static int dac33_hw_params(struct snd_pcm_substream *substream,
724 struct snd_pcm_hw_params *params, 750 struct snd_pcm_hw_params *params,
725 struct snd_soc_dai *dai) 751 struct snd_soc_dai *dai)
@@ -1367,6 +1393,8 @@ EXPORT_SYMBOL_GPL(soc_codec_dev_tlv320dac33);
1367#define DAC33_FORMATS SNDRV_PCM_FMTBIT_S16_LE 1393#define DAC33_FORMATS SNDRV_PCM_FMTBIT_S16_LE
1368 1394
1369static struct snd_soc_dai_ops dac33_dai_ops = { 1395static struct snd_soc_dai_ops dac33_dai_ops = {
1396 .startup = dac33_startup,
1397 .shutdown = dac33_shutdown,
1370 .hw_params = dac33_hw_params, 1398 .hw_params = dac33_hw_params,
1371 .prepare = dac33_pcm_prepare, 1399 .prepare = dac33_pcm_prepare,
1372 .trigger = dac33_pcm_trigger, 1400 .trigger = dac33_pcm_trigger,