[alsa-devel] [v6, 5/6] ASoC: sgtl5000: Fix of unmute outputs on probe

Alison Wang alison.wang at nxp.com
Wed Dec 11 08:59:23 CET 2019


Hi, Oleksandr,

I have a question about this patch. Could you give me some ideas? Thanks.

In this patch, snd_soc_component_update_bits is used instead of snd_soc_component_write. Although EN_HP_ZCD and EN_ADC_ZCD are enabled in ANA_CTRL register, MUTE_LO, MUTE_HP and MUTE_ADC bits are remained as the default value. It causes LO, HP and ADC are all muted after driver probe. BTW, in the original code, snd_soc_component_write is used and MUTE_LO, MUTE_HP and MUTE_ADC are all set as zero (unmute).

I saw the above phenomenon on the latest linux-next. For LO and HP are muted, no sound can be heard.


Best Regards,
Alison Wang

> Subject: [v6,5/6] ASoC: sgtl5000: Fix of unmute outputs on probe
> 
> To enable "zero cross detect" for ADC/HP, change HP_ZCD_EN/ADC_ZCD_EN
> bits only instead of writing the whole CHIP_ANA_CTRL register.
> 
> Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov at toradex.com>
> Reviewed-by: Marcel Ziswiler <marcel.ziswiler at toradex.com>
> Reviewed-by: Igor Opaniuk <igor.opaniuk at toradex.com>
> Reviewed-by: Fabio Estevam <festevam at gmail.com>
> 
> ---
> 
> Changes in v6: None
> Changes in v5: None
> Changes in v4: None
> Changes in v3: None
> Changes in v2:
> - Fix patch formatting
> 
>  sound/soc/codecs/sgtl5000.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> 
> diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index
> b65232521ea8..23f4ae2f0723 100644
> --- a/sound/soc/codecs/sgtl5000.c
> +++ b/sound/soc/codecs/sgtl5000.c
> @@ -1453,6 +1453,7 @@  static int sgtl5000_probe(struct
> snd_soc_component *component)
>  	int ret;
>  	u16 reg;
>  	struct sgtl5000_priv *sgtl5000 =
> snd_soc_component_get_drvdata(component);
> +	unsigned int zcd_mask = SGTL5000_HP_ZCD_EN |
> SGTL5000_ADC_ZCD_EN;
> 
>  	/* power up sgtl5000 */
>  	ret = sgtl5000_set_power_regs(component);
> @@ -1480,9 +1481,8 @@  static int sgtl5000_probe(struct
> snd_soc_component *component)
>  	       0x1f);
>  	snd_soc_component_write(component, SGTL5000_CHIP_PAD_STRENGTH,
> reg);
> 
> -	snd_soc_component_write(component, SGTL5000_CHIP_ANA_CTRL,
> -			SGTL5000_HP_ZCD_EN |
> -			SGTL5000_ADC_ZCD_EN);
> +	snd_soc_component_update_bits(component,
> SGTL5000_CHIP_ANA_CTRL,
> +		zcd_mask, zcd_mask);
> 
>  	snd_soc_component_update_bits(component,
> SGTL5000_CHIP_MIC_CTRL,
>  			SGTL5000_BIAS_R_MASK,
> 



More information about the Alsa-devel mailing list