Commit 52a18c29 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

ASoC: simple-card-utils: add codec2codec support

codec2codec needs snd_soc_pcm_stream settings.
This patch adds it.
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/874k9mn8qy.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 92939252
...@@ -42,6 +42,7 @@ struct prop_nums { ...@@ -42,6 +42,7 @@ struct prop_nums {
int cpus; int cpus;
int codecs; int codecs;
int platforms; int platforms;
int c2c;
}; };
struct asoc_simple_priv { struct asoc_simple_priv {
...@@ -54,6 +55,7 @@ struct asoc_simple_priv { ...@@ -54,6 +55,7 @@ struct asoc_simple_priv {
struct snd_soc_dai_link_component *platforms; struct snd_soc_dai_link_component *platforms;
struct asoc_simple_data adata; struct asoc_simple_data adata;
struct snd_soc_codec_conf *codec_conf; struct snd_soc_codec_conf *codec_conf;
struct snd_soc_pcm_stream *c2c_conf;
struct prop_nums num; struct prop_nums num;
unsigned int mclk_fs; unsigned int mclk_fs;
} *dai_props; } *dai_props;
...@@ -64,6 +66,7 @@ struct asoc_simple_priv { ...@@ -64,6 +66,7 @@ struct asoc_simple_priv {
struct snd_soc_dai_link_component *dlcs; struct snd_soc_dai_link_component *dlcs;
struct snd_soc_dai_link_component dummy; struct snd_soc_dai_link_component dummy;
struct snd_soc_codec_conf *codec_conf; struct snd_soc_codec_conf *codec_conf;
struct snd_soc_pcm_stream *c2c_conf;
struct gpio_desc *pa_gpio; struct gpio_desc *pa_gpio;
const struct snd_soc_ops *ops; const struct snd_soc_ops *ops;
unsigned int dpcm_selectable:1; unsigned int dpcm_selectable:1;
......
...@@ -619,7 +619,8 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -619,7 +619,8 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
struct asoc_simple_dai *dais; struct asoc_simple_dai *dais;
struct snd_soc_dai_link_component *dlcs; struct snd_soc_dai_link_component *dlcs;
struct snd_soc_codec_conf *cconf = NULL; struct snd_soc_codec_conf *cconf = NULL;
int i, dai_num = 0, dlc_num = 0, cnf_num = 0; struct snd_soc_pcm_stream *c2c_conf = NULL;
int i, dai_num = 0, dlc_num = 0, cnf_num = 0, c2c_num = 0;
dai_props = devm_kcalloc(dev, li->link, sizeof(*dai_props), GFP_KERNEL); dai_props = devm_kcalloc(dev, li->link, sizeof(*dai_props), GFP_KERNEL);
dai_link = devm_kcalloc(dev, li->link, sizeof(*dai_link), GFP_KERNEL); dai_link = devm_kcalloc(dev, li->link, sizeof(*dai_link), GFP_KERNEL);
...@@ -638,6 +639,8 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -638,6 +639,8 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
if (!li->num[i].cpus) if (!li->num[i].cpus)
cnf_num += li->num[i].codecs; cnf_num += li->num[i].codecs;
c2c_num += li->num[i].c2c;
} }
dais = devm_kcalloc(dev, dai_num, sizeof(*dais), GFP_KERNEL); dais = devm_kcalloc(dev, dai_num, sizeof(*dais), GFP_KERNEL);
...@@ -651,6 +654,12 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -651,6 +654,12 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
return -ENOMEM; return -ENOMEM;
} }
if (c2c_num) {
c2c_conf = devm_kcalloc(dev, c2c_num, sizeof(*c2c_conf), GFP_KERNEL);
if (!c2c_conf)
return -ENOMEM;
}
dev_dbg(dev, "link %d, dais %d, ccnf %d\n", dev_dbg(dev, "link %d, dais %d, ccnf %d\n",
li->link, dai_num, cnf_num); li->link, dai_num, cnf_num);
...@@ -664,6 +673,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -664,6 +673,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
priv->dais = dais; priv->dais = dais;
priv->dlcs = dlcs; priv->dlcs = dlcs;
priv->codec_conf = cconf; priv->codec_conf = cconf;
priv->c2c_conf = c2c_conf;
card->dai_link = priv->dai_link; card->dai_link = priv->dai_link;
card->num_links = li->link; card->num_links = li->link;
...@@ -681,6 +691,12 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -681,6 +691,12 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
dlcs += li->num[i].cpus; dlcs += li->num[i].cpus;
dais += li->num[i].cpus; dais += li->num[i].cpus;
if (li->num[i].c2c) {
/* Codec2Codec */
dai_props[i].c2c_conf = c2c_conf;
c2c_conf += li->num[i].c2c;
}
} else { } else {
/* DPCM Be's CPU = dummy */ /* DPCM Be's CPU = dummy */
dai_props[i].cpus = dai_props[i].cpus =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment