Commit bd74e9c3 authored by Mark Brown's avatar Mark Brown

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.
parents d3f36e78 ad8ba241
...@@ -103,6 +103,12 @@ properties: ...@@ -103,6 +103,12 @@ properties:
just limited to the left adc for design demand. just limited to the left adc for design demand.
type: boolean 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': '#sound-dai-cells':
const: 0 const: 0
...@@ -136,6 +142,7 @@ examples: ...@@ -136,6 +142,7 @@ examples:
nuvoton,jack-eject-debounce = <0>; nuvoton,jack-eject-debounce = <0>;
nuvoton,dmic-clk-threshold = <3072000>; nuvoton,dmic-clk-threshold = <3072000>;
nuvoton,dmic-slew-rate = <0>; nuvoton,dmic-slew-rate = <0>;
nuvoton,adc-delay-ms = <125>;
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
}; };
}; };
...@@ -511,13 +511,9 @@ static int nau8821_left_adc_event(struct snd_soc_dapm_widget *w, ...@@ -511,13 +511,9 @@ static int nau8821_left_adc_event(struct snd_soc_dapm_widget *w,
switch (event) { switch (event) {
case SND_SOC_DAPM_POST_PMU: 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; break;
case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD:
regmap_update_bits(nau8821->regmap,
NAU8821_R01_ENA_CTRL, NAU8821_EN_ADCL, 0);
break; break;
default: default:
return -EINVAL; return -EINVAL;
...@@ -535,13 +531,9 @@ static int nau8821_right_adc_event(struct snd_soc_dapm_widget *w, ...@@ -535,13 +531,9 @@ static int nau8821_right_adc_event(struct snd_soc_dapm_widget *w,
switch (event) { switch (event) {
case SND_SOC_DAPM_POST_PMU: 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; break;
case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD:
regmap_update_bits(nau8821->regmap,
NAU8821_R01_ENA_CTRL, NAU8821_EN_ADCR, 0);
break; break;
default: default:
return -EINVAL; return -EINVAL;
...@@ -1697,6 +1689,7 @@ static void nau8821_print_device_properties(struct nau8821 *nau8821) ...@@ -1697,6 +1689,7 @@ static void nau8821_print_device_properties(struct nau8821 *nau8821)
dev_dbg(dev, "dmic-clk-threshold: %d\n", dev_dbg(dev, "dmic-clk-threshold: %d\n",
nau8821->dmic_clk_threshold); nau8821->dmic_clk_threshold);
dev_dbg(dev, "key_enable: %d\n", nau8821->key_enable); 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, static int nau8821_read_device_properties(struct device *dev,
...@@ -1742,6 +1735,12 @@ static int nau8821_read_device_properties(struct device *dev, ...@@ -1742,6 +1735,12 @@ static int nau8821_read_device_properties(struct device *dev,
&nau8821->dmic_slew_rate); &nau8821->dmic_slew_rate);
if (ret) if (ret)
nau8821->dmic_slew_rate = 0; 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; return 0;
} }
......
...@@ -577,6 +577,7 @@ struct nau8821 { ...@@ -577,6 +577,7 @@ struct nau8821 {
int dmic_clk_threshold; int dmic_clk_threshold;
int dmic_slew_rate; int dmic_slew_rate;
int key_enable; int key_enable;
int adc_delay;
}; };
int nau8821_enable_jack_detect(struct snd_soc_component *component, int nau8821_enable_jack_detect(struct snd_soc_component *component,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment