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

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.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 92939252
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ struct prop_nums {
	int cpus;
	int codecs;
	int platforms;
	int c2c;
};

struct asoc_simple_priv {
@@ -54,6 +55,7 @@ struct asoc_simple_priv {
		struct snd_soc_dai_link_component *platforms;
		struct asoc_simple_data adata;
		struct snd_soc_codec_conf *codec_conf;
		struct snd_soc_pcm_stream *c2c_conf;
		struct prop_nums num;
		unsigned int mclk_fs;
	} *dai_props;
@@ -64,6 +66,7 @@ struct asoc_simple_priv {
	struct snd_soc_dai_link_component *dlcs;
	struct snd_soc_dai_link_component dummy;
	struct snd_soc_codec_conf *codec_conf;
	struct snd_soc_pcm_stream *c2c_conf;
	struct gpio_desc *pa_gpio;
	const struct snd_soc_ops *ops;
	unsigned int dpcm_selectable:1;
+17 −1
Original line number Diff line number Diff line
@@ -619,7 +619,8 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
	struct asoc_simple_dai *dais;
	struct snd_soc_dai_link_component *dlcs;
	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_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,

		if (!li->num[i].cpus)
			cnf_num += li->num[i].codecs;

		c2c_num += li->num[i].c2c;
	}

	dais = devm_kcalloc(dev, dai_num, sizeof(*dais), GFP_KERNEL);
@@ -651,6 +654,12 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
			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",
		li->link, dai_num, cnf_num);

@@ -664,6 +673,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
	priv->dais		= dais;
	priv->dlcs		= dlcs;
	priv->codec_conf	= cconf;
	priv->c2c_conf		= c2c_conf;

	card->dai_link		= priv->dai_link;
	card->num_links		= li->link;
@@ -681,6 +691,12 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,

			dlcs += 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 {
			/* DPCM Be's CPU = dummy */
			dai_props[i].cpus	=