ALSA: ASoC: OMAP: Add multilink support to McBSP DAI driver
Jarkko Nikula [Thu, 9 Oct 2008 12:57:22 +0000 (15:57 +0300)]
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

sound/soc/omap/omap-mcbsp.c
sound/soc/omap/omap-mcbsp.h

index fb920e1..d32eb47 100644 (file)
@@ -381,37 +381,49 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
        return err;
 }
 
-struct snd_soc_dai omap_mcbsp_dai[NUM_LINKS] = {
-{
-       .name = "omap-mcbsp-dai",
-       .id = 0,
-       .type = SND_SOC_DAI_I2S,
-       .playback = {
-               .channels_min = 2,
-               .channels_max = 2,
-               .rates = OMAP_MCBSP_RATES,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE,
-       },
-       .capture = {
-               .channels_min = 2,
-               .channels_max = 2,
-               .rates = OMAP_MCBSP_RATES,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE,
-       },
-       .ops = {
-               .startup = omap_mcbsp_dai_startup,
-               .shutdown = omap_mcbsp_dai_shutdown,
-               .trigger = omap_mcbsp_dai_trigger,
-               .hw_params = omap_mcbsp_dai_hw_params,
-       },
-       .dai_ops = {
-               .set_fmt = omap_mcbsp_dai_set_dai_fmt,
-               .set_clkdiv = omap_mcbsp_dai_set_clkdiv,
-               .set_sysclk = omap_mcbsp_dai_set_dai_sysclk,
-       },
-       .private_data = &mcbsp_data[0].bus_id,
-},
+#define OMAP_MCBSP_DAI_BUILDER(link_id)                                \
+{                                                              \
+       .name = "omap-mcbsp-dai-(link_id)",                     \
+       .id = (link_id),                                        \
+       .type = SND_SOC_DAI_I2S,                                \
+       .playback = {                                           \
+               .channels_min = 2,                              \
+               .channels_max = 2,                              \
+               .rates = OMAP_MCBSP_RATES,                      \
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,             \
+       },                                                      \
+       .capture = {                                            \
+               .channels_min = 2,                              \
+               .channels_max = 2,                              \
+               .rates = OMAP_MCBSP_RATES,                      \
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,             \
+       },                                                      \
+       .ops = {                                                \
+               .startup = omap_mcbsp_dai_startup,              \
+               .shutdown = omap_mcbsp_dai_shutdown,            \
+               .trigger = omap_mcbsp_dai_trigger,              \
+               .hw_params = omap_mcbsp_dai_hw_params,          \
+       },                                                      \
+       .dai_ops = {                                            \
+               .set_fmt = omap_mcbsp_dai_set_dai_fmt,          \
+               .set_clkdiv = omap_mcbsp_dai_set_clkdiv,        \
+               .set_sysclk = omap_mcbsp_dai_set_dai_sysclk,    \
+       },                                                      \
+       .private_data = &mcbsp_data[(link_id)].bus_id,          \
+}
+
+struct snd_soc_dai omap_mcbsp_dai[] = {
+       OMAP_MCBSP_DAI_BUILDER(0),
+       OMAP_MCBSP_DAI_BUILDER(1),
+#if NUM_LINKS >= 3
+       OMAP_MCBSP_DAI_BUILDER(2),
+#endif
+#if NUM_LINKS == 5
+       OMAP_MCBSP_DAI_BUILDER(3),
+       OMAP_MCBSP_DAI_BUILDER(4),
+#endif
 };
+
 EXPORT_SYMBOL_GPL(omap_mcbsp_dai);
 
 MODULE_AUTHOR("Jarkko Nikula <jarkko.nikula@nokia.com>");
index ed8afb5..df7ad13 100644 (file)
@@ -38,11 +38,17 @@ enum omap_mcbsp_div {
        OMAP_MCBSP_CLKGDV,              /* Sample rate generator divider */
 };
 
-/*
- * REVISIT: Preparation for the ASoC v2. Let the number of available links to
- * be same than number of McBSP ports found in OMAP(s) we are compiling for.
- */
-#define NUM_LINKS      1
+#if defined(CONFIG_ARCH_OMAP2420)
+#define NUM_LINKS      2
+#endif
+#if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX)
+#undef  NUM_LINKS
+#define NUM_LINKS      3
+#endif
+#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
+#undef  NUM_LINKS
+#define NUM_LINKS      5
+#endif
 
 extern struct snd_soc_dai omap_mcbsp_dai[NUM_LINKS];