ASoC: dpcm: Add API for DAI link substream and runtime lookup
authorLiam Girdwood <lrg@ti.com>
Wed, 25 Apr 2012 11:12:53 +0000 (12:12 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 26 Apr 2012 16:48:19 +0000 (17:48 +0100)
Some component drivers will need to be able to look up their
DAI link substream and RTD data. Provide a mechanism for this.

Signed-off-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
include/sound/soc.h
sound/soc/soc-core.c

index bbe6a5e1ac12687f2fd76650e376d901746d3959..153da5bf261109ccc7b55d1d3e2d081a2a4625e3 100644 (file)
@@ -362,6 +362,11 @@ int snd_soc_platform_write(struct snd_soc_platform *platform,
                                        unsigned int reg, unsigned int val);
 int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num);
 
+struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
+               const char *dai_link, int stream);
+struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
+               const char *dai_link);
+
 /* Utility functions to get clock rates from various things */
 int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
 int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);
index 201a4d003b9a8d88b1659c5d24f844b6a3702a5b..4d8869852ad6f41e2ac24f0572fdd801eda0f153 100644 (file)
@@ -465,6 +465,35 @@ static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card)
 }
 #endif
 
+struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
+               const char *dai_link, int stream)
+{
+       int i;
+
+       for (i = 0; i < card->num_links; i++) {
+               if (card->rtd[i].dai_link->no_pcm &&
+                       !strcmp(card->rtd[i].dai_link->name, dai_link))
+                       return card->rtd[i].pcm->streams[stream].substream;
+       }
+       dev_dbg(card->dev, "failed to find dai link %s\n", dai_link);
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(snd_soc_get_dai_substream);
+
+struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
+               const char *dai_link)
+{
+       int i;
+
+       for (i = 0; i < card->num_links; i++) {
+               if (!strcmp(card->rtd[i].dai_link->name, dai_link))
+                       return &card->rtd[i];
+       }
+       dev_dbg(card->dev, "failed to find rtd %s\n", dai_link);
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(snd_soc_get_pcm_runtime);
+
 #ifdef CONFIG_SND_SOC_AC97_BUS
 /* unregister ac97 codec */
 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)