[PATCH] ASoC: rt5640: Do not manipulate pin "Platform Clock" if the "Platform Clock" is not in the DAPM

Cezary Rojewski cezary.rojewski at intel.com
Mon May 16 12:48:33 CEST 2022


On 2022-05-16 12:30 PM, Oder Chiou wrote:
> The pin "Platform Clock" was only used by the Intel Byt CR platform. In the
> others, the error log will be informed. The patch will set the flag to
> avoid the pin "Platform Clock" manipulated by the other platforms.
> 
> Signed-off-by: Oder Chiou <oder_chiou at realtek.com>
> Reported-by: Sameer Pujar <spujar at nvidia.com>

Hello,

Please shorten your commit title a bit. It exceeds the recommendations 
of cannonical format.

Hope I find some spare time within the next two days to test this change 
on HSW/BDW machines as you mention only BYT here whereas there are other 
users of rt5640 codec. My testing is not a blocker - if I'll be late, 
will send appropriate fix - hopefully won't come to that.


Below some nitpicks.

> ---
>   sound/soc/codecs/rt5640.c             | 11 +++++++++--
>   sound/soc/codecs/rt5640.h             |  2 ++
>   sound/soc/intel/boards/bytcr_rt5640.c |  2 ++
>   3 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
> index 12da2bea1a7b..69c80d80ed9d 100644
> --- a/sound/soc/codecs/rt5640.c
> +++ b/sound/soc/codecs/rt5640.c
> @@ -2094,12 +2094,14 @@ EXPORT_SYMBOL_GPL(rt5640_sel_asrc_clk_src);
>   void rt5640_enable_micbias1_for_ovcd(struct snd_soc_component *component)
>   {
>   	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);


Naming a local variable 'rt5640' is not a good idea. Conflicts with all 
the filtering. Use of 'priv' or 'data' (alone or as a suffix) is 
recommended.

>   
>   	snd_soc_dapm_mutex_lock(dapm);
>   	snd_soc_dapm_force_enable_pin_unlocked(dapm, "LDO2");
>   	snd_soc_dapm_force_enable_pin_unlocked(dapm, "MICBIAS1");
>   	/* OVCD is unreliable when used with RCCLK as sysclk-source */
> -	snd_soc_dapm_force_enable_pin_unlocked(dapm, "Platform Clock");
> +	if (rt5640->use_platform_clock)
> +		snd_soc_dapm_force_enable_pin_unlocked(dapm, "Platform Clock");
>   	snd_soc_dapm_sync_unlocked(dapm);
>   	snd_soc_dapm_mutex_unlock(dapm);
>   }
> @@ -2108,9 +2110,11 @@ EXPORT_SYMBOL_GPL(rt5640_enable_micbias1_for_ovcd);
>   void rt5640_disable_micbias1_for_ovcd(struct snd_soc_component *component)
>   {
>   	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
> +	struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
>   
>   	snd_soc_dapm_mutex_lock(dapm);
> -	snd_soc_dapm_disable_pin_unlocked(dapm, "Platform Clock");
> +	if (rt5640->use_platform_clock)
> +		snd_soc_dapm_disable_pin_unlocked(dapm, "Platform Clock");
>   	snd_soc_dapm_disable_pin_unlocked(dapm, "MICBIAS1");
>   	snd_soc_dapm_disable_pin_unlocked(dapm, "LDO2");
>   	snd_soc_dapm_sync_unlocked(dapm);
> @@ -2535,6 +2539,9 @@ static void rt5640_enable_jack_detect(struct snd_soc_component *component,
>   		rt5640->jd_gpio_irq_requested = true;
>   	}
>   
> +	if (jack_data && jack_data->use_platform_clock)
> +		rt5640->use_platform_clock = jack_data->use_platform_clock;
> +
>   	ret = request_irq(rt5640->irq, rt5640_irq,
>   			  IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
>   			  "rt5640", rt5640);
> diff --git a/sound/soc/codecs/rt5640.h b/sound/soc/codecs/rt5640.h
> index 9e49b9a0ccaa..505c93514051 100644
> --- a/sound/soc/codecs/rt5640.h
> +++ b/sound/soc/codecs/rt5640.h
> @@ -2155,11 +2155,13 @@ struct rt5640_priv {
>   	bool jd_inverted;
>   	unsigned int ovcd_th;
>   	unsigned int ovcd_sf;
> +	bool use_platform_clock;
>   };
>   
>   struct rt5640_set_jack_data {
>   	int codec_irq_override;
>   	struct gpio_desc *jd_gpio;
> +	bool use_platform_clock;
>   };


Why do we need 'use_platform_clock' twice?

>   
>   int rt5640_dmic_enable(struct snd_soc_component *component,
> diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
> index 7b948a219177..ed9fa1728722 100644
> --- a/sound/soc/intel/boards/bytcr_rt5640.c
> +++ b/sound/soc/intel/boards/bytcr_rt5640.c
> @@ -1191,12 +1191,14 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime)
>   {
>   	struct snd_soc_card *card = runtime->card;
>   	struct byt_rt5640_private *priv = snd_soc_card_get_drvdata(card);
> +	struct rt5640_set_jack_data *jack_data = &priv->jack_data;
>   	struct snd_soc_component *component = asoc_rtd_to_codec(runtime, 0)->component;
>   	const struct snd_soc_dapm_route *custom_map = NULL;
>   	int num_routes = 0;
>   	int ret;
>   
>   	card->dapm.idle_bias_off = true;
> +	jack_data->use_platform_clock = true;
>   
>   	/* Start with RC clk for jack-detect (we disable MCLK below) */
>   	if (byt_rt5640_quirk & BYT_RT5640_MCLK_EN)


More information about the Alsa-devel mailing list