mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
ASoC: sdw_utils: generate combined spk components string
The suggestion from UCM for 2 speaker components is using 1 "spk" tag with 2 component names. Like "spk:rt722+rt1320". The commit removes the creation of the "spk" components in each rtd_init callback and creat the string in asoc_sdw_rtd_init(). Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Shuming Fan <shumingf@realtek.com> Link: https://patch.msgid.link/20250625140430.311865-3-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
f792733e08
commit
0f60ecffbf
|
|
@ -14,7 +14,6 @@
|
||||||
#include <sound/soc-dai.h>
|
#include <sound/soc-dai.h>
|
||||||
#include <sound/soc_sdw_utils.h>
|
#include <sound/soc_sdw_utils.h>
|
||||||
|
|
||||||
#define CODEC_NAME_SIZE 8
|
|
||||||
#define CS_AMP_CHANNELS_PER_AMP 4
|
#define CS_AMP_CHANNELS_PER_AMP 4
|
||||||
#define CS35L56_SPK_VOLUME_0DB 400 /* 0dB Max */
|
#define CS35L56_SPK_VOLUME_0DB 400 /* 0dB Max */
|
||||||
|
|
||||||
|
|
@ -38,21 +37,12 @@ EXPORT_SYMBOL_NS(asoc_sdw_cs35l56_volume_limit, "SND_SOC_SDW_UTILS");
|
||||||
|
|
||||||
int asoc_sdw_cs_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
|
int asoc_sdw_cs_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
|
||||||
{
|
{
|
||||||
const char *dai_name = rtd->dai_link->codecs->dai_name;
|
|
||||||
struct snd_soc_card *card = rtd->card;
|
struct snd_soc_card *card = rtd->card;
|
||||||
char codec_name[CODEC_NAME_SIZE];
|
|
||||||
char widget_name[16];
|
char widget_name[16];
|
||||||
struct snd_soc_dapm_route route = { "Speaker", NULL, widget_name };
|
struct snd_soc_dapm_route route = { "Speaker", NULL, widget_name };
|
||||||
struct snd_soc_dai *codec_dai;
|
struct snd_soc_dai *codec_dai;
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
snprintf(codec_name, CODEC_NAME_SIZE, "%s", dai_name);
|
|
||||||
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
|
|
||||||
"%s spk:%s",
|
|
||||||
card->components, codec_name);
|
|
||||||
if (!card->components)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
for_each_rtd_codec_dais(rtd, i, codec_dai) {
|
for_each_rtd_codec_dais(rtd, i, codec_dai) {
|
||||||
if (!strstr(codec_dai->name, "cs35l56"))
|
if (!strstr(codec_dai->name, "cs35l56"))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -28,15 +28,6 @@ int asoc_sdw_maxim_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_
|
||||||
struct snd_soc_card *card = rtd->card;
|
struct snd_soc_card *card = rtd->card;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
|
|
||||||
"%s spk:mx%04x",
|
|
||||||
card->components, maxim_part_id);
|
|
||||||
if (!card->components)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
dev_dbg(card->dev, "soundwire maxim card components assigned : %s\n",
|
|
||||||
card->components);
|
|
||||||
|
|
||||||
ret = snd_soc_dapm_add_routes(&card->dapm, max_98373_dapm_routes, 2);
|
ret = snd_soc_dapm_add_routes(&card->dapm, max_98373_dapm_routes, 2);
|
||||||
if (ret)
|
if (ret)
|
||||||
dev_err(rtd->dev, "failed to add first SPK map: %d\n", ret);
|
dev_err(rtd->dev, "failed to add first SPK map: %d\n", ret);
|
||||||
|
|
|
||||||
|
|
@ -195,12 +195,6 @@ int asoc_sdw_rt_amp_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc
|
||||||
|
|
||||||
rt_amp_map = get_codec_name_and_route(dai, codec_name);
|
rt_amp_map = get_codec_name_and_route(dai, codec_name);
|
||||||
|
|
||||||
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
|
|
||||||
"%s spk:%s",
|
|
||||||
card->components, codec_name);
|
|
||||||
if (!card->components)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
for_each_rtd_codec_dais(rtd, i, codec_dai) {
|
for_each_rtd_codec_dais(rtd, i, codec_dai) {
|
||||||
if (strstr(codec_dai->component->name_prefix, "-1"))
|
if (strstr(codec_dai->component->name_prefix, "-1"))
|
||||||
ret = snd_soc_dapm_add_routes(&card->dapm, rt_amp_map, 2);
|
ret = snd_soc_dapm_add_routes(&card->dapm, rt_amp_map, 2);
|
||||||
|
|
|
||||||
|
|
@ -73,13 +73,6 @@ int asoc_sdw_rt_mf_sdca_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update card components */
|
|
||||||
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
|
|
||||||
"%s spk:%s",
|
|
||||||
card->components, codec_name);
|
|
||||||
if (!card->components)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
/* Add routes */
|
/* Add routes */
|
||||||
ret = snd_soc_dapm_add_routes(&card->dapm, route_map->route_map, route_map->route_size);
|
ret = snd_soc_dapm_add_routes(&card->dapm, route_map->route_map, route_map->route_size);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
||||||
|
|
@ -740,6 +740,7 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
struct snd_soc_card *card = rtd->card;
|
struct snd_soc_card *card = rtd->card;
|
||||||
struct asoc_sdw_codec_info *codec_info;
|
struct asoc_sdw_codec_info *codec_info;
|
||||||
struct snd_soc_dai *dai;
|
struct snd_soc_dai *dai;
|
||||||
|
const char *spk_components="";
|
||||||
int dai_index;
|
int dai_index;
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
@ -792,7 +793,32 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Generate the spk component string for card->components string */
|
||||||
|
if (codec_info->dais[dai_index].dai_type == SOC_SDW_DAI_TYPE_AMP &&
|
||||||
|
codec_info->dais[dai_index].component_name) {
|
||||||
|
if (strlen (spk_components) == 0)
|
||||||
|
spk_components =
|
||||||
|
devm_kasprintf(card->dev, GFP_KERNEL, "%s",
|
||||||
|
codec_info->dais[dai_index].component_name);
|
||||||
|
else
|
||||||
|
/* Append component name to spk_components */
|
||||||
|
spk_components =
|
||||||
|
devm_kasprintf(card->dev, GFP_KERNEL,
|
||||||
|
"%s+%s", spk_components,
|
||||||
|
codec_info->dais[dai_index].component_name);
|
||||||
|
}
|
||||||
|
|
||||||
codec_info->dais[dai_index].rtd_init_done = true;
|
codec_info->dais[dai_index].rtd_init_done = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen (spk_components) > 0) {
|
||||||
|
/* Update card components for speaker components */
|
||||||
|
card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s spk:%s",
|
||||||
|
card->components, spk_components);
|
||||||
|
if (!card->components)
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user