Skip to content

Commit

Permalink
ASoC: nau8821: Add delay control for ADC
Browse files Browse the repository at this point in the history
Merge series from Seven Lee <[email protected]>:

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.
  • Loading branch information
broonie committed Apr 22, 2024
2 parents d3f36e7 + ad8ba24 commit bd74e9c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
7 changes: 7 additions & 0 deletions Documentation/devicetree/bindings/sound/nuvoton,nau8821.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,12 @@ properties:
just limited to the left adc for design demand.
type: boolean

nuvoton,adc-delay-ms:
description: Delay (in ms) to make input path stable and avoid pop noise.
minimum: 125
maximum: 500
default: 125

'#sound-dai-cells':
const: 0

Expand Down Expand Up @@ -136,6 +142,7 @@ examples:
nuvoton,jack-eject-debounce = <0>;
nuvoton,dmic-clk-threshold = <3072000>;
nuvoton,dmic-slew-rate = <0>;
nuvoton,adc-delay-ms = <125>;
#sound-dai-cells = <0>;
};
};
19 changes: 9 additions & 10 deletions sound/soc/codecs/nau8821.c
Original file line number Diff line number Diff line change
Expand Up @@ -511,13 +511,9 @@ static int nau8821_left_adc_event(struct snd_soc_dapm_widget *w,

switch (event) {
case SND_SOC_DAPM_POST_PMU:
msleep(125);
regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
NAU8821_EN_ADCL, NAU8821_EN_ADCL);
msleep(nau8821->adc_delay);
break;
case SND_SOC_DAPM_POST_PMD:
regmap_update_bits(nau8821->regmap,
NAU8821_R01_ENA_CTRL, NAU8821_EN_ADCL, 0);
break;
default:
return -EINVAL;
Expand All @@ -535,13 +531,9 @@ static int nau8821_right_adc_event(struct snd_soc_dapm_widget *w,

switch (event) {
case SND_SOC_DAPM_POST_PMU:
msleep(125);
regmap_update_bits(nau8821->regmap, NAU8821_R01_ENA_CTRL,
NAU8821_EN_ADCR, NAU8821_EN_ADCR);
msleep(nau8821->adc_delay);
break;
case SND_SOC_DAPM_POST_PMD:
regmap_update_bits(nau8821->regmap,
NAU8821_R01_ENA_CTRL, NAU8821_EN_ADCR, 0);
break;
default:
return -EINVAL;
Expand Down Expand Up @@ -1697,6 +1689,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,
Expand Down Expand Up @@ -1742,6 +1735,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;
}
Expand Down
1 change: 1 addition & 0 deletions sound/soc/codecs/nau8821.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit bd74e9c

Please sign in to comment.