summaryrefslogtreecommitdiffstats
path: root/include/sound
diff options
context:
space:
mode:
authorBenoit Cousson <bcousson@baylibre.com>2014-07-08 23:19:34 +0200
committerMark Brown <broonie@linaro.org>2014-07-16 22:58:49 +0100
commit88bd870f02dff5c9445286e185f21873f25a977f (patch)
tree329d25b67e687f6905e51b989db62c7268986fb1 /include/sound
parentf7acb3694a999fdf04dc3096e8416a0bfdabd590 (diff)
downloadlinux-88bd870f02dff5c9445286e185f21873f25a977f.tar.bz2
ASoC: core: Add initial support for DAI multicodec
DAI link assumes a one to one mapping between CPU DAI and CODEC. In some cases, the same CPU DAI can be connected to several codecs. This is the case for example, if you connect two mono codecs to the same I2S link in order to have a stereo card. The current ASoC implementation does not allow such setup. Add support for DAI links composed of a single CPU DAI and multiple CODECs. Sound cards have to pass the CODECs array in the corresponding DAI link through a new 'snd_soc_dai_link_component' struct. Each CODEC in this array is described in the same manner single CODEC DAIs are (either DT/OF node or codec_name). Multi-codec links are not supported in the case of CODEC to CODEC links. Just print a warning if it happens. Based on an original code done by Misael. Signed-off-by: Benoit Cousson <bcousson@baylibre.com> Signed-off-by: Misael Lopez Cruz <misael.lopez@ti.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> Tested-by: Lars-Peter Clausen <lars@metafoo.de> Reviewed-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'include/sound')
-rw-r--r--include/sound/soc-dai.h4
-rw-r--r--include/sound/soc.h13
2 files changed, 17 insertions, 0 deletions
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index 031be2ab75d0..e8b3080d196a 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -272,6 +272,10 @@ struct snd_soc_dai {
struct snd_soc_codec *codec;
struct snd_soc_component *component;
+ /* CODEC TDM slot masks and params (for fixup) */
+ unsigned int tx_mask;
+ unsigned int rx_mask;
+
struct snd_soc_card *card;
struct list_head list;
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 9a5b4f6fe847..f2142cf3f243 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -846,6 +846,12 @@ struct snd_soc_platform_driver {
int (*bespoke_trigger)(struct snd_pcm_substream *, int);
};
+struct snd_soc_dai_link_component {
+ const char *name;
+ const struct device_node *of_node;
+ const char *dai_name;
+};
+
struct snd_soc_platform {
struct device *dev;
const struct snd_soc_platform_driver *driver;
@@ -891,6 +897,10 @@ struct snd_soc_dai_link {
const struct device_node *codec_of_node;
/* You MUST specify the DAI name within the codec */
const char *codec_dai_name;
+
+ struct snd_soc_dai_link_component *codecs;
+ unsigned int num_codecs;
+
/*
* You MAY specify the link's platform/PCM/DMA driver, either by
* device name, or by DT/OF node, but not both. Some forms of link
@@ -1089,6 +1099,9 @@ struct snd_soc_pcm_runtime {
struct snd_soc_dai *codec_dai;
struct snd_soc_dai *cpu_dai;
+ struct snd_soc_dai **codec_dais;
+ unsigned int num_codecs;
+
struct delayed_work delayed_work;
#ifdef CONFIG_DEBUG_FS
struct dentry *debugfs_dpcm_root;