]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: codecs: ES8326: Adjust ANA_MICBIAS to reduce pop noise
authorZhang Yi <zhangyi@everest-semi.com>
Mon, 30 Dec 2024 03:27:52 +0000 (11:27 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 6 Jan 2025 13:08:12 +0000 (13:08 +0000)
We modify the value of ES8326_ANA_MICBIAS to reduce the pop noise

Signed-off-by: Zhang Yi <zhangyi@everest-semi.com>
Link: https://patch.msgid.link/20241230032752.108298-1-zhangyi@everest-semi.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/es8326.c

index a5603b6176889a9fff635bce3492f26eacfb8671..b06eead7e0f6f043616a35ead0b14ab27bd423ab 100644 (file)
@@ -616,7 +616,7 @@ static int es8326_mute(struct snd_soc_dai *dai, int mute, int direction)
                                        0x0F, 0x0F);
                        if (es8326->version > ES8326_VERSION_B) {
                                regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
-                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x10);
+                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x30);
                        }
                }
        } else {
@@ -631,6 +631,8 @@ static int es8326_mute(struct snd_soc_dai *dai, int mute, int direction)
                        regmap_write(es8326->regmap, ES8326_HPR_OFFSET_INI, offset_r);
                        es8326->calibrated = true;
                }
+               regmap_update_bits(es8326->regmap, ES8326_CLK_INV, 0xc0, 0x00);
+                regmap_update_bits(es8326->regmap, ES8326_CLK_MUX, 0x80, 0x00);
                if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
                        regmap_update_bits(es8326->regmap, ES8326_DAC_DSM, 0x01, 0x01);
                        usleep_range(1000, 5000);
@@ -645,7 +647,7 @@ static int es8326_mute(struct snd_soc_dai *dai, int mute, int direction)
                } else {
                        msleep(300);
                        if (es8326->version > ES8326_VERSION_B) {
-                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x50);
+                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x70);
                                regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x00);
                        }
                        regmap_update_bits(es8326->regmap,  ES8326_ADC_MUTE,
@@ -676,6 +678,10 @@ static int es8326_set_bias_level(struct snd_soc_component *codec,
                regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x00);
                regmap_update_bits(es8326->regmap,  ES8326_CLK_CTL, 0x20, 0x20);
                regmap_update_bits(es8326->regmap, ES8326_RESET, 0x02, 0x00);
+               if (es8326->version > ES8326_VERSION_B) {
+                       regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
+                       regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x30);
+               }
                break;
        case SND_SOC_BIAS_PREPARE:
                break;
@@ -683,6 +689,12 @@ static int es8326_set_bias_level(struct snd_soc_component *codec,
                regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x3b);
                regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x00);
                regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, ES8326_IO_INPUT);
+               if (es8326->version > ES8326_VERSION_B) {
+                       regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
+                       regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x10);
+               }
+               regmap_update_bits(es8326->regmap, ES8326_CLK_INV, 0xc0, 0xc0);
+               regmap_update_bits(es8326->regmap, ES8326_CLK_MUX, 0x80, 0x80);
                break;
        case SND_SOC_BIAS_OFF:
                clk_disable_unprepare(es8326->mclk);
@@ -773,7 +785,10 @@ static void es8326_jack_button_handler(struct work_struct *work)
        case 0x6f:
        case 0x4b:
                /* button volume up */
-               cur_button = SND_JACK_BTN_1;
+               if ((iface == 0x6f) && (es8326->version > ES8326_VERSION_B))
+                       cur_button = SND_JACK_BTN_0;
+               else
+                       cur_button = SND_JACK_BTN_1;
                break;
        case 0x27:
                /* button volume down */
@@ -1082,7 +1097,7 @@ static void es8326_init(struct snd_soc_component *component)
        regmap_write(es8326->regmap, ES8326_ADC2_SRC, 0x66);
        es8326_disable_micbias(es8326->component);
        if (es8326->version > ES8326_VERSION_B) {
-               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x73, 0x13);
+               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x73, 0x10);
                regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
        }