Skip to content

Commit 086d096

Browse files
committed
ASoC: sdw_utils: generate combined spk components
Merge series from Bard Liao <yung-chuan.liao@linux.intel.com>: The series adds support for combined speaker components with one "spk:" tag in the card->components string. This is a UCM request.
2 parents 51c18d4 + 0f60ecf commit 086d096

6 files changed

Lines changed: 34 additions & 32 deletions

File tree

include/sound/soc_sdw_utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ struct asoc_sdw_codec_info;
4646
struct asoc_sdw_dai_info {
4747
const bool direction[2]; /* playback & capture support */
4848
const char *dai_name;
49+
const char *component_name;
4950
const int dai_type;
5051
const int dailink[2]; /* dailink id for each direction */
5152
const struct snd_kcontrol_new *controls;

sound/soc/sdw_utils/soc_sdw_cs_amp.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include <sound/soc-dai.h>
1515
#include <sound/soc_sdw_utils.h>
1616

17-
#define CODEC_NAME_SIZE 8
1817
#define CS_AMP_CHANNELS_PER_AMP 4
1918
#define CS35L56_SPK_VOLUME_0DB 400 /* 0dB Max */
2019

@@ -38,21 +37,12 @@ EXPORT_SYMBOL_NS(asoc_sdw_cs35l56_volume_limit, "SND_SOC_SDW_UTILS");
3837

3938
int asoc_sdw_cs_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
4039
{
41-
const char *dai_name = rtd->dai_link->codecs->dai_name;
4240
struct snd_soc_card *card = rtd->card;
43-
char codec_name[CODEC_NAME_SIZE];
4441
char widget_name[16];
4542
struct snd_soc_dapm_route route = { "Speaker", NULL, widget_name };
4643
struct snd_soc_dai *codec_dai;
4744
int i, ret;
4845

49-
snprintf(codec_name, CODEC_NAME_SIZE, "%s", dai_name);
50-
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
51-
"%s spk:%s",
52-
card->components, codec_name);
53-
if (!card->components)
54-
return -ENOMEM;
55-
5646
for_each_rtd_codec_dais(rtd, i, codec_dai) {
5747
if (!strstr(codec_dai->name, "cs35l56"))
5848
continue;

sound/soc/sdw_utils/soc_sdw_maxim.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,6 @@ int asoc_sdw_maxim_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_
2828
struct snd_soc_card *card = rtd->card;
2929
int ret;
3030

31-
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
32-
"%s spk:mx%04x",
33-
card->components, maxim_part_id);
34-
if (!card->components)
35-
return -ENOMEM;
36-
37-
dev_dbg(card->dev, "soundwire maxim card components assigned : %s\n",
38-
card->components);
39-
4031
ret = snd_soc_dapm_add_routes(&card->dapm, max_98373_dapm_routes, 2);
4132
if (ret)
4233
dev_err(rtd->dev, "failed to add first SPK map: %d\n", ret);

sound/soc/sdw_utils/soc_sdw_rt_amp.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,6 @@ int asoc_sdw_rt_amp_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc
195195

196196
rt_amp_map = get_codec_name_and_route(dai, codec_name);
197197

198-
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
199-
"%s spk:%s",
200-
card->components, codec_name);
201-
if (!card->components)
202-
return -ENOMEM;
203-
204198
for_each_rtd_codec_dais(rtd, i, codec_dai) {
205199
if (strstr(codec_dai->component->name_prefix, "-1"))
206200
ret = snd_soc_dapm_add_routes(&card->dapm, rt_amp_map, 2);

sound/soc/sdw_utils/soc_sdw_rt_mf_sdca.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,6 @@ int asoc_sdw_rt_mf_sdca_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd
7373
return -EINVAL;
7474
}
7575

76-
/* Update card components */
77-
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
78-
"%s spk:%s",
79-
card->components, codec_name);
80-
if (!card->components)
81-
return -ENOMEM;
82-
8376
/* Add routes */
8477
ret = snd_soc_dapm_add_routes(&card->dapm, route_map->route_map, route_map->route_size);
8578
if (ret)

sound/soc/sdw_utils/soc_sdw_utils.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
135135
{
136136
.direction = {true, false},
137137
.dai_name = "rt712-sdca-aif2",
138+
.component_name = "rt712",
138139
.dai_type = SOC_SDW_DAI_TYPE_AMP,
139140
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
140141
.init = asoc_sdw_rt_amp_init,
@@ -275,6 +276,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
275276
{
276277
.direction = {true, false},
277278
.dai_name = "rt1320-aif1",
279+
.component_name = "rt1320",
278280
.dai_type = SOC_SDW_DAI_TYPE_AMP,
279281
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
280282
.init = asoc_sdw_rt_amp_init,
@@ -409,6 +411,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
409411
{
410412
.direction = {true, false},
411413
.dai_name = "rt722-sdca-aif2",
414+
.component_name = "rt722",
412415
.dai_type = SOC_SDW_DAI_TYPE_AMP,
413416
/* No feedback capability is provided by rt722-sdca codec driver*/
414417
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
@@ -438,6 +441,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
438441
{
439442
.direction = {true, true},
440443
.dai_name = "max98373-aif1",
444+
.component_name = "mx8373",
441445
.dai_type = SOC_SDW_DAI_TYPE_AMP,
442446
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_AMP_IN_DAI_ID},
443447
.init = asoc_sdw_maxim_init,
@@ -456,6 +460,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
456460
{
457461
.direction = {true, false},
458462
.dai_name = "max98363-aif1",
463+
.component_name = "mx8363",
459464
.dai_type = SOC_SDW_DAI_TYPE_AMP,
460465
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
461466
.init = asoc_sdw_maxim_init,
@@ -491,6 +496,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
491496
{
492497
.direction = {true, false},
493498
.dai_name = "cs35l56-sdw1",
499+
.component_name = "cs35l56",
494500
.dai_type = SOC_SDW_DAI_TYPE_AMP,
495501
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
496502
.init = asoc_sdw_cs_amp_init,
@@ -516,6 +522,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
516522
{
517523
.direction = {true, false},
518524
.dai_name = "cs35l56-sdw1",
525+
.component_name = "cs35l56",
519526
.dai_type = SOC_SDW_DAI_TYPE_AMP,
520527
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
521528
.init = asoc_sdw_cs_amp_init,
@@ -733,6 +740,7 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
733740
struct snd_soc_card *card = rtd->card;
734741
struct asoc_sdw_codec_info *codec_info;
735742
struct snd_soc_dai *dai;
743+
const char *spk_components="";
736744
int dai_index;
737745
int ret;
738746
int i;
@@ -785,7 +793,32 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
785793
if (ret)
786794
return ret;
787795
}
796+
797+
/* Generate the spk component string for card->components string */
798+
if (codec_info->dais[dai_index].dai_type == SOC_SDW_DAI_TYPE_AMP &&
799+
codec_info->dais[dai_index].component_name) {
800+
if (strlen (spk_components) == 0)
801+
spk_components =
802+
devm_kasprintf(card->dev, GFP_KERNEL, "%s",
803+
codec_info->dais[dai_index].component_name);
804+
else
805+
/* Append component name to spk_components */
806+
spk_components =
807+
devm_kasprintf(card->dev, GFP_KERNEL,
808+
"%s+%s", spk_components,
809+
codec_info->dais[dai_index].component_name);
810+
}
811+
788812
codec_info->dais[dai_index].rtd_init_done = true;
813+
814+
}
815+
816+
if (strlen (spk_components) > 0) {
817+
/* Update card components for speaker components */
818+
card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s spk:%s",
819+
card->components, spk_components);
820+
if (!card->components)
821+
return -ENOMEM;
789822
}
790823

791824
return 0;

0 commit comments

Comments
 (0)