Skip to content

Commit 53c8dd9

Browse files
committed
ASoC: sdw_utils: Add codec_conf for every DAI
As SDCA devices will support each DAI link on a different child device, add a codec_conf struct for each DAI link. Change-Id: I9fd84aad97943d7d0a26bc5303019fe3d5a4f06b Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
1 parent 45e07ee commit 53c8dd9

3 files changed

Lines changed: 22 additions & 15 deletions

File tree

sound/soc/amd/acp/acp-sdw-legacy-mach.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ static int soc_card_dai_links_create(struct snd_soc_card *card)
364364
struct snd_soc_dai_link *dai_links;
365365
int num_devs = 0;
366366
int num_ends = 0;
367+
int num_confs;
367368
int num_links;
368369
int be_id = 0;
369370
int ret;
@@ -374,6 +375,8 @@ static int soc_card_dai_links_create(struct snd_soc_card *card)
374375
return ret;
375376
}
376377

378+
num_confs = num_ends;
379+
377380
/* One per DAI link, worst case is a DAI link for every endpoint */
378381
soc_dais = kcalloc(num_ends, sizeof(*soc_dais), GFP_KERNEL);
379382
if (!soc_dais)
@@ -384,7 +387,7 @@ static int soc_card_dai_links_create(struct snd_soc_card *card)
384387
if (!soc_ends)
385388
return -ENOMEM;
386389

387-
ret = asoc_sdw_parse_sdw_endpoints(card, soc_dais, soc_ends, &num_devs);
390+
ret = asoc_sdw_parse_sdw_endpoints(card, soc_dais, soc_ends, &num_confs);
388391
if (ret < 0)
389392
return ret;
390393

@@ -396,7 +399,7 @@ static int soc_card_dai_links_create(struct snd_soc_card *card)
396399

397400
dev_dbg(dev, "sdw %d, dmic %d", sdw_be_num, dmic_num);
398401

399-
codec_conf = devm_kcalloc(dev, num_devs, sizeof(*codec_conf), GFP_KERNEL);
402+
codec_conf = devm_kcalloc(dev, num_confs, sizeof(*codec_conf), GFP_KERNEL);
400403
if (!codec_conf)
401404
return -ENOMEM;
402405

@@ -407,7 +410,7 @@ static int soc_card_dai_links_create(struct snd_soc_card *card)
407410
return -ENOMEM;
408411

409412
card->codec_conf = codec_conf;
410-
card->num_configs = num_devs;
413+
card->num_configs = num_confs;
411414
card->dai_link = dai_links;
412415
card->num_links = num_links;
413416

sound/soc/intel/boards/sof_sdw.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
12101210
struct asoc_sdw_dailink *sof_dais;
12111211
int num_devs = 0;
12121212
int num_ends = 0;
1213+
int num_confs;
12131214
struct snd_soc_dai_link *dai_links;
12141215
int num_links;
12151216
int be_id = 0;
@@ -1223,6 +1224,8 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
12231224
return ret;
12241225
}
12251226

1227+
num_confs = num_ends;
1228+
12261229
/*
12271230
* One per DAI link, worst case is a DAI link for every endpoint, also
12281231
* add one additional to act as a terminator such that code can iterate
@@ -1239,7 +1242,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
12391242
goto err_dai;
12401243
}
12411244

1242-
ret = asoc_sdw_parse_sdw_endpoints(card, sof_dais, sof_ends, &num_devs);
1245+
ret = asoc_sdw_parse_sdw_endpoints(card, sof_dais, sof_ends, &num_confs);
12431246
if (ret < 0)
12441247
goto err_end;
12451248

@@ -1287,7 +1290,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
12871290
sdw_be_num, ssp_num, dmic_num,
12881291
intel_ctx->hdmi.idisp_codec ? hdmi_num : 0, bt_num);
12891292

1290-
codec_conf = devm_kcalloc(dev, num_devs, sizeof(*codec_conf), GFP_KERNEL);
1293+
codec_conf = devm_kcalloc(dev, num_confs, sizeof(*codec_conf), GFP_KERNEL);
12911294
if (!codec_conf) {
12921295
ret = -ENOMEM;
12931296
goto err_end;
@@ -1302,7 +1305,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
13021305
}
13031306

13041307
card->codec_conf = codec_conf;
1305-
card->num_configs = num_devs;
1308+
card->num_configs = num_confs;
13061309
card->dai_link = dai_links;
13071310
card->num_links = num_links;
13081311

sound/soc/sdw_utils/soc_sdw_utils.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,15 +1433,6 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
14331433

14341434
ctx->ignore_internal_dmic |= codec_info->ignore_internal_dmic;
14351435

1436-
codec_name = asoc_sdw_get_codec_name(dev, codec_info, adr_link, i);
1437-
if (!codec_name)
1438-
return -ENOMEM;
1439-
1440-
dev_dbg(dev, "Adding prefix %s for %s\n",
1441-
adr_dev->name_prefix, codec_name);
1442-
1443-
soc_end->name_prefix = adr_dev->name_prefix;
1444-
14451436
if (codec_info->count_sidecar && codec_info->add_sidecar) {
14461437
ret = codec_info->count_sidecar(card, &num_dais, num_devs);
14471438
if (ret)
@@ -1529,6 +1520,16 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
15291520
num_link_dailinks += !!list_empty(&soc_dai->endpoints);
15301521
list_add_tail(&soc_end->list, &soc_dai->endpoints);
15311522

1523+
codec_name = asoc_sdw_get_codec_name(dev, codec_info,
1524+
adr_link, i);
1525+
if (!codec_name)
1526+
return -ENOMEM;
1527+
1528+
dev_dbg(dev, "Adding prefix %s for %s\n",
1529+
adr_dev->name_prefix, codec_name);
1530+
1531+
soc_end->name_prefix = adr_dev->name_prefix;
1532+
15321533
soc_end->link_mask = adr_link->mask;
15331534
soc_end->codec_name = codec_name;
15341535
soc_end->codec_info = codec_info;

0 commit comments

Comments
 (0)