All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Sit, Michael Wei Hong" <michael.wei.hong.sit@intel.com>
To: "Sit, Michael Wei Hong" <michael.wei.hong.sit@intel.com>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>
Cc: "Wilson, Michael \(NW-FAM\)" <michael.wilson@ti.com>,
	"Rojewski, Cezary" <cezary.rojewski@intel.com>,
	"a-estrada@ti.com" <a-estrada@ti.com>,
	"Shevchenko, Andriy" <andriy.shevchenko@intel.com>,
	"tiwai@suse.com" <tiwai@suse.com>,
	"Sia,  Jee Heng" <jee.heng.sia@intel.com>,
	"pierre-louis.bossart@linux.intel.com"
	<pierre-louis.bossart@linux.intel.com>,
	"liam.r.girdwood@linux.intel.com"
	<liam.r.girdwood@linux.intel.com>,
	"broonie@kernel.org" <broonie@kernel.org>,
	"zakkaye@ti.com" <zakkaye@ti.com>,
	"dmurphy@ti.com" <dmurphy@ti.com>
Subject: RE: [PATCH v2 3/3] ASoC: codec: tlv3204: Moving GPIO reset and add ADC reset
Date: Tue, 18 Aug 2020 06:53:52 +0000	[thread overview]
Message-ID: <BYAPR11MB304648710FD6EEE605F6E7C39D5C0@BYAPR11MB3046.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20200812094631.4698-4-michael.wei.hong.sit@intel.com>



> -----Original Message-----
> From: Alsa-devel <alsa-devel-bounces@alsa-project.org> On Behalf
> Of Michael Sit Wei Hong
> Sent: Wednesday, 12 August, 2020 5:47 PM
> To: alsa-devel@alsa-project.org
> Cc: Rojewski, Cezary <cezary.rojewski@intel.com>; a-
> estrada@ti.com; Shevchenko, Andriy
> <andriy.shevchenko@intel.com>; zakkaye@ti.com; tiwai@suse.com;
> Sia, Jee Heng <jee.heng.sia@intel.com>; pierre-
> louis.bossart@linux.intel.com; liam.r.girdwood@linux.intel.com;
> broonie@kernel.org; dmurphy@ti.com
> Subject: [PATCH v2 3/3] ASoC: codec: tlv3204: Moving GPIO reset
> and add ADC reset
> 
> Moving GPIO reset to a later stage and before clock registration to
> ensure that the host system and codec clocks are in sync. If the host
> register clock values prior to gpio reset, the last configured codec
> clock is registered to the host. The codec then gets gpio resetted
> setting the codec clocks to their default value, causing a mismatch.
> Host system will skip clock setting thinking the codec clocks are
> already at the requested rate.
> 
> ADC reset is added to ensure the next audio capture does not have
> undesired artifacts. It is probably related to the original code where
> the probe function resets the ADC prior to 1st record.
> 
> Signed-off-by: Michael Sit Wei Hong
> <michael.wei.hong.sit@intel.com>
> Reviewed-by: Sia Jee Heng <jee.heng.sia@intel.com>
> Reviewed-by: Pierre-Louis Bossart <pierre-
> louis.bossart@linux.intel.com>
> ---
>  sound/soc/codecs/tlv320aic32x4.c | 47
> ++++++++++++++++++++++++--------
>  1 file changed, 35 insertions(+), 12 deletions(-)
> 
> diff --git a/sound/soc/codecs/tlv320aic32x4.c
> b/sound/soc/codecs/tlv320aic32x4.c
> index 6c2338ea5d8d..8dcea566b375 100644
> --- a/sound/soc/codecs/tlv320aic32x4.c
> +++ b/sound/soc/codecs/tlv320aic32x4.c
> @@ -50,6 +50,28 @@ struct aic32x4_priv {
>  	struct device *dev;
>  };
> 
> +static int aic32x4_reset_adc(struct snd_soc_dapm_widget *w,
> +			     struct snd_kcontrol *kcontrol, int event)
> {
> +	struct snd_soc_component *component =
> snd_soc_dapm_to_component(w->dapm);
> +	u32 adc_reg;
> +
> +	/*
> +	 * Workaround: the datasheet does not mention a required
> programming
> +	 * sequence but experiments show the ADC needs to be
> reset after each
> +	 * capture to avoid audible artifacts.
> +	 */
> +	switch (event) {
> +	case SND_SOC_DAPM_POST_PMD:
> +		adc_reg = snd_soc_component_read(component,
> AIC32X4_ADCSETUP);
> +		snd_soc_component_write(component,
> AIC32X4_ADCSETUP, adc_reg |
> +					AIC32X4_LADC_EN |
> AIC32X4_RADC_EN);
> +		snd_soc_component_write(component,
> AIC32X4_ADCSETUP, adc_reg);
> +		break;
> +	}
> +	return 0;
> +};
> +
>  static int mic_bias_event(struct snd_soc_dapm_widget *w,
>  	struct snd_kcontrol *kcontrol, int event)  { @@ -434,6
> +456,7 @@ static const struct snd_soc_dapm_widget
> aic32x4_dapm_widgets[] = {
>  	SND_SOC_DAPM_SUPPLY("Mic Bias", AIC32X4_MICBIAS, 6,
> 0, mic_bias_event,
>  			SND_SOC_DAPM_POST_PMU |
> SND_SOC_DAPM_PRE_PMD),
> 
> +	SND_SOC_DAPM_POST("ADC Reset", aic32x4_reset_adc),
> 
>  	SND_SOC_DAPM_OUTPUT("HPL"),
>  	SND_SOC_DAPM_OUTPUT("HPR"),
> @@ -665,8 +688,8 @@ static int
> aic32x4_set_processing_blocks(struct snd_soc_component
> *component,  }
> 
>  static int aic32x4_setup_clocks(struct snd_soc_component
> *component,
> -			unsigned int sample_rate, unsigned int
> channel,
> -			unsigned int bit_depth)
> +				unsigned int sample_rate, unsigned
> int channel,
> +				unsigned int bit_depth)
>  {
>  	u8 aosr;
>  	u16 dosr;
> @@ -958,12 +981,6 @@ static int
> aic32x4_component_probe(struct snd_soc_component
> *component)
>  	if (ret)
>  		return ret;
> 
> -	if (gpio_is_valid(aic32x4->rstn_gpio)) {
> -		ndelay(10);
> -		gpio_set_value(aic32x4->rstn_gpio, 1);
> -		mdelay(1);
> -	}
> -
>  	snd_soc_component_write(component, AIC32X4_RESET,
> 0x01);
> 
>  	if (aic32x4->setup)
> @@ -1196,10 +1213,6 @@ int aic32x4_probe(struct device *dev,
> struct regmap *regmap)
>  		aic32x4->mclk_name = "mclk";
>  	}
> 
> -	ret = aic32x4_register_clocks(dev, aic32x4->mclk_name);
> -	if (ret)
> -		return ret;
> -
>  	if (gpio_is_valid(aic32x4->rstn_gpio)) {
>  		ret = devm_gpio_request_one(dev, aic32x4-
> >rstn_gpio,
>  				GPIOF_OUT_INIT_LOW,
> "tlv320aic32x4 rstn"); @@ -1221,6 +1234,16 @@ int
> aic32x4_probe(struct device *dev, struct regmap *regmap)
>  		return ret;
>  	}
> 
> +	if (gpio_is_valid(aic32x4->rstn_gpio)) {
> +		ndelay(10);
> +		gpio_set_value_cansleep(aic32x4->rstn_gpio, 1);
> +		mdelay(1);
> +	}
> +
> +	ret = aic32x4_register_clocks(dev, aic32x4->mclk_name);
> +	if (ret)
> +		return ret;
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL(aic32x4_probe);
> --
> 2.17.1

Hi everyone,

Any comments on this patch set?

Thanks,
Regards,
Michael




  reply	other threads:[~2020-08-18  6:55 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-12  9:46 [PATCH v2 0/3] Codec workaround Michael Sit Wei Hong
2020-08-12  9:46 ` [PATCH v2 1/3] ASoC: codec: tlv3204: Enable 24 bit audio support Michael Sit Wei Hong
2020-08-12  9:46 ` [PATCH v2 2/3] ASoC: codec: tlv3204: Increased maximum supported channels Michael Sit Wei Hong
2020-08-12  9:46 ` [PATCH v2 3/3] ASoC: codec: tlv3204: Moving GPIO reset and add ADC reset Michael Sit Wei Hong
2020-08-18  6:53   ` Sit, Michael Wei Hong [this message]
2020-08-18 16:55 ` [PATCH v2 0/3] Codec workaround Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BYAPR11MB304648710FD6EEE605F6E7C39D5C0@BYAPR11MB3046.namprd11.prod.outlook.com \
    --to=michael.wei.hong.sit@intel.com \
    --cc=a-estrada@ti.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=andriy.shevchenko@intel.com \
    --cc=broonie@kernel.org \
    --cc=cezary.rojewski@intel.com \
    --cc=dmurphy@ti.com \
    --cc=jee.heng.sia@intel.com \
    --cc=liam.r.girdwood@linux.intel.com \
    --cc=michael.wilson@ti.com \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=tiwai@suse.com \
    --cc=zakkaye@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.