diff options
author | Mark Brown <broonie@kernel.org> | 2021-02-10 20:10:03 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-02-10 20:10:03 +0000 |
commit | b165457c5004c9363397d2e051be6fef56f35244 (patch) | |
tree | 7fa48300fd7621c91bed411d7c8e2769769354ec | |
parent | 4fc320da5dc6d9d650e9c80b6141299606035cf1 (diff) | |
parent | 1183c350011a6f6b551c200b9206bf1808c22a4c (diff) |
Merge series "ASoC: dapm/pins: handle component prefix" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
SoundWire machine drivers make a heavy use of component prefixes to
uniquify control names. This however results in errors when looking
for widgets or pins. This patchset suggests two solutions but feedback
or suggestions on how to take the prefix into account would be
welcome.
Bard Liao (1):
ASoC: Intel: boards: max98373: get dapm from cpu_dai
Shuming Fan (1):
ASoC: dapm: use component prefix when checking widget names
sound/soc/intel/boards/sof_maxim_common.c | 5 +++--
sound/soc/soc-dapm.c | 13 ++++++++++++-
2 files changed, 15 insertions(+), 3 deletions(-)
--
2.25.1
-rw-r--r-- | sound/soc/intel/boards/sof_maxim_common.c | 5 | ||||
-rw-r--r-- | sound/soc/soc-dapm.c | 13 |
2 files changed, 15 insertions, 3 deletions
diff --git a/sound/soc/intel/boards/sof_maxim_common.c b/sound/soc/intel/boards/sof_maxim_common.c index c2a9757181fe..437d20562753 100644 --- a/sound/soc/intel/boards/sof_maxim_common.c +++ b/sound/soc/intel/boards/sof_maxim_common.c @@ -63,6 +63,7 @@ int max98373_trigger(struct snd_pcm_substream *substream, int cmd) { struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); struct snd_soc_dai *codec_dai; + struct snd_soc_dai *cpu_dai; int j; int ret = 0; @@ -70,10 +71,10 @@ int max98373_trigger(struct snd_pcm_substream *substream, int cmd) if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) return 0; + cpu_dai = asoc_rtd_to_cpu(rtd, 0); for_each_rtd_codec_dais(rtd, j, codec_dai) { - struct snd_soc_component *component = codec_dai->component; struct snd_soc_dapm_context *dapm = - snd_soc_component_get_dapm(component); + snd_soc_component_get_dapm(cpu_dai->component); char pin_name[MAX_98373_PIN_NAME]; snprintf(pin_name, ARRAY_SIZE(pin_name), "%s Spk", diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 2b75d0139e47..b005f9eadd71 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2528,9 +2528,20 @@ static struct snd_soc_dapm_widget *dapm_find_widget( { struct snd_soc_dapm_widget *w; struct snd_soc_dapm_widget *fallback = NULL; + char prefixed_pin[80]; + const char *pin_name; + const char *prefix = soc_dapm_prefix(dapm); + + if (prefix) { + snprintf(prefixed_pin, sizeof(prefixed_pin), "%s %s", + prefix, pin); + pin_name = prefixed_pin; + } else { + pin_name = pin; + } for_each_card_widgets(dapm->card, w) { - if (!strcmp(w->name, pin)) { + if (!strcmp(w->name, pin_name)) { if (w->dapm == dapm) return w; else |