Unverified Commit b1d4ac91 authored by Zhang Yi's avatar Zhang Yi Committed by Mark Brown
Browse files

ASoC: codecs: ES8326: Adjust ANA_MICBIAS to reduce pop noise



We modify the value of ES8326_ANA_MICBIAS to reduce the pop noise

Signed-off-by: default avatarZhang Yi <zhangyi@everest-semi.com>
Link: https://patch.msgid.link/20241230032752.108298-1-zhangyi@everest-semi.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 32c9c06a
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -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,6 +785,9 @@ static void es8326_jack_button_handler(struct work_struct *work)
	case 0x6f:
	case 0x4b:
		/* button volume up */
		if ((iface == 0x6f) && (es8326->version > ES8326_VERSION_B))
			cur_button = SND_JACK_BTN_0;
		else
			cur_button = SND_JACK_BTN_1;
		break;
	case 0x27:
@@ -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);
	}