Skip to content

Commit 172c2b7

Browse files
committed
Merge branch 'bugfix/fix_es8311_reinit_pop_issues' into 'master'
bugfix(esp_codec_dev): Fix es8311 pop issues when init again without close See merge request adf/esp-adf-internal!1505
2 parents 8c4a753 + 008b1eb commit 172c2b7

File tree

7 files changed

+55
-29
lines changed

7 files changed

+55
-29
lines changed

components/esp_codec_dev/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Bug Fixed
6+
7+
- Fixed es8311 pop issue when init again without close
8+
39
## v1.5.5
410

511
### Feature

components/esp_codec_dev/device/cjc8910/cjc8910.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ static int cjc8910_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
127127
if (codec == NULL || codec_cfg == NULL || codec_cfg->ctrl_if == NULL || cfg_size != sizeof(cjc8910_codec_cfg_t)) {
128128
return ESP_CODEC_DEV_INVALID_ARG;
129129
}
130+
cjc8910_pa_power(codec, PA_SETUP | PA_DISABLE);
130131
memcpy(&codec->cfg, cfg, sizeof(cjc8910_codec_cfg_t));
131132
int regv;
132133
int ret = ESP_CODEC_DEV_OK;
@@ -183,7 +184,6 @@ static int cjc8910_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
183184
if (ret != 0) {
184185
return ESP_CODEC_DEV_WRITE_FAIL;
185186
}
186-
cjc8910_pa_power(codec, PA_SETUP | PA_ENABLE);
187187
codec->is_open = true;
188188
ESP_LOGI(TAG, "Codec is opened");
189189
return ret;
@@ -311,8 +311,8 @@ static int cjc8910_enable(const audio_codec_if_t *h, bool enable)
311311
return ESP_CODEC_DEV_OK;
312312
}
313313
if (enable) {
314-
cjc8910_pa_power(codec, PA_ENABLE);
315314
cjc8910_mute_output(h, false);
315+
cjc8910_pa_power(codec, PA_ENABLE);
316316
} else {
317317
cjc8910_pa_power(codec, PA_DISABLE);
318318
cjc8910_mute_output(h, true);

components/esp_codec_dev/device/es8156/es8156.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static void es8156_pa_power(audio_codec_es8156_t *codec, es_pa_setting_t pa_sett
125125
}
126126
if (pa_setting & ES_PA_SETUP) {
127127
codec->gpio_if->setup(pa_pin, AUDIO_GPIO_DIR_OUT, AUDIO_GPIO_MODE_FLOAT);
128-
}
128+
}
129129
if (pa_setting & ES_PA_ENABLE) {
130130
codec->gpio_if->set(pa_pin, codec->pa_reverted ? false : true);
131131
}
@@ -136,11 +136,13 @@ static void es8156_pa_power(audio_codec_es8156_t *codec, es_pa_setting_t pa_sett
136136

137137
static int es8156_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
138138
{
139-
audio_codec_es8156_t *codec = (audio_codec_es8156_t *) h;
140-
es8156_codec_cfg_t *codec_cfg = (es8156_codec_cfg_t *) cfg;
139+
audio_codec_es8156_t *codec = (audio_codec_es8156_t *)h;
140+
es8156_codec_cfg_t *codec_cfg = (es8156_codec_cfg_t *)cfg;
141141
if (codec == NULL || codec_cfg == NULL || cfg_size != sizeof(es8156_codec_cfg_t) || codec_cfg->ctrl_if == NULL) {
142142
return ESP_CODEC_DEV_INVALID_ARG;
143143
}
144+
es8156_pa_power(codec, ES_PA_SETUP | ES_PA_DISABLE);
145+
144146
int ret = ESP_CODEC_DEV_OK;
145147
codec->ctrl_if = codec_cfg->ctrl_if;
146148
codec->gpio_if = codec_cfg->gpio_if;
@@ -168,20 +170,20 @@ static int es8156_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
168170
if (ret != 0) {
169171
return ESP_CODEC_DEV_WRITE_FAIL;
170172
}
171-
es8156_pa_power(codec, ES_PA_SETUP | ES_PA_ENABLE);
172173
codec->is_open = true;
173174
return ESP_CODEC_DEV_OK;
174175
}
175176

176177
static int es8156_close(const audio_codec_if_t *h)
177178
{
178-
audio_codec_es8156_t *codec = (audio_codec_es8156_t *) h;
179+
audio_codec_es8156_t *codec = (audio_codec_es8156_t *)h;
179180
if (codec == NULL) {
180181
return ESP_CODEC_DEV_INVALID_ARG;
181182
}
182183
if (codec->is_open) {
183-
es8156_stop(codec);
184+
es8156_set_mute(h, true);
184185
es8156_pa_power(codec, ES_PA_DISABLE);
186+
es8156_stop(codec);
185187
codec->is_open = false;
186188
}
187189
return ESP_CODEC_DEV_OK;
@@ -190,7 +192,7 @@ static int es8156_close(const audio_codec_if_t *h)
190192
static int es8156_enable(const audio_codec_if_t *h, bool enable)
191193
{
192194
int ret = ESP_CODEC_DEV_OK;
193-
audio_codec_es8156_t *codec = (audio_codec_es8156_t *) h;
195+
audio_codec_es8156_t *codec = (audio_codec_es8156_t *)h;
194196
if (codec == NULL) {
195197
return ESP_CODEC_DEV_INVALID_ARG;
196198
}
@@ -203,7 +205,9 @@ static int es8156_enable(const audio_codec_if_t *h, bool enable)
203205
if (enable) {
204206
ret = es8156_start(codec);
205207
es8156_pa_power(codec, ES_PA_ENABLE);
208+
es8156_set_mute(h, false);
206209
} else {
210+
es8156_set_mute(h, true);
207211
es8156_pa_power(codec, ES_PA_DISABLE);
208212
ret = es8156_stop(codec);
209213
}

components/esp_codec_dev/device/es8311/es8311.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,13 @@ static int es8311_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
550550
int regv;
551551
int ret = ESP_CODEC_DEV_OK;
552552

553+
es8311_pa_power(codec, ES_PA_SETUP | ES_PA_DISABLE);
554+
555+
ret = es8311_read_reg(codec, ES8311_SYSTEM_REG0D, &regv);
556+
if (regv != 0xFA) {
557+
ret |= es8311_write_reg(codec, ES8311_SYSTEM_REG0D, 0xFA);
558+
}
559+
553560
/* Enhance ES8311 I2C noise immunity */
554561
ret |= es8311_write_reg(codec, ES8311_GPIO_REG44, 0x08);
555562
/* Due to occasional failures during the first I2C write with the ES8311 chip, a second write is performed to ensure reliability */
@@ -612,20 +619,20 @@ static int es8311_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
612619
if (ret != 0) {
613620
return ESP_CODEC_DEV_WRITE_FAIL;
614621
}
615-
es8311_pa_power(codec, ES_PA_SETUP | ES_PA_ENABLE);
616622
codec->is_open = true;
617623
return ESP_CODEC_DEV_OK;
618624
}
619625

620626
static int es8311_close(const audio_codec_if_t *h)
621627
{
622-
audio_codec_es8311_t *codec = (audio_codec_es8311_t *) h;
628+
audio_codec_es8311_t *codec = (audio_codec_es8311_t *)h;
623629
if (codec == NULL) {
624630
return ESP_CODEC_DEV_INVALID_ARG;
625631
}
626632
if (codec->is_open) {
627-
es8311_suspend(codec);
633+
es8311_set_mute(h, true);
628634
es8311_pa_power(codec, ES_PA_DISABLE);
635+
es8311_suspend(codec);
629636
codec->is_open = false;
630637
}
631638
return ESP_CODEC_DEV_OK;
@@ -646,7 +653,7 @@ static int es8311_set_fs(const audio_codec_if_t *h, esp_codec_dev_sample_info_t
646653
static int es8311_enable(const audio_codec_if_t *h, bool enable)
647654
{
648655
int ret = ESP_CODEC_DEV_OK;
649-
audio_codec_es8311_t *codec = (audio_codec_es8311_t *) h;
656+
audio_codec_es8311_t *codec = (audio_codec_es8311_t *)h;
650657
if (codec == NULL) {
651658
return ESP_CODEC_DEV_INVALID_ARG;
652659
}
@@ -661,9 +668,11 @@ static int es8311_enable(const audio_codec_if_t *h, bool enable)
661668
ret = es8311_start(codec);
662669
if (codec_mode == ESP_CODEC_DEV_WORK_MODE_DAC || codec_mode == ESP_CODEC_DEV_WORK_MODE_BOTH) {
663670
es8311_pa_power(codec, ES_PA_ENABLE);
671+
es8311_set_mute(h, false);
664672
}
665673
} else {
666674
if (codec_mode == ESP_CODEC_DEV_WORK_MODE_DAC || codec_mode == ESP_CODEC_DEV_WORK_MODE_BOTH) {
675+
es8311_set_mute(h, true);
667676
es8311_pa_power(codec, ES_PA_DISABLE);
668677
}
669678
ret = es8311_suspend(codec);

components/esp_codec_dev/device/es8374/es8374.c

100755100644
Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,8 @@ static int es8374_i2s_config_clock(audio_codec_es8374_t *codec, es_i2s_clock_t c
322322
default:
323323
break;
324324
}
325-
ret |= es8374_write_reg(codec, 0x06, dacratio_h); // ADCFsMode,singel SPEED,RATIO=256
326-
ret |= es8374_write_reg(codec, 0x07, dacratio_l); // ADCFsMode,singel SPEED,RATIO=256
325+
ret |= es8374_write_reg(codec, 0x06, dacratio_h); // ADCFsMode, single SPEED, RATIO=256
326+
ret |= es8374_write_reg(codec, 0x07, dacratio_l); // ADCFsMode, single SPEED, RATIO=256
327327

328328
return ret;
329329
}
@@ -430,10 +430,10 @@ static int es8374_init_reg(audio_codec_es8374_t *codec, es_i2s_fmt_t fmt, es_i2s
430430

431431
ret |= es8374_i2s_config_clock(codec, cfg);
432432

433-
ret |= es8374_write_reg(codec, 0x24, 0x08); // adc set
434-
ret |= es8374_write_reg(codec, 0x36, 0x00); // dac set
435-
ret |= es8374_write_reg(codec, 0x12, 0x30); // timming set
436-
ret |= es8374_write_reg(codec, 0x13, 0x20); // timming set
433+
ret |= es8374_write_reg(codec, 0x24, 0x08); // adc set
434+
ret |= es8374_write_reg(codec, 0x36, 0x00); // dac set
435+
ret |= es8374_write_reg(codec, 0x12, 0x30); // timing set
436+
ret |= es8374_write_reg(codec, 0x13, 0x20); // timing set
437437

438438
ret |= es8374_config_fmt(codec, fmt);
439439

@@ -607,11 +607,12 @@ static void es8374_pa_power(audio_codec_es8374_t *codec, bool enable)
607607

608608
static int es8374_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
609609
{
610-
audio_codec_es8374_t *codec = (audio_codec_es8374_t *) h;
611-
es8374_codec_cfg_t *codec_cfg = (es8374_codec_cfg_t *) cfg;
610+
audio_codec_es8374_t *codec = (audio_codec_es8374_t *)h;
611+
es8374_codec_cfg_t *codec_cfg = (es8374_codec_cfg_t *)cfg;
612612
if (codec == NULL || codec_cfg == NULL || codec_cfg->ctrl_if == NULL || cfg_size != sizeof(es8374_codec_cfg_t)) {
613613
return ESP_CODEC_DEV_INVALID_ARG;
614614
}
615+
es8374_pa_power(codec, false);
615616
int ret = ESP_CODEC_DEV_OK;
616617
memcpy(&codec->cfg, codec_cfg, sizeof(es8374_codec_cfg_t));
617618
es_i2s_clock_t clkdiv;
@@ -632,14 +633,14 @@ static int es8374_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
632633

633634
static int es8374_close(const audio_codec_if_t *h)
634635
{
635-
audio_codec_es8374_t *codec = (audio_codec_es8374_t *) h;
636+
audio_codec_es8374_t *codec = (audio_codec_es8374_t *)h;
636637
if (codec == NULL) {
637638
return ESP_CODEC_DEV_INVALID_ARG;
638639
}
639640
if (codec->is_open) {
640-
es8374_stop(codec);
641-
es8374_write_reg(codec, 0x00, 0x7F); // IC Reset and STOP
642641
es8374_pa_power(codec, false);
642+
es8374_stop(codec);
643+
es8374_write_reg(codec, 0x00, 0x7F); // IC Reset and STOP
643644
codec->is_open = false;
644645
}
645646
return ESP_CODEC_DEV_OK;

components/esp_codec_dev/device/es8388/es8388.c

100755100644
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ static int es8388_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
221221
codec->pa_reverted = codec_cfg->pa_reverted;
222222
codec->codec_mode = codec_cfg->codec_mode;
223223

224+
es8388_pa_power(codec, false);
225+
224226
// 0x04 mute/0x00 unmute&ramp;
225227
res |= es8388_write_reg(codec, ES8388_DACCONTROL3, 0x04);
226228
/* Chip Control and Power Management */
@@ -236,7 +238,7 @@ static int es8388_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
236238

237239
/* dac */
238240
res |= es8388_write_reg(codec, ES8388_DACPOWER, 0xC0); // disable DAC and disable Lout/Rout/1/2
239-
res |= es8388_write_reg(codec, ES8388_CONTROL1, 0x12); // Enfr=0,Play&Record Mode,(0x17-both of mic&paly)
241+
res |= es8388_write_reg(codec, ES8388_CONTROL1, 0x12); // Enfr=0,Play&Record Mode,(0x17-both of mic&play)
240242
// res |= es8388_write_reg(codec, ES8388_CONTROL2, 0); //LPVrefBuf=0,Pdn_ana=0
241243
res |= es8388_write_reg(codec, ES8388_DACCONTROL1, 0x18); // 1a 0x18:16bit iis , 0x00:24
242244
res |= es8388_write_reg(codec, ES8388_DACCONTROL2, 0x02); // DACFsMode,SINGLE SPEED; DACFsRatio,256
@@ -265,7 +267,7 @@ static int es8388_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
265267
res |= es8388_write_reg(codec, ES8388_ADCCONTROL2, ADC_INPUT_LINPUT1_RINPUT1);
266268
res |= es8388_write_reg(codec, ES8388_ADCCONTROL3, 0x02);
267269
res |= es8388_write_reg(codec, ES8388_ADCCONTROL4, 0x0c); // 16 Bits length and I2S serial audio data format
268-
res |= es8388_write_reg(codec, ES8388_ADCCONTROL5, 0x02); // ADCFsMode,singel SPEED,RATIO=256
270+
res |= es8388_write_reg(codec, ES8388_ADCCONTROL5, 0x02); // ADCFsMode, single SPEED, RATIO=256
269271
// ALC for Microphone
270272
res |= es8388_set_adc_dac_volume(codec, ESP_CODEC_DEV_WORK_MODE_ADC, 0, 0); // 0db
271273
res |= es8388_write_reg(codec, ES8388_ADCPOWER, 0x09); // Power on ADC

components/esp_codec_dev/device/es8389/es8389.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,8 @@ static int es8389_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
443443
if (codec == NULL || codec_cfg == NULL || codec_cfg->ctrl_if == NULL || cfg_size != sizeof(es8389_codec_cfg_t)) {
444444
return ESP_CODEC_DEV_INVALID_ARG;
445445
}
446+
es8389_pa_power(codec, ES_PA_SETUP | ES_PA_DISABLE);
447+
446448
memcpy(&codec->cfg, cfg, sizeof(es8389_codec_cfg_t));
447449
if (codec->cfg.mclk_div == 0) {
448450
codec->cfg.mclk_div = MCLK_DEFAULT_DIV;
@@ -571,18 +573,18 @@ static int es8389_open(const audio_codec_if_t *h, void *cfg, int cfg_size)
571573
if (ret != 0) {
572574
return ESP_CODEC_DEV_WRITE_FAIL;
573575
}
574-
es8389_pa_power(codec, ES_PA_SETUP | ES_PA_ENABLE);
575576
codec->is_open = true;
576577
return ESP_CODEC_DEV_OK;
577578
}
578579

579580
static int es8389_close(const audio_codec_if_t *h)
580581
{
581-
audio_codec_es8389_t *codec = (audio_codec_es8389_t *) h;
582+
audio_codec_es8389_t *codec = (audio_codec_es8389_t *)h;
582583
if (codec == NULL) {
583584
return ESP_CODEC_DEV_INVALID_ARG;
584585
}
585586
if (codec->is_open) {
587+
es8389_set_mute(h, true);
586588
es8389_pa_power(codec, ES_PA_DISABLE);
587589
es8389_suspend(codec);
588590
codec->is_open = false;
@@ -611,7 +613,7 @@ static int es8389_set_fs(const audio_codec_if_t *h, esp_codec_dev_sample_info_t
611613
static int es8389_enable(const audio_codec_if_t *h, bool enable)
612614
{
613615
int ret = ESP_CODEC_DEV_OK;
614-
audio_codec_es8389_t *codec = (audio_codec_es8389_t *) h;
616+
audio_codec_es8389_t *codec = (audio_codec_es8389_t *)h;
615617
if (codec == NULL) {
616618
return ESP_CODEC_DEV_INVALID_ARG;
617619
}
@@ -624,7 +626,9 @@ static int es8389_enable(const audio_codec_if_t *h, bool enable)
624626
if (enable) {
625627
ret = es8389_start(codec);
626628
es8389_pa_power(codec, ES_PA_ENABLE);
629+
es8389_set_mute(h, false);
627630
} else {
631+
es8389_set_mute(h, true);
628632
es8389_pa_power(codec, ES_PA_DISABLE);
629633
ret = es8389_suspend(codec);
630634
}

0 commit comments

Comments
 (0)