Skip to content

Commit bd74e9c

Browse files
committed
ASoC: nau8821: Add delay control for ADC
Merge series from Seven Lee <wtli@nuvoton.com>: 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.
2 parents d3f36e7 + ad8ba24 commit bd74e9c

3 files changed

Lines changed: 17 additions & 10 deletions

File tree

Documentation/devicetree/bindings/sound/nuvoton,nau8821.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ properties:
103103
just limited to the left adc for design demand.
104104
type: boolean
105105

106+
nuvoton,adc-delay-ms:
107+
description: Delay (in ms) to make input path stable and avoid pop noise.
108+
minimum: 125
109+
maximum: 500
110+
default: 125
111+
106112
'#sound-dai-cells':
107113
const: 0
108114

@@ -136,6 +142,7 @@ examples:
136142
nuvoton,jack-eject-debounce = <0>;
137143
nuvoton,dmic-clk-threshold = <3072000>;
138144
nuvoton,dmic-slew-rate = <0>;
145+
nuvoton,adc-delay-ms = <125>;
139146
#sound-dai-cells = <0>;
140147
};
141148
};

sound/soc/codecs/nau8821.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -511,13 +511,9 @@ static int nau8821_left_adc_event(struct snd_soc_dapm_widget *w,
511511

512512
switch (event) {
513513
case SND_SOC_DAPM_POST_PMU:
514-
msleep(125);
515-
regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
516-
NAU8821_EN_ADCL, NAU8821_EN_ADCL);
514+
msleep(nau8821->adc_delay);
517515
break;
518516
case SND_SOC_DAPM_POST_PMD:
519-
regmap_update_bits(nau8821->regmap,
520-
NAU8821_R01_ENA_CTRL, NAU8821_EN_ADCL, 0);
521517
break;
522518
default:
523519
return -EINVAL;
@@ -535,13 +531,9 @@ static int nau8821_right_adc_event(struct snd_soc_dapm_widget *w,
535531

536532
switch (event) {
537533
case SND_SOC_DAPM_POST_PMU:
538-
msleep(125);
539-
regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
540-
NAU8821_EN_ADCR, NAU8821_EN_ADCR);
534+
msleep(nau8821->adc_delay);
541535
break;
542536
case SND_SOC_DAPM_POST_PMD:
543-
regmap_update_bits(nau8821->regmap,
544-
NAU8821_R01_ENA_CTRL, NAU8821_EN_ADCR, 0);
545537
break;
546538
default:
547539
return -EINVAL;
@@ -1697,6 +1689,7 @@ static void nau8821_print_device_properties(struct nau8821 *nau8821)
16971689
dev_dbg(dev, "dmic-clk-threshold: %d\n",
16981690
nau8821->dmic_clk_threshold);
16991691
dev_dbg(dev, "key_enable: %d\n", nau8821->key_enable);
1692+
dev_dbg(dev, "adc-delay-ms: %d\n", nau8821->adc_delay);
17001693
}
17011694

17021695
static int nau8821_read_device_properties(struct device *dev,
@@ -1742,6 +1735,12 @@ static int nau8821_read_device_properties(struct device *dev,
17421735
&nau8821->dmic_slew_rate);
17431736
if (ret)
17441737
nau8821->dmic_slew_rate = 0;
1738+
ret = device_property_read_u32(dev, "nuvoton,adc-delay-ms",
1739+
&nau8821->adc_delay);
1740+
if (ret)
1741+
nau8821->adc_delay = 125;
1742+
if (nau8821->adc_delay < 125 || nau8821->adc_delay > 500)
1743+
dev_warn(dev, "Please set the suitable delay time!\n");
17451744

17461745
return 0;
17471746
}

sound/soc/codecs/nau8821.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,7 @@ struct nau8821 {
577577
int dmic_clk_threshold;
578578
int dmic_slew_rate;
579579
int key_enable;
580+
int adc_delay;
580581
};
581582

582583
int nau8821_enable_jack_detect(struct snd_soc_component *component,

0 commit comments

Comments
 (0)