Commit 850d1746 authored by Mark Brown's avatar Mark Brown

ASoC: add and use asoc_dummy_dlc

Merge series from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>:

Many ASoC drivers are using dummy DAI.
I have 2 concern about it. 1st one is there is no guarantee that local
strings ("snd-soc-dummy-dai",  "snd-soc-dummy") are kept until the card
was binded if it was added at subfunction.
2nd one is we can use common snd_soc_dai_link_component for it.
This patch-set adds common asoc_dummy_dlc, and use it.
parents 7f5d6036 5a7bec81
...@@ -73,7 +73,6 @@ struct asoc_simple_priv { ...@@ -73,7 +73,6 @@ struct asoc_simple_priv {
struct snd_soc_dai_link *dai_link; struct snd_soc_dai_link *dai_link;
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_dai_link_component dummy;
struct snd_soc_codec_conf *codec_conf; struct snd_soc_codec_conf *codec_conf;
struct gpio_desc *pa_gpio; struct gpio_desc *pa_gpio;
const struct snd_soc_ops *ops; const struct snd_soc_ops *ops;
......
...@@ -878,6 +878,7 @@ asoc_link_to_platform(struct snd_soc_dai_link *link, int n) { ...@@ -878,6 +878,7 @@ asoc_link_to_platform(struct snd_soc_dai_link *link, int n) {
#define COMP_DUMMY() { .name = "snd-soc-dummy", .dai_name = "snd-soc-dummy-dai", } #define COMP_DUMMY() { .name = "snd-soc-dummy", .dai_name = "snd-soc-dummy-dai", }
extern struct snd_soc_dai_link_component null_dailink_component[0]; extern struct snd_soc_dai_link_component null_dailink_component[0];
extern struct snd_soc_dai_link_component asoc_dummy_dlc;
struct snd_soc_codec_conf { struct snd_soc_codec_conf {
......
...@@ -795,13 +795,6 @@ SND_SOC_DAILINK_DEF(dmic_codec, ...@@ -795,13 +795,6 @@ SND_SOC_DAILINK_DEF(dmic_codec,
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi"))); DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
/* Declare ACP CPU components */ /* Declare ACP CPU components */
static struct snd_soc_dai_link_component dummy_codec[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static struct snd_soc_dai_link_component platform_component[] = { static struct snd_soc_dai_link_component platform_component[] = {
{ {
.name = "acp_asoc_renoir.0", .name = "acp_asoc_renoir.0",
...@@ -912,8 +905,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card) ...@@ -912,8 +905,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
links[i].no_pcm = 1; links[i].no_pcm = 1;
if (!drv_data->hs_codec_id) { if (!drv_data->hs_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->hs_codec_id == RT5682) { if (drv_data->hs_codec_id == RT5682) {
links[i].codecs = rt5682; links[i].codecs = rt5682;
...@@ -943,8 +936,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card) ...@@ -943,8 +936,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
links[i].no_pcm = 1; links[i].no_pcm = 1;
if (!drv_data->hs_codec_id) { if (!drv_data->hs_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->hs_codec_id == NAU8825) { if (drv_data->hs_codec_id == NAU8825) {
links[i].codecs = nau8825; links[i].codecs = nau8825;
...@@ -973,8 +966,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card) ...@@ -973,8 +966,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
links[i].no_pcm = 1; links[i].no_pcm = 1;
if (!drv_data->amp_codec_id) { if (!drv_data->amp_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->amp_codec_id == RT1019) { if (drv_data->amp_codec_id == RT1019) {
links[i].codecs = rt1019; links[i].codecs = rt1019;
...@@ -1005,8 +998,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card) ...@@ -1005,8 +998,8 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
links[i].no_pcm = 1; links[i].no_pcm = 1;
if (!drv_data->amp_codec_id) { if (!drv_data->amp_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->amp_codec_id == MAX98360A) { if (drv_data->amp_codec_id == MAX98360A) {
links[i].codecs = max98360a; links[i].codecs = max98360a;
...@@ -1076,8 +1069,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card) ...@@ -1076,8 +1069,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].dpcm_capture = 1; links[i].dpcm_capture = 1;
if (!drv_data->hs_codec_id) { if (!drv_data->hs_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->hs_codec_id == RT5682) { if (drv_data->hs_codec_id == RT5682) {
links[i].codecs = rt5682; links[i].codecs = rt5682;
...@@ -1110,8 +1103,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card) ...@@ -1110,8 +1103,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].dpcm_capture = 1; links[i].dpcm_capture = 1;
if (!drv_data->hs_codec_id) { if (!drv_data->hs_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->hs_codec_id == NAU8825) { if (drv_data->hs_codec_id == NAU8825) {
links[i].codecs = nau8825; links[i].codecs = nau8825;
...@@ -1138,8 +1131,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card) ...@@ -1138,8 +1131,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].dpcm_playback = 1; links[i].dpcm_playback = 1;
if (!drv_data->amp_codec_id) { if (!drv_data->amp_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->amp_codec_id == RT1019) { if (drv_data->amp_codec_id == RT1019) {
links[i].codecs = rt1019; links[i].codecs = rt1019;
...@@ -1173,8 +1166,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card) ...@@ -1173,8 +1166,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].dpcm_playback = 1; links[i].dpcm_playback = 1;
if (!drv_data->amp_codec_id) { if (!drv_data->amp_codec_id) {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
if (drv_data->amp_codec_id == MAX98360A) { if (drv_data->amp_codec_id == MAX98360A) {
links[i].codecs = max98360a; links[i].codecs = max98360a;
...@@ -1201,8 +1194,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card) ...@@ -1201,8 +1194,8 @@ int acp_legacy_dai_links_create(struct snd_soc_card *card)
links[i].num_codecs = ARRAY_SIZE(dmic_codec); links[i].num_codecs = ARRAY_SIZE(dmic_codec);
} else { } else {
/* Use dummy codec if codec id not specified */ /* Use dummy codec if codec id not specified */
links[i].codecs = dummy_codec; links[i].codecs = &asoc_dummy_dlc;
links[i].num_codecs = ARRAY_SIZE(dummy_codec); links[i].num_codecs = 1;
} }
links[i].cpus = pdm_dmic; links[i].cpus = pdm_dmic;
links[i].num_cpus = ARRAY_SIZE(pdm_dmic); links[i].num_cpus = ARRAY_SIZE(pdm_dmic);
......
...@@ -473,21 +473,19 @@ static int atmel_classd_asoc_card_init(struct device *dev, ...@@ -473,21 +473,19 @@ static int atmel_classd_asoc_card_init(struct device *dev,
if (!dai_link) if (!dai_link)
return -ENOMEM; return -ENOMEM;
comp = devm_kzalloc(dev, 2 * sizeof(*comp), GFP_KERNEL); comp = devm_kzalloc(dev, sizeof(*comp), GFP_KERNEL);
if (!comp) if (!comp)
return -ENOMEM; return -ENOMEM;
dai_link->cpus = &comp[0]; dai_link->cpus = comp;
dai_link->codecs = &comp[1]; dai_link->codecs = &asoc_dummy_dlc;
dai_link->num_cpus = 1; dai_link->num_cpus = 1;
dai_link->num_codecs = 1; dai_link->num_codecs = 1;
dai_link->name = "CLASSD"; dai_link->name = "CLASSD";
dai_link->stream_name = "CLASSD PCM"; dai_link->stream_name = "CLASSD PCM";
dai_link->codecs->dai_name = "snd-soc-dummy-dai";
dai_link->cpus->dai_name = dev_name(dev); dai_link->cpus->dai_name = dev_name(dev);
dai_link->codecs->name = "snd-soc-dummy";
card->dai_link = dai_link; card->dai_link = dai_link;
card->num_links = 1; card->num_links = 1;
......
...@@ -496,21 +496,19 @@ static int atmel_pdmic_asoc_card_init(struct device *dev, ...@@ -496,21 +496,19 @@ static int atmel_pdmic_asoc_card_init(struct device *dev,
if (!dai_link) if (!dai_link)
return -ENOMEM; return -ENOMEM;
comp = devm_kzalloc(dev, 2 * sizeof(*comp), GFP_KERNEL); comp = devm_kzalloc(dev, sizeof(*comp), GFP_KERNEL);
if (!comp) if (!comp)
return -ENOMEM; return -ENOMEM;
dai_link->cpus = &comp[0]; dai_link->cpus = comp;
dai_link->codecs = &comp[1]; dai_link->codecs = &asoc_dummy_dlc;
dai_link->num_cpus = 1; dai_link->num_cpus = 1;
dai_link->num_codecs = 1; dai_link->num_codecs = 1;
dai_link->name = "PDMIC"; dai_link->name = "PDMIC";
dai_link->stream_name = "PDMIC PCM"; dai_link->stream_name = "PDMIC PCM";
dai_link->codecs->dai_name = "snd-soc-dummy-dai";
dai_link->cpus->dai_name = dev_name(dev); dai_link->cpus->dai_name = dev_name(dev);
dai_link->codecs->name = "snd-soc-dummy";
card->dai_link = dai_link; card->dai_link = dai_link;
card->num_links = 1; card->num_links = 1;
......
...@@ -207,8 +207,8 @@ static int imx_audmix_probe(struct platform_device *pdev) ...@@ -207,8 +207,8 @@ static int imx_audmix_probe(struct platform_device *pdev)
for (i = 0; i < num_dai; i++) { for (i = 0; i < num_dai; i++) {
struct snd_soc_dai_link_component *dlc; struct snd_soc_dai_link_component *dlc;
/* for CPU/Codec x 2 */ /* for CPU x 2 */
dlc = devm_kcalloc(&pdev->dev, 4, sizeof(*dlc), GFP_KERNEL); dlc = devm_kcalloc(&pdev->dev, 2, sizeof(*dlc), GFP_KERNEL);
if (!dlc) if (!dlc)
return -ENOMEM; return -ENOMEM;
...@@ -244,7 +244,7 @@ static int imx_audmix_probe(struct platform_device *pdev) ...@@ -244,7 +244,7 @@ static int imx_audmix_probe(struct platform_device *pdev)
*/ */
priv->dai[i].cpus = priv->dai[i].cpus =
priv->dai[i].platforms = &dlc[0]; priv->dai[i].platforms = &dlc[0];
priv->dai[i].codecs = &dlc[1]; priv->dai[i].codecs = &asoc_dummy_dlc;
priv->dai[i].num_cpus = 1; priv->dai[i].num_cpus = 1;
priv->dai[i].num_codecs = 1; priv->dai[i].num_codecs = 1;
...@@ -252,8 +252,6 @@ static int imx_audmix_probe(struct platform_device *pdev) ...@@ -252,8 +252,6 @@ static int imx_audmix_probe(struct platform_device *pdev)
priv->dai[i].name = dai_name; priv->dai[i].name = dai_name;
priv->dai[i].stream_name = "HiFi-AUDMIX-FE"; priv->dai[i].stream_name = "HiFi-AUDMIX-FE";
priv->dai[i].codecs->dai_name = "snd-soc-dummy-dai";
priv->dai[i].codecs->name = "snd-soc-dummy";
priv->dai[i].cpus->of_node = args.np; priv->dai[i].cpus->of_node = args.np;
priv->dai[i].cpus->dai_name = dev_name(&cpu_pdev->dev); priv->dai[i].cpus->dai_name = dev_name(&cpu_pdev->dev);
priv->dai[i].dynamic = 1; priv->dai[i].dynamic = 1;
...@@ -270,15 +268,13 @@ static int imx_audmix_probe(struct platform_device *pdev) ...@@ -270,15 +268,13 @@ static int imx_audmix_probe(struct platform_device *pdev)
be_cp = devm_kasprintf(&pdev->dev, GFP_KERNEL, be_cp = devm_kasprintf(&pdev->dev, GFP_KERNEL,
"AUDMIX-Capture-%d", i); "AUDMIX-Capture-%d", i);
priv->dai[num_dai + i].cpus = &dlc[2]; priv->dai[num_dai + i].cpus = &dlc[1];
priv->dai[num_dai + i].codecs = &dlc[3]; priv->dai[num_dai + i].codecs = &asoc_dummy_dlc;
priv->dai[num_dai + i].num_cpus = 1; priv->dai[num_dai + i].num_cpus = 1;
priv->dai[num_dai + i].num_codecs = 1; priv->dai[num_dai + i].num_codecs = 1;
priv->dai[num_dai + i].name = be_name; priv->dai[num_dai + i].name = be_name;
priv->dai[num_dai + i].codecs->dai_name = "snd-soc-dummy-dai";
priv->dai[num_dai + i].codecs->name = "snd-soc-dummy";
priv->dai[num_dai + i].cpus->of_node = audmix_np; priv->dai[num_dai + i].cpus->of_node = audmix_np;
priv->dai[num_dai + i].cpus->dai_name = be_name; priv->dai[num_dai + i].cpus->dai_name = be_name;
priv->dai[num_dai + i].no_pcm = 1; priv->dai[num_dai + i].no_pcm = 1;
......
...@@ -615,17 +615,8 @@ static int imx_card_parse_of(struct imx_card_data *data) ...@@ -615,17 +615,8 @@ static int imx_card_parse_of(struct imx_card_data *data)
plat_data->type = CODEC_AK5552; plat_data->type = CODEC_AK5552;
} else { } else {
dlc = devm_kzalloc(dev, sizeof(*dlc), GFP_KERNEL); link->codecs = &asoc_dummy_dlc;
if (!dlc) {
ret = -ENOMEM;
goto err;
}
link->codecs = dlc;
link->num_codecs = 1; link->num_codecs = 1;
link->codecs->dai_name = "snd-soc-dummy-dai";
link->codecs->name = "snd-soc-dummy";
} }
if (!strncmp(link->name, "HiFi-ASRC-FE", 12)) { if (!strncmp(link->name, "HiFi-ASRC-FE", 12)) {
......
...@@ -92,8 +92,7 @@ static int imx_rpmsg_probe(struct platform_device *pdev) ...@@ -92,8 +92,7 @@ static int imx_rpmsg_probe(struct platform_device *pdev)
/* Optional codec node */ /* Optional codec node */
ret = of_parse_phandle_with_fixed_args(np, "audio-codec", 0, 0, &args); ret = of_parse_phandle_with_fixed_args(np, "audio-codec", 0, 0, &args);
if (ret) { if (ret) {
data->dai.codecs->dai_name = "snd-soc-dummy-dai"; *data->dai.codecs = asoc_dummy_dlc;
data->dai.codecs->name = "snd-soc-dummy";
} else { } else {
struct clk *clk; struct clk *clk;
......
...@@ -26,7 +26,7 @@ static int imx_spdif_audio_probe(struct platform_device *pdev) ...@@ -26,7 +26,7 @@ static int imx_spdif_audio_probe(struct platform_device *pdev)
} }
data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
comp = devm_kzalloc(&pdev->dev, 2 * sizeof(*comp), GFP_KERNEL); comp = devm_kzalloc(&pdev->dev, sizeof(*comp), GFP_KERNEL);
if (!data || !comp) { if (!data || !comp) {
ret = -ENOMEM; ret = -ENOMEM;
goto end; goto end;
...@@ -37,8 +37,8 @@ static int imx_spdif_audio_probe(struct platform_device *pdev) ...@@ -37,8 +37,8 @@ static int imx_spdif_audio_probe(struct platform_device *pdev)
* platform is using soc-generic-dmaengine-pcm * platform is using soc-generic-dmaengine-pcm
*/ */
data->dai.cpus = data->dai.cpus =
data->dai.platforms = &comp[0]; data->dai.platforms = comp;
data->dai.codecs = &comp[1]; data->dai.codecs = &asoc_dummy_dlc;
data->dai.num_cpus = 1; data->dai.num_cpus = 1;
data->dai.num_codecs = 1; data->dai.num_codecs = 1;
...@@ -46,8 +46,6 @@ static int imx_spdif_audio_probe(struct platform_device *pdev) ...@@ -46,8 +46,6 @@ static int imx_spdif_audio_probe(struct platform_device *pdev)
data->dai.name = "S/PDIF PCM"; data->dai.name = "S/PDIF PCM";
data->dai.stream_name = "S/PDIF PCM"; data->dai.stream_name = "S/PDIF PCM";
data->dai.codecs->dai_name = "snd-soc-dummy-dai";
data->dai.codecs->name = "snd-soc-dummy";
data->dai.cpus->of_node = spdif_np; data->dai.cpus->of_node = spdif_np;
data->dai.playback_only = true; data->dai.playback_only = true;
data->dai.capture_only = true; data->dai.capture_only = true;
......
...@@ -889,11 +889,6 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -889,11 +889,6 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
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);
/* dummy CPU/Codec */
priv->dummy.of_node = NULL;
priv->dummy.dai_name = "snd-soc-dummy-dai";
priv->dummy.name = "snd-soc-dummy";
priv->dai_props = dai_props; priv->dai_props = dai_props;
priv->dai_link = dai_link; priv->dai_link = dai_link;
priv->dais = dais; priv->dais = dais;
...@@ -919,7 +914,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -919,7 +914,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
} else { } else {
/* DPCM Be's CPU = dummy */ /* DPCM Be's CPU = dummy */
dai_props[i].cpus = dai_props[i].cpus =
dai_link[i].cpus = &priv->dummy; dai_link[i].cpus = &asoc_dummy_dlc;
dai_props[i].num.cpus = dai_props[i].num.cpus =
dai_link[i].num_cpus = 1; dai_link[i].num_cpus = 1;
} }
...@@ -943,7 +938,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv, ...@@ -943,7 +938,7 @@ int asoc_simple_init_priv(struct asoc_simple_priv *priv,
} else { } else {
/* DPCM Fe's Codec = dummy */ /* DPCM Fe's Codec = dummy */
dai_props[i].codecs = dai_props[i].codecs =
dai_link[i].codecs = &priv->dummy; dai_link[i].codecs = &asoc_dummy_dlc;
dai_props[i].num.codecs = dai_props[i].num.codecs =
dai_link[i].num_codecs = 1; dai_link[i].num_codecs = 1;
} }
......
...@@ -28,13 +28,11 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in ...@@ -28,13 +28,11 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
dl->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_port); dl->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_port);
dl->cpus = devm_kzalloc(dev, sizeof(*dl->cpus), GFP_KERNEL); dl->cpus = devm_kzalloc(dev, sizeof(*dl->cpus), GFP_KERNEL);
dl->codecs = devm_kzalloc(dev, sizeof(*dl->codecs), GFP_KERNEL); if (!dl->name || !dl->cpus)
if (!dl->name || !dl->cpus || !dl->codecs)
return -ENOMEM; return -ENOMEM;
dl->cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_port); dl->cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_port);
dl->codecs->name = devm_kasprintf(dev, GFP_KERNEL, "snd-soc-dummy"); dl->codecs = &asoc_dummy_dlc;
dl->codecs->dai_name = devm_kasprintf(dev, GFP_KERNEL, "snd-soc-dummy-dai");
if (!dl->cpus->dai_name || !dl->codecs->name || !dl->codecs->dai_name) if (!dl->cpus->dai_name || !dl->codecs->name || !dl->codecs->dai_name)
return -ENOMEM; return -ENOMEM;
......
...@@ -254,7 +254,6 @@ static void hdmi_link_init(struct snd_soc_card *card, ...@@ -254,7 +254,6 @@ static void hdmi_link_init(struct snd_soc_card *card,
struct sof_card_private *ctx, struct sof_card_private *ctx,
struct snd_soc_acpi_mach *mach) struct snd_soc_acpi_mach *mach)
{ {
struct snd_soc_dai_link *link;
int i; int i;
if (mach->mach_params.common_hdmi_codec_drv && if (mach->mach_params.common_hdmi_codec_drv &&
...@@ -267,11 +266,8 @@ static void hdmi_link_init(struct snd_soc_card *card, ...@@ -267,11 +266,8 @@ static void hdmi_link_init(struct snd_soc_card *card,
* if HDMI is not enabled in kernel config, or * if HDMI is not enabled in kernel config, or
* hdmi codec is not supported * hdmi codec is not supported
*/ */
for (i = HDMI_LINK_START; i <= HDMI_LINE_END; i++) { for (i = HDMI_LINK_START; i <= HDMI_LINE_END; i++)
link = &card->dai_link[i]; card->dai_link[i].codecs[0] = asoc_dummy_dlc;
link->codecs[0].name = "snd-soc-dummy";
link->codecs[0].dai_name = "snd-soc-dummy-dai";
}
} }
static int snd_ehl_rt5660_probe(struct platform_device *pdev) static int snd_ehl_rt5660_probe(struct platform_device *pdev)
......
...@@ -61,9 +61,6 @@ static const struct snd_soc_dapm_route skl_hda_map[] = { ...@@ -61,9 +61,6 @@ static const struct snd_soc_dapm_route skl_hda_map[] = {
{ "Alt Analog CPU Capture", NULL, "Alt Analog Codec Capture" }, { "Alt Analog CPU Capture", NULL, "Alt Analog Codec Capture" },
}; };
SND_SOC_DAILINK_DEF(dummy_codec,
DAILINK_COMP_ARRAY(COMP_CODEC("snd-soc-dummy", "snd-soc-dummy-dai")));
static int skl_hda_card_late_probe(struct snd_soc_card *card) static int skl_hda_card_late_probe(struct snd_soc_card *card)
{ {
return skl_hda_hdmi_jack_init(card); return skl_hda_hdmi_jack_init(card);
...@@ -158,9 +155,8 @@ static int skl_hda_fill_card_info(struct snd_soc_acpi_mach_params *mach_params) ...@@ -158,9 +155,8 @@ static int skl_hda_fill_card_info(struct snd_soc_acpi_mach_params *mach_params)
card->num_dapm_widgets = ARRAY_SIZE(skl_hda_widgets); card->num_dapm_widgets = ARRAY_SIZE(skl_hda_widgets);
if (!ctx->idisp_codec) { if (!ctx->idisp_codec) {
for (i = 0; i < IDISP_DAI_COUNT; i++) { for (i = 0; i < IDISP_DAI_COUNT; i++) {
skl_hda_be_dai_links[i].codecs = dummy_codec; skl_hda_be_dai_links[i].codecs = &asoc_dummy_dlc;
skl_hda_be_dai_links[i].num_codecs = skl_hda_be_dai_links[i].num_codecs = 1;
ARRAY_SIZE(dummy_codec);
} }
} }
} }
......
...@@ -296,13 +296,6 @@ static struct snd_soc_dai_link_component dmic_component[] = { ...@@ -296,13 +296,6 @@ static struct snd_soc_dai_link_component dmic_component[] = {
} }
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static int create_spk_amp_dai_links(struct device *dev, static int create_spk_amp_dai_links(struct device *dev,
struct snd_soc_dai_link *links, struct snd_soc_dai_link *links,
struct snd_soc_dai_link_component *cpus, struct snd_soc_dai_link_component *cpus,
...@@ -510,8 +503,8 @@ static int create_bt_offload_dai_links(struct device *dev, ...@@ -510,8 +503,8 @@ static int create_bt_offload_dai_links(struct device *dev,
goto devm_err; goto devm_err;
links[*id].id = *id; links[*id].id = *id;
links[*id].codecs = dummy_component; links[*id].codecs = &asoc_dummy_dlc;
links[*id].num_codecs = ARRAY_SIZE(dummy_component); links[*id].num_codecs = 1;
links[*id].platforms = platform_component; links[*id].platforms = platform_component;
links[*id].num_platforms = ARRAY_SIZE(platform_component); links[*id].num_platforms = ARRAY_SIZE(platform_component);
......
...@@ -393,13 +393,6 @@ static struct snd_soc_dai_link_component dmic_component[] = { ...@@ -393,13 +393,6 @@ static struct snd_soc_dai_link_component dmic_component[] = {
} }
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static int sof_es8336_late_probe(struct snd_soc_card *card) static int sof_es8336_late_probe(struct snd_soc_card *card)
{ {
struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card); struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card);
...@@ -572,8 +565,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -572,8 +565,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
if (!links[id].name) if (!links[id].name)
return NULL; return NULL;
links[id].id = id + hdmi_id_offset; links[id].id = id + hdmi_id_offset;
links[id].codecs = dummy_component; links[id].codecs = &asoc_dummy_dlc;
links[id].num_codecs = ARRAY_SIZE(dummy_component); links[id].num_codecs = 1;
links[id].platforms = platform_component; links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_capture = 1; links[id].dpcm_capture = 1;
......
...@@ -346,13 +346,6 @@ static struct snd_soc_dai_link_component nau8318_components[] = { ...@@ -346,13 +346,6 @@ static struct snd_soc_dai_link_component nau8318_components[] = {
} }
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
int ssp_codec, int ssp_codec,
int ssp_amp, int ssp_amp,
...@@ -532,8 +525,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -532,8 +525,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port);
if (!links[id].name) if (!links[id].name)
goto devm_err; goto devm_err;
links[id].codecs = dummy_component; links[id].codecs = &asoc_dummy_dlc;
links[id].num_codecs = ARRAY_SIZE(dummy_component); links[id].num_codecs = 1;
links[id].platforms = platform_component; links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_playback = 1; links[id].dpcm_playback = 1;
......
...@@ -331,8 +331,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -331,8 +331,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
devm_kasprintf(dev, GFP_KERNEL, devm_kasprintf(dev, GFP_KERNEL,
"intel-hdmi-hifi%d", i); "intel-hdmi-hifi%d", i);
} else { } else {
idisp_components[i - 1].name = "snd-soc-dummy"; idisp_components[i - 1] = asoc_dummy_dlc;
idisp_components[i - 1].dai_name = "snd-soc-dummy-dai";
} }
if (!idisp_components[i - 1].dai_name) if (!idisp_components[i - 1].dai_name)
goto devm_err; goto devm_err;
......
...@@ -607,13 +607,6 @@ static struct snd_soc_dai_link_component dmic_component[] = { ...@@ -607,13 +607,6 @@ static struct snd_soc_dai_link_component dmic_component[] = {
} }
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
#define IDISP_CODEC_MASK 0x4 #define IDISP_CODEC_MASK 0x4
static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
...@@ -745,8 +738,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -745,8 +738,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
if (!idisp_components[i - 1].dai_name) if (!idisp_components[i - 1].dai_name)
goto devm_err; goto devm_err;
} else { } else {
idisp_components[i - 1].name = "snd-soc-dummy"; idisp_components[i - 1] = asoc_dummy_dlc;
idisp_components[i - 1].dai_name = "snd-soc-dummy-dai";
} }
links[id].codecs = &idisp_components[i - 1]; links[id].codecs = &idisp_components[i - 1];
...@@ -841,8 +833,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -841,8 +833,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port);
if (!links[id].name) if (!links[id].name)
goto devm_err; goto devm_err;
links[id].codecs = dummy_component; links[id].codecs = &asoc_dummy_dlc;
links[id].num_codecs = ARRAY_SIZE(dummy_component); links[id].num_codecs = 1;
links[id].platforms = platform_component; links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_playback = 1; links[id].dpcm_playback = 1;
......
...@@ -1488,8 +1488,7 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -1488,8 +1488,7 @@ static int sof_card_dai_links_create(struct device *dev,
if (!idisp_components[i].dai_name) if (!idisp_components[i].dai_name)
return -ENOMEM; return -ENOMEM;
} else { } else {
idisp_components[i].name = "snd-soc-dummy"; idisp_components[i] = asoc_dummy_dlc;
idisp_components[i].dai_name = "snd-soc-dummy-dai";
} }
cpu_name = devm_kasprintf(dev, GFP_KERNEL, cpu_name = devm_kasprintf(dev, GFP_KERNEL,
...@@ -1514,21 +1513,13 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -1514,21 +1513,13 @@ static int sof_card_dai_links_create(struct device *dev,
if (!name) if (!name)
return -ENOMEM; return -ENOMEM;
ssp_components = devm_kzalloc(dev, sizeof(*ssp_components),
GFP_KERNEL);
if (!ssp_components)
return -ENOMEM;
ssp_components->name = "snd-soc-dummy";
ssp_components->dai_name = "snd-soc-dummy-dai";
cpu_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port); cpu_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port);
if (!cpu_name) if (!cpu_name)
return -ENOMEM; return -ENOMEM;
cpus[cpu_id].dai_name = cpu_name; cpus[cpu_id].dai_name = cpu_name;
init_dai_link(dev, links + link_index, be_id, name, 1, 1, init_dai_link(dev, links + link_index, be_id, name, 1, 1,
cpus + cpu_id, 1, ssp_components, 1, NULL, NULL); cpus + cpu_id, 1, &asoc_dummy_dlc, 1, NULL, NULL);
} }
card->dai_link = links; card->dai_link = links;
......
...@@ -167,13 +167,6 @@ static struct snd_soc_dai_link_component dmic_component[] = { ...@@ -167,13 +167,6 @@ static struct snd_soc_dai_link_component dmic_component[] = {
} }
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static int sof_hdmi_init(struct snd_soc_pcm_runtime *rtd) static int sof_hdmi_init(struct snd_soc_pcm_runtime *rtd)
{ {
struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
...@@ -233,8 +226,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -233,8 +226,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
if (!links[id].name) if (!links[id].name)
return NULL; return NULL;
links[id].id = id; links[id].id = id;
links[id].codecs = dummy_component; links[id].codecs = &asoc_dummy_dlc;
links[id].num_codecs = ARRAY_SIZE(dummy_component); links[id].num_codecs = 1;
links[id].platforms = platform_component; links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_capture = 1; links[id].dpcm_capture = 1;
...@@ -331,8 +324,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -331,8 +324,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
if (!idisp_components[i - 1].dai_name) if (!idisp_components[i - 1].dai_name)
goto devm_err; goto devm_err;
} else { } else {
idisp_components[i - 1].name = "snd-soc-dummy"; idisp_components[i - 1] = asoc_dummy_dlc;
idisp_components[i - 1].dai_name = "snd-soc-dummy-dai";
} }
links[id].codecs = &idisp_components[i - 1]; links[id].codecs = &idisp_components[i - 1];
...@@ -360,8 +352,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -360,8 +352,8 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port);
if (!links[id].name) if (!links[id].name)
goto devm_err; goto devm_err;
links[id].codecs = dummy_component; links[id].codecs = &asoc_dummy_dlc;
links[id].num_codecs = ARRAY_SIZE(dummy_component); links[id].num_codecs = 1;
links[id].platforms = platform_component; links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_playback = 1; links[id].dpcm_playback = 1;
......
...@@ -120,20 +120,18 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card, ...@@ -120,20 +120,18 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card,
if (!lb->name) if (!lb->name)
return -ENOMEM; return -ENOMEM;
dlc = devm_kzalloc(card->dev, 2 * sizeof(*dlc), GFP_KERNEL); dlc = devm_kzalloc(card->dev, sizeof(*dlc), GFP_KERNEL);
if (!dlc) if (!dlc)
return -ENOMEM; return -ENOMEM;
lb->cpus = &dlc[0]; lb->cpus = dlc;
lb->codecs = &dlc[1]; lb->codecs = &asoc_dummy_dlc;
lb->num_cpus = 1; lb->num_cpus = 1;
lb->num_codecs = 1; lb->num_codecs = 1;
lb->stream_name = lb->name; lb->stream_name = lb->name;
lb->cpus->of_node = pad->cpus->of_node; lb->cpus->of_node = pad->cpus->of_node;
lb->cpus->dai_name = "TDM Loopback"; lb->cpus->dai_name = "TDM Loopback";
lb->codecs->name = "snd-soc-dummy";
lb->codecs->dai_name = "snd-soc-dummy-dai";
lb->dpcm_capture = 1; lb->dpcm_capture = 1;
lb->no_pcm = 1; lb->no_pcm = 1;
lb->ops = &axg_card_tdm_be_ops; lb->ops = &axg_card_tdm_be_ops;
......
...@@ -183,21 +183,13 @@ int meson_card_set_fe_link(struct snd_soc_card *card, ...@@ -183,21 +183,13 @@ int meson_card_set_fe_link(struct snd_soc_card *card,
struct device_node *node, struct device_node *node,
bool is_playback) bool is_playback)
{ {
struct snd_soc_dai_link_component *codec; link->codecs = &asoc_dummy_dlc;
codec = devm_kzalloc(card->dev, sizeof(*codec), GFP_KERNEL);
if (!codec)
return -ENOMEM;
link->codecs = codec;
link->num_codecs = 1; link->num_codecs = 1;
link->dynamic = 1; link->dynamic = 1;
link->dpcm_merged_format = 1; link->dpcm_merged_format = 1;
link->dpcm_merged_chan = 1; link->dpcm_merged_chan = 1;
link->dpcm_merged_rate = 1; link->dpcm_merged_rate = 1;
link->codecs->dai_name = "snd-soc-dummy-dai";
link->codecs->name = "snd-soc-dummy";
if (is_playback) if (is_playback)
link->dpcm_playback = 1; link->dpcm_playback = 1;
......
...@@ -140,17 +140,8 @@ int qcom_snd_parse_of(struct snd_soc_card *card) ...@@ -140,17 +140,8 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
} }
} else { } else {
/* DPCM frontend */ /* DPCM frontend */
dlc = devm_kzalloc(dev, sizeof(*dlc), GFP_KERNEL); link->codecs = &asoc_dummy_dlc;
if (!dlc) {
ret = -ENOMEM;
goto err;
}
link->codecs = dlc;
link->num_codecs = 1; link->num_codecs = 1;
link->codecs->dai_name = "snd-soc-dummy-dai";
link->codecs->name = "snd-soc-dummy";
link->dynamic = 1; link->dynamic = 1;
} }
......
...@@ -1693,10 +1693,7 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, ...@@ -1693,10 +1693,7 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
dlc = (struct snd_soc_dai_link_component *)(link + 1); dlc = (struct snd_soc_dai_link_component *)(link + 1);
link->cpus = &dlc[0]; link->cpus = &dlc[0];
link->codecs = &dlc[1];
link->num_cpus = 1; link->num_cpus = 1;
link->num_codecs = 1;
link->dobj.index = tplg->index; link->dobj.index = tplg->index;
link->dobj.type = SND_SOC_DOBJ_DAI_LINK; link->dobj.type = SND_SOC_DOBJ_DAI_LINK;
...@@ -1721,14 +1718,17 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, ...@@ -1721,14 +1718,17 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
} }
} }
/*
* Many topology are assuming link has Codec / Platform, and
* these might be overwritten at soc_tplg_dai_link_load().
* Don't use &asoc_dummy_dlc here.
*/
link->codecs = &dlc[1]; /* Don't use &asoc_dummy_dlc here */
link->codecs->name = "snd-soc-dummy"; link->codecs->name = "snd-soc-dummy";
link->codecs->dai_name = "snd-soc-dummy-dai"; link->codecs->dai_name = "snd-soc-dummy-dai";
link->num_codecs = 1;
/* link->platforms = &dlc[2]; /* Don't use &asoc_dummy_dlc here */
* Many topology is assuming link has Platform.
* This might be overwritten at soc_tplg_dai_link_load().
*/
link->platforms = &dlc[2];
link->platforms->name = "snd-soc-dummy"; link->platforms->name = "snd-soc-dummy";
link->num_platforms = 1; link->num_platforms = 1;
......
...@@ -224,6 +224,13 @@ int snd_soc_component_is_dummy(struct snd_soc_component *component) ...@@ -224,6 +224,13 @@ int snd_soc_component_is_dummy(struct snd_soc_component *component)
(component->driver == &dummy_codec)); (component->driver == &dummy_codec));
} }
struct snd_soc_dai_link_component asoc_dummy_dlc = {
.of_node = NULL,
.dai_name = "snd-soc-dummy-dai",
.name = "snd-soc-dummy",
};
EXPORT_SYMBOL_GPL(asoc_dummy_dlc);
static int snd_soc_dummy_probe(struct platform_device *pdev) static int snd_soc_dummy_probe(struct platform_device *pdev)
{ {
int ret; int ret;
......
...@@ -32,7 +32,7 @@ static int sof_nocodec_bes_setup(struct device *dev, ...@@ -32,7 +32,7 @@ static int sof_nocodec_bes_setup(struct device *dev,
/* set up BE dai_links */ /* set up BE dai_links */
for (i = 0; i < link_num; i++) { for (i = 0; i < link_num; i++) {
dlc = devm_kcalloc(dev, 3, sizeof(*dlc), GFP_KERNEL); dlc = devm_kcalloc(dev, 2, sizeof(*dlc), GFP_KERNEL);
if (!dlc) if (!dlc)
return -ENOMEM; return -ENOMEM;
...@@ -44,8 +44,8 @@ static int sof_nocodec_bes_setup(struct device *dev, ...@@ -44,8 +44,8 @@ static int sof_nocodec_bes_setup(struct device *dev,
links[i].stream_name = links[i].name; links[i].stream_name = links[i].name;
links[i].cpus = &dlc[0]; links[i].cpus = &dlc[0];
links[i].codecs = &dlc[1]; links[i].codecs = &asoc_dummy_dlc;
links[i].platforms = &dlc[2]; links[i].platforms = &dlc[1];
links[i].num_cpus = 1; links[i].num_cpus = 1;
links[i].num_codecs = 1; links[i].num_codecs = 1;
...@@ -55,8 +55,6 @@ static int sof_nocodec_bes_setup(struct device *dev, ...@@ -55,8 +55,6 @@ static int sof_nocodec_bes_setup(struct device *dev,
links[i].no_pcm = 1; links[i].no_pcm = 1;
links[i].cpus->dai_name = drv[i].name; links[i].cpus->dai_name = drv[i].name;
links[i].platforms->name = dev_name(dev->parent); links[i].platforms->name = dev_name(dev->parent);
links[i].codecs->dai_name = "snd-soc-dummy-dai";
links[i].codecs->name = "snd-soc-dummy";
if (drv[i].playback.channels_min) if (drv[i].playback.channels_min)
links[i].dpcm_playback = 1; links[i].dpcm_playback = 1;
if (drv[i].capture.channels_min) if (drv[i].capture.channels_min)
......
...@@ -365,19 +365,17 @@ static int omap_hdmi_audio_probe(struct platform_device *pdev) ...@@ -365,19 +365,17 @@ static int omap_hdmi_audio_probe(struct platform_device *pdev)
if (!card->dai_link) if (!card->dai_link)
return -ENOMEM; return -ENOMEM;
compnent = devm_kzalloc(dev, 2 * sizeof(*compnent), GFP_KERNEL); compnent = devm_kzalloc(dev, sizeof(*compnent), GFP_KERNEL);
if (!compnent) if (!compnent)
return -ENOMEM; return -ENOMEM;
card->dai_link->cpus = &compnent[0]; card->dai_link->cpus = compnent;
card->dai_link->num_cpus = 1; card->dai_link->num_cpus = 1;
card->dai_link->codecs = &compnent[1]; card->dai_link->codecs = &asoc_dummy_dlc;
card->dai_link->num_codecs = 1; card->dai_link->num_codecs = 1;
card->dai_link->name = card->name; card->dai_link->name = card->name;
card->dai_link->stream_name = card->name; card->dai_link->stream_name = card->name;
card->dai_link->cpus->dai_name = dev_name(ad->dssdev); card->dai_link->cpus->dai_name = dev_name(ad->dssdev);
card->dai_link->codecs->name = "snd-soc-dummy";
card->dai_link->codecs->dai_name = "snd-soc-dummy-dai";
card->num_links = 1; card->num_links = 1;
card->dev = dev; card->dev = dev;
......
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