[PATCH] ASoC: component: Remove misplaced prefix handling in pin control functions

Lucas tanure tanureal at opensource.cirrus.com
Wed Jul 28 10:38:55 CEST 2021


On 7/26/21 8:41 PM, Mark Brown wrote:
> When the component level pin control functions were added they for some
> no longer obvious reason handled adding prefixing of widget names. This
> meant that when the lack of prefix handling in the DAPM level pin
> operations was fixed by ae4fc532244b3bb4d (ASoC: dapm: use component
> prefix when checking widget names) the one device using the component
> level API ended up with the prefix being applied twice, causing all
> lookups to fail.
> 
> Fix this by removing the redundant prefixing from the component code,
> which has the nice side effect of also making that code much simpler.
> 
> Reported-by: Richard Fitzgerald <rf at opensource.cirrus.com>
> Signed-off-by: Mark Brown <broonie at kernel.org>
> ---
>   sound/soc/soc-component.c | 63 +++++++++++++++++----------------------
>   1 file changed, 27 insertions(+), 36 deletions(-)
> 
> diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c
> index 3a5e84e16a87..c8dfd0de30e4 100644
> --- a/sound/soc/soc-component.c
> +++ b/sound/soc/soc-component.c
> @@ -148,86 +148,75 @@ int snd_soc_component_set_bias_level(struct snd_soc_component *component,
>   	return soc_component_ret(component, ret);
>   }
>   
> -static int soc_component_pin(struct snd_soc_component *component,
> -			     const char *pin,
> -			     int (*pin_func)(struct snd_soc_dapm_context *dapm,
> -					     const char *pin))
> -{
> -	struct snd_soc_dapm_context *dapm =
> -		snd_soc_component_get_dapm(component);
> -	char *full_name;
> -	int ret;
> -
> -	if (!component->name_prefix) {
> -		ret = pin_func(dapm, pin);
> -		goto end;
> -	}
> -
> -	full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
> -	if (!full_name) {
> -		ret = -ENOMEM;
> -		goto end;
> -	}
> -
> -	ret = pin_func(dapm, full_name);
> -	kfree(full_name);
> -end:
> -	return soc_component_ret(component, ret);
> -}
> -
>   int snd_soc_component_enable_pin(struct snd_soc_component *component,
>   				 const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_enable_pin);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_enable_pin(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_enable_pin);
>   
>   int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
>   					  const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_enable_pin_unlocked);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_enable_pin_unlocked(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_enable_pin_unlocked);
>   
>   int snd_soc_component_disable_pin(struct snd_soc_component *component,
>   				  const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_disable_pin);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_disable_pin(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_disable_pin);
>   
>   int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
>   					   const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_disable_pin_unlocked);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_disable_pin_unlocked(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_disable_pin_unlocked);
>   
>   int snd_soc_component_nc_pin(struct snd_soc_component *component,
>   			     const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_nc_pin);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_nc_pin(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_nc_pin);
>   
>   int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
>   				      const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_nc_pin_unlocked);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_nc_pin_unlocked(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_nc_pin_unlocked);
>   
>   int snd_soc_component_get_pin_status(struct snd_soc_component *component,
>   				     const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_get_pin_status);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_get_pin_status(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_get_pin_status);
>   
>   int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
>   				       const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_force_enable_pin);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_force_enable_pin(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin);
>   
> @@ -235,7 +224,9 @@ int snd_soc_component_force_enable_pin_unlocked(
>   	struct snd_soc_component *component,
>   	const char *pin)
>   {
> -	return soc_component_pin(component, pin, snd_soc_dapm_force_enable_pin_unlocked);
> +	struct snd_soc_dapm_context *dapm =
> +		snd_soc_component_get_dapm(component);
> +	return snd_soc_dapm_force_enable_pin_unlocked(dapm, pin);
>   }
>   EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin_unlocked);
>   
> 
Tested-by: Lucas Tanure <tanureal at opensource.cirrus.com>


More information about the Alsa-devel mailing list