mirror of
https://github.com/torvalds/linux
synced 2024-09-20 11:07:02 +00:00
ASoC: codecs: fix widget name comparisons
Merge series from Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>: Some codec drivers compare widget names with strcmp, ignoring the component name prefix. If prefix is used, the comparisons start failing. Add a helper to fix the issue.
This commit is contained in:
commit
cc660a4a8e
|
@ -469,6 +469,7 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card);
|
|||
|
||||
int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai);
|
||||
int snd_soc_dapm_widget_name_cmp(struct snd_soc_dapm_widget *widget, const char *s);
|
||||
|
||||
/* dapm path setup */
|
||||
int snd_soc_dapm_new_widgets(struct snd_soc_card *card);
|
||||
|
|
|
@ -1675,12 +1675,12 @@ static int wsa_macro_spk_boost_event(struct snd_soc_dapm_widget *w,
|
|||
u16 boost_path_ctl, boost_path_cfg1;
|
||||
u16 reg, reg_mix;
|
||||
|
||||
if (!strcmp(w->name, "WSA_RX INT0 CHAIN")) {
|
||||
if (!snd_soc_dapm_widget_name_cmp(w, "WSA_RX INT0 CHAIN")) {
|
||||
boost_path_ctl = CDC_WSA_BOOST0_BOOST_PATH_CTL;
|
||||
boost_path_cfg1 = CDC_WSA_RX0_RX_PATH_CFG1;
|
||||
reg = CDC_WSA_RX0_RX_PATH_CTL;
|
||||
reg_mix = CDC_WSA_RX0_RX_PATH_MIX_CTL;
|
||||
} else if (!strcmp(w->name, "WSA_RX INT1 CHAIN")) {
|
||||
} else if (!snd_soc_dapm_widget_name_cmp(w, "WSA_RX INT1 CHAIN")) {
|
||||
boost_path_ctl = CDC_WSA_BOOST1_BOOST_PATH_CTL;
|
||||
boost_path_cfg1 = CDC_WSA_RX1_RX_PATH_CFG1;
|
||||
reg = CDC_WSA_RX1_RX_PATH_CTL;
|
||||
|
|
|
@ -242,6 +242,7 @@ int snd_soc_component_notify_control(struct snd_soc_component *component,
|
|||
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
|
||||
struct snd_kcontrol *kctl;
|
||||
|
||||
/* When updating, change also snd_soc_dapm_widget_name_cmp() */
|
||||
if (component->name_prefix)
|
||||
snprintf(name, ARRAY_SIZE(name), "%s %s", component->name_prefix, ctl);
|
||||
else
|
||||
|
|
|
@ -2728,6 +2728,18 @@ int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_dapm_update_dai);
|
||||
|
||||
int snd_soc_dapm_widget_name_cmp(struct snd_soc_dapm_widget *widget, const char *s)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(widget->dapm);
|
||||
const char *wname = widget->name;
|
||||
|
||||
if (component->name_prefix)
|
||||
wname += strlen(component->name_prefix) + 1; /* plus space */
|
||||
|
||||
return strcmp(wname, s);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_dapm_widget_name_cmp);
|
||||
|
||||
/*
|
||||
* dapm_update_widget_flags() - Re-compute widget sink and source flags
|
||||
* @w: The widget for which to update the flags
|
||||
|
|
Loading…
Reference in a new issue