Merge tag 'asoc-v6.10' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[sfrench/cifs-2.6.git] / sound / soc / codecs / nau8821.c
index 012e347e63913f27b0c05bd7da749b7657b4b8a5..de5c4db05c8f8b6a1c7f12b23e5850aae0742cba 100644 (file)
@@ -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;
@@ -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;
@@ -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,
@@ -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;
 }
@@ -1923,7 +1922,7 @@ static int nau8821_i2c_probe(struct i2c_client *i2c)
 }
 
 static const struct i2c_device_id nau8821_i2c_ids[] = {
-       { "nau8821", 0 },
+       { "nau8821" },
        { }
 };
 MODULE_DEVICE_TABLE(i2c, nau8821_i2c_ids);