ASoC: nau8821: Add delay control for ADC
authorSeven Lee <wtli@nuvoton.com>
Mon, 15 Apr 2024 07:06:48 +0000 (15:06 +0800)
committerMark Brown <broonie@kernel.org>
Sun, 21 Apr 2024 00:57:09 +0000 (09:57 +0900)
Change the original fixed delay to the assignment from the property.
It will make it more flexible to different platforms to avoid pop
noise at the beginning of recording.

Signed-off-by: Seven Lee <wtli@nuvoton.com>
Link: https://lore.kernel.org/r/20240415070649.3496487-3-wtli@nuvoton.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/nau8821.c
sound/soc/codecs/nau8821.h

index 012e347e63913f27b0c05bd7da749b7657b4b8a5..fec669e00a10085bccea1007dceeda8a882aa7df 100644 (file)
@@ -511,7 +511,7 @@ static int nau8821_left_adc_event(struct snd_soc_dapm_widget *w,
 
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
-               msleep(125);
+               msleep(nau8821->adc_delay);
                regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
                        NAU8821_EN_ADCL, NAU8821_EN_ADCL);
                break;
@@ -535,7 +535,7 @@ static int nau8821_right_adc_event(struct snd_soc_dapm_widget *w,
 
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
-               msleep(125);
+               msleep(nau8821->adc_delay);
                regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
                        NAU8821_EN_ADCR, NAU8821_EN_ADCR);
                break;
@@ -1697,6 +1697,7 @@ static void nau8821_print_device_properties(struct nau8821 *nau8821)
        dev_dbg(dev, "dmic-clk-threshold:       %d\n",
                nau8821->dmic_clk_threshold);
        dev_dbg(dev, "key_enable:       %d\n", nau8821->key_enable);
+       dev_dbg(dev, "adc-delay-ms:             %d\n", nau8821->adc_delay);
 }
 
 static int nau8821_read_device_properties(struct device *dev,
@@ -1742,6 +1743,12 @@ static int nau8821_read_device_properties(struct device *dev,
                &nau8821->dmic_slew_rate);
        if (ret)
                nau8821->dmic_slew_rate = 0;
+       ret = device_property_read_u32(dev, "nuvoton,adc-delay-ms",
+               &nau8821->adc_delay);
+       if (ret)
+               nau8821->adc_delay = 125;
+       if (nau8821->adc_delay < 125 || nau8821->adc_delay > 500)
+               dev_warn(dev, "Please set the suitable delay time!\n");
 
        return 0;
 }
index 62eaad130b2ec54e7923b0218a838eb792583551..f0935ffafcbecbd1ac52da3c5122a0da28d0ed2a 100644 (file)
@@ -577,6 +577,7 @@ struct nau8821 {
        int dmic_clk_threshold;
        int dmic_slew_rate;
        int key_enable;
+       int adc_delay;
 };
 
 int nau8821_enable_jack_detect(struct snd_soc_component *component,