ALT Linux kernel packages development
 help / color / mirror / Atom feed
From: kovalev@altlinux.org
To: devel-kernel@lists.altlinux.org
Subject: [d-kernel] [PATCH 09/33] ASoC: codecs: ES8326: Changing initialisation and broadcasting
Date: Mon, 29 Jul 2024 08:09:58 +0300
Message-ID: <20240729051022.98198-10-kovalev@altlinux.org> (raw)
In-Reply-To: <20240729051022.98198-1-kovalev@altlinux.org>

From: Zhu Ning <zhuning0077@gmail.com>

commit fc702b2c04d778d7e3a4091ebe54a86c5d0a0d96 upstream.

New chip versions require new initialisation and playback processes.
Changing the initialisation and playback process for better results.
The old chip versions are going to work well with the new sequences.
We've tested this with version_v0 and version_v3 chips
under the new sequence and they both pass.

Signed-off-by: Zhu Ning <zhuning0077@gmail.com>
Link: https://lore.kernel.org/r/20231101072702.91316-3-zhuning0077@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>
---
 sound/soc/codecs/es8326.c | 51 ++++++++++++++++++++++-----------------
 1 file changed, 29 insertions(+), 22 deletions(-)

diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c
index ce7dea5e91229a..57c55de69f1923 100755
--- a/sound/soc/codecs/es8326.c
+++ b/sound/soc/codecs/es8326.c
@@ -132,6 +132,11 @@ static const struct snd_soc_dapm_widget es8326_dapm_widgets[] = {
 	SND_SOC_DAPM_PGA("LHPMIX", ES8326_DAC2HPMIX, 7, 0, NULL, 0),
 	SND_SOC_DAPM_PGA("RHPMIX", ES8326_DAC2HPMIX, 3, 0, NULL, 0),
 
+	SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOR Supply", ES8326_HP_CAL,
+			 4, 7, 0, 0),
+	SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOL Supply", ES8326_HP_CAL,
+			 0, 7, 0, 0),
+
 	SND_SOC_DAPM_OUTPUT("HPOL"),
 	SND_SOC_DAPM_OUTPUT("HPOR"),
 };
@@ -156,6 +161,9 @@ static const struct snd_soc_dapm_route es8326_dapm_routes[] = {
 	{"LHPMIX", NULL, "Left DAC"},
 	{"RHPMIX", NULL, "Right DAC"},
 
+	{"HPOR", NULL, "HPOR Supply"},
+	{"HPOL", NULL, "HPOL Supply"},
+
 	{"HPOL", NULL, "LHPMIX"},
 	{"HPOR", NULL, "RHPMIX"},
 };
@@ -307,7 +315,6 @@ static inline int get_coeff(int mclk, int rate, int array,
 	return -EINVAL;
 }
 
-
 static int es8326_set_dai_sysclk(struct snd_soc_dai *codec_dai,
 				 int clk_id, unsigned int freq, int dir)
 {
@@ -449,8 +456,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_write(es8326->regmap, ES8326_HP_DRIVER, 0xa0);
-		regmap_write(es8326->regmap, ES8326_HP_VOL, 0x80);
+		regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa1);
+		regmap_write(es8326->regmap, ES8326_HP_VOL, 0x91);
 		regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_ON);
 		regmap_update_bits(es8326->regmap, ES8326_DAC_MUTE,
 				ES8326_MUTE_MASK, ~(ES8326_MUTE));
@@ -470,8 +477,6 @@ static int es8326_set_bias_level(struct snd_soc_component *codec,
 		if (ret)
 			return ret;
 
-		regmap_write(es8326->regmap, ES8326_RESET, 0x9f);
-		msleep(20);
 		regmap_update_bits(es8326->regmap, ES8326_DAC_DSM, 0x01, 0x00);
 		regmap_write(es8326->regmap, ES8326_INTOUT_IO, es8326->interrupt_clk);
 		regmap_write(es8326->regmap, ES8326_SDINOUT1_IO,
@@ -480,19 +485,21 @@ static int es8326_set_bias_level(struct snd_soc_component *codec,
 		regmap_write(es8326->regmap, ES8326_PGA_PDN, 0x40);
 		regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x00);
 		regmap_update_bits(es8326->regmap,  ES8326_CLK_CTL, 0x20, 0x20);
-		regmap_write(es8326->regmap, ES8326_RESET, ES8326_CSM_ON);
+
+		regmap_update_bits(es8326->regmap, ES8326_RESET,
+				ES8326_CSM_ON, ES8326_CSM_ON);
 		break;
 	case SND_SOC_BIAS_PREPARE:
 		break;
 	case SND_SOC_BIAS_STANDBY:
-		break;
-	case SND_SOC_BIAS_OFF:
-		clk_disable_unprepare(es8326->mclk);
 		regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x3b);
 		regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x00);
 		regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x00);
 		regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, ES8326_IO_INPUT);
 		break;
+	case SND_SOC_BIAS_OFF:
+		clk_disable_unprepare(es8326->mclk);
+		break;
 	}
 
 	return 0;
@@ -762,13 +769,15 @@ static int es8326_calibrate(struct snd_soc_component *component)
 		regmap_write(es8326->regmap, ES8326_CLK_DIV1, 0x01);
 		regmap_write(es8326->regmap, ES8326_CLK_DLL, 0x30);
 		regmap_write(es8326->regmap, ES8326_CLK_MUX, 0xed);
+		regmap_write(es8326->regmap, ES8326_CLK_DAC_SEL, 0x08);
 		regmap_write(es8326->regmap, ES8326_CLK_TRI, 0xc1);
 		regmap_write(es8326->regmap, ES8326_DAC_MUTE, 0x03);
 		regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7f);
-		regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x33);
+		regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x03);
 		regmap_write(es8326->regmap, ES8326_DAC2HPMIX, 0x88);
-		regmap_write(es8326->regmap, ES8326_HP_VOL, 0x80);
+		usleep_range(15000, 20000);
 		regmap_write(es8326->regmap, ES8326_HP_OFFSET_CAL, 0x8c);
+		usleep_range(15000, 20000);
 		regmap_write(es8326->regmap, ES8326_RESET, 0xc0);
 		usleep_range(15000, 20000);
 
@@ -806,27 +815,27 @@ static int es8326_resume(struct snd_soc_component *component)
 	regmap_write(es8326->regmap, ES8326_RESET, 0x1f);
 	regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x0E);
 	usleep_range(10000, 15000);
-	regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0x88);
+	regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0xe9);
+	regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0x4b);
 	/* set headphone default type and detect pin */
-	regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x81);
+	regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x83);
 	regmap_write(es8326->regmap, ES8326_CLK_RESAMPLE, 0x05);
+	regmap_write(es8326->regmap, ES8326_HP_MISC, 0x30);
 
 	/* set internal oscillator as clock source of headpone cp */
-	regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC, 0x84);
+	regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC, 0x89);
 	regmap_write(es8326->regmap, ES8326_CLK_CTL, ES8326_CLK_ON);
 	/* clock manager reset release */
 	regmap_write(es8326->regmap, ES8326_RESET, 0x17);
 	/* set headphone detection as half scan mode */
-	regmap_write(es8326->regmap, ES8326_HP_MISC, 0x08);
+	regmap_write(es8326->regmap, ES8326_HP_MISC, 0x30);
 	regmap_write(es8326->regmap, ES8326_PULLUP_CTL, 0x00);
 
 	/* enable headphone driver */
 	regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa7);
 	usleep_range(2000, 5000);
-	regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xab);
-	usleep_range(2000, 5000);
-	regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xbb);
-	usleep_range(2000, 5000);
+	regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xa3);
+	regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xb3);
 	regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa1);
 
 	regmap_write(es8326->regmap, ES8326_CLK_INV, 0x00);
@@ -840,9 +849,6 @@ static int es8326_resume(struct snd_soc_component *component)
 	/* set ADC and DAC in low power mode */
 	regmap_write(es8326->regmap, ES8326_ANA_LP, 0xf0);
 
-	/* force micbias on */
-	regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0x4f);
-	regmap_write(es8326->regmap, ES8326_SYS_BIAS, 0x08);
 	regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7F);
 	/* select vdda as micbias source */
 	regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x23);
@@ -870,6 +876,7 @@ static int es8326_resume(struct snd_soc_component *component)
 			((es8326->version == ES8326_VERSION_B) ?
 			(ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol) :
 			(ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol | 0x04)));
+	regmap_write(es8326->regmap, ES8326_HP_VOL, 0x11);
 
 	es8326->jack_remove_retry = 0;
 	es8326->hp = 0;
-- 
2.33.8



  parent reply	other threads:[~2024-07-29  5:09 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-29  5:09 [d-kernel] [PATCH c10f2/c10f1 6.1.y 0/33] ASoC: codecs: es83x6: fix support kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 01/33] ASoC: codecs: ES8316: fix build warning kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 02/33] ASoC: codecs: ES8326: Add es8326_mute function kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 03/33] ASoC: codecs: ES8326: Change Hp_detect register names kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 04/33] ASoC: codecs: ES8326: Change Volatile Reg function kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 05/33] ASoC: codecs: ES8326: Fix power-up sequence kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 06/33] ASOC: codecs: ES8326: Add calibration support for version_b kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 07/33] ASoC: codecs: ES8326: Update jact detection function kovalev
2024-07-29  5:09 ` [d-kernel] [PATCH 08/33] ASoC: codecs: ES8326: Add chip version flag kovalev
2024-07-29  5:09 ` kovalev [this message]
2024-07-29  5:09 ` [d-kernel] [PATCH 10/33] ASoC: codecs: ES8326: Changing the headset detection time kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 11/33] ASoC: codecs: ES8326: improving crosstalk performance kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 12/33] ASoC: codecs: ES8326: Improving the THD+N performance kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 13/33] ASoC: codecs: ES8326: Minimize the pop noise on headphone kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 14/33] ASoC: codecs: ES8326: fix the capture noise issue kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 15/33] ASoC: codecs: ES8326: Remove executable bit kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 16/33] ASoC: codecs: ES8326: Adding new volume kcontrols kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 17/33] ASoC: codecs: ES8326: Changing members of private structure kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 18/33] ASoC: codecs: ES8326: Reducing power consumption kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 19/33] ASoC: codecs: ES8326: Delete unused REG_SUPPLY kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 20/33] ASoC: codecs: ES8326: Solve error interruption issue kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 21/33] ASoC: codecs: ES8326: modify clock table kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 22/33] ASoC: codecs: ES8326: Solve a headphone detection issue after suspend and resume kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 23/33] ASoC: codecs: ES8326: Removing the control of ADC_SCALE kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 24/33] ASoC: codecs: ES8326: solve hp and button detect issue kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 25/33] ASoC: codecs: ES8326: Solve headphone detection issue kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 26/33] ASoC: codecs: ES8326: Slove " kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 27/33] ASoC: codecs: ES8326: Minimize the pop noise kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 28/33] ASoC: codecs: ES8326: regcache_sync error issue kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 29/33] ASoC: codecs: ES8326: suspend issue kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 30/33] ASoC: Intel: sof-essx8336 - add DMI info for Aquarius laptops kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 31/33] ASoC: Intel: sof-essx8336 - add DMI info of the Kraftway ACCORD S15T laptop kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 32/33] ASoC: Intel: sof-essx8336 - add DMI info of the ACD Smart Solutions TG819S laptop kovalev
2024-07-29  5:10 ` [d-kernel] [PATCH 33/33] ASoC: Intel: sof-essx8336: force card->name for the es8326 codec kovalev
2024-07-29  5:47 ` [d-kernel] [PATCH c10f2/c10f1 6.1.y 0/33] ASoC: codecs: es83x6: fix support Vitaly Chikunov
2024-07-30  7:48   ` Vasiliy Kovalev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240729051022.98198-10-kovalev@altlinux.org \
    --to=kovalev@altlinux.org \
    --cc=devel-kernel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux kernel packages development

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel-kernel/0 devel-kernel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel-kernel devel-kernel/ http://lore.altlinux.org/devel-kernel \
		devel-kernel@altlinux.org devel-kernel@altlinux.ru devel-kernel@altlinux.com
	public-inbox-index devel-kernel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git