Skip to content

Commit 54b5042

Browse files
committed
Support for I2C port as parameter for codecs with alternative ports
1 parent 0296412 commit 54b5042

File tree

11 files changed

+57
-65
lines changed

11 files changed

+57
-65
lines changed

src/Driver.h

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,15 @@ class AudioDriver {
226226
return i2c.value().p_wire;
227227
}
228228

229+
int getI2CAddress() {
230+
if (p_pins == nullptr) return -1;
231+
auto i2c = pins().getI2CPins(PinFunction::CODEC);
232+
if (i2c) {
233+
return i2c.value().port;
234+
}
235+
return -1;
236+
}
237+
229238
virtual bool init(codec_config_t codec_cfg) { return false; }
230239
virtual bool deinit() { return false; }
231240
virtual bool controlState(codec_mode_t mode) { return false; };
@@ -287,7 +296,7 @@ class AudioDriverAC101Class : public AudioDriver {
287296

288297
protected:
289298
bool init(codec_config_t codec_cfg) {
290-
return ac101_init(&codec_cfg, getI2C()) == RESULT_OK;
299+
return ac101_init(&codec_cfg, getI2C(),getI2CAddress()) == RESULT_OK;
291300
};
292301
bool deinit() { return ac101_deinit() == RESULT_OK; }
293302
bool controlState(codec_mode_t mode) {
@@ -317,7 +326,7 @@ class AudioDriverCS43l22Class : public AudioDriver {
317326
codec_cfg = codecCfg;
318327
// manage reset pin -> acive high
319328
setPAPower(true);
320-
// Setup enable pin for codec
329+
// Setup enable pin for codec
321330
delay(100);
322331
uint32_t freq = getFrequency(codec_cfg.i2s.rate);
323332
uint16_t outputDevice = getOutput(codec_cfg.output_device);
@@ -537,6 +546,9 @@ class AudioDriverES8156Class : public AudioDriver {
537546
*/
538547
class AudioDriverES8311Class : public AudioDriver {
539548
public:
549+
AudioDriverES8311Class(int i2cAddr=0){
550+
i2c_address = i2cAddr;
551+
}
540552
bool setMute(bool mute) { return es8311_set_voice_mute(mute) == RESULT_OK; }
541553
bool setVolume(int volume) {
542554
return es8311_codec_set_voice_volume(limitValue(volume)) == RESULT_OK;
@@ -548,11 +560,18 @@ class AudioDriverES8311Class : public AudioDriver {
548560
}
549561

550562
protected:
563+
int i2c_address;
564+
551565
bool init(codec_config_t codec_cfg) {
552566
int mclk_src = pins().getPinID(PinFunction::MCLK_SOURCE);
553567
if (mclk_src == -1)
554568
return false;
555-
return es8311_codec_init(&codec_cfg, getI2C(), mclk_src) ==
569+
570+
// determine address from data
571+
if (i2c_address<=0)
572+
i2c_address = getI2CAddress();
573+
574+
return es8311_codec_init(&codec_cfg, getI2C(), mclk_src, i2c_address) ==
556575
RESULT_OK;
557576
}
558577
bool deinit() { return es8311_codec_deinit() == RESULT_OK; }
@@ -572,6 +591,9 @@ class AudioDriverES8311Class : public AudioDriver {
572591
*/
573592
class AudioDriverES8374Class : public AudioDriver {
574593
public:
594+
AudioDriverES8374Class(int i2cAddr=0){
595+
i2c_address = i2cAddr;
596+
}
575597
bool setMute(bool mute) { return es8374_set_voice_mute(mute) == RESULT_OK; }
576598
bool setVolume(int volume) {
577599
AD_LOGD("volume %d", volume);
@@ -584,9 +606,14 @@ class AudioDriverES8374Class : public AudioDriver {
584606
}
585607

586608
protected:
609+
int i2c_address;
610+
587611
bool init(codec_config_t codec_cfg) {
588612
auto codec_mode = this->codec_cfg.get_mode();
589-
return es8374_codec_init(&codec_cfg, codec_mode, getI2C()) ==
613+
if (i2c_address <= 0){
614+
i2c_address = getI2CAddress();
615+
}
616+
return es8374_codec_init(&codec_cfg, codec_mode, getI2C(), i2c_address) ==
590617
RESULT_OK;
591618
}
592619
bool deinit() { return es8374_codec_deinit() == RESULT_OK; }

src/Driver/ac101/ac101.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "ac101.h"
77

88
static i2c_bus_handle_t i2c_handle = NULL;
9+
static int i2c_addr_ac101 = AC101_ADDR;
910

1011
#define AC_ASSERT(a, format, b, ...) \
1112
if ((a) != 0) \
@@ -19,7 +20,7 @@ static error_t ac101_write_reg(uint8_t reg_add, uint16_t data){
1920
uint8_t send_buff[2];
2021
send_buff[0] = (data >> 8) & 0xff;
2122
send_buff[1] = data & 0xff;
22-
return i2c_bus_write_bytes(i2c_handle, AC101_ADDR, &reg_add, sizeof(reg_add), (uint8_t*) send_buff, sizeof(send_buff));
23+
return i2c_bus_write_bytes(i2c_handle, i2c_addr_ac101, &reg_add, sizeof(reg_add), (uint8_t*) send_buff, sizeof(send_buff));
2324
}
2425

2526
static error_t ac101_read_i2c(uint8_t devAddr, uint8_t reg_add, uint8_t *p_data, size_t size) {
@@ -31,7 +32,7 @@ static uint16_t ac101_read_reg(uint8_t reg_addr)
3132
{
3233
uint16_t val = 0;
3334
uint8_t data_rd[2];
34-
ac101_read_i2c(AC101_ADDR, reg_addr, data_rd, 2);
35+
ac101_read_i2c(i2c_addr_ac101, reg_addr, data_rd, 2);
3536
val = (data_rd[0] << 8) + data_rd[1];
3637
return val;
3738
}
@@ -97,10 +98,13 @@ uint16_t get_src_value(input_device_t input_device){
9798
return src_value;
9899
}
99100

100-
error_t ac101_init(codec_config_t *codec_cfg, i2c_bus_handle_t handle)
101+
error_t ac101_init(codec_config_t *codec_cfg, i2c_bus_handle_t handle, int addr)
101102
{
102103
error_t res = RESULT_OK;
103104
i2c_handle = handle;
105+
if (addr>0){
106+
i2c_addr_ac101 = addr;
107+
}
104108

105109
res = ac101_write_reg(CHIP_AUDIO_RS, 0x123);
106110
delay(1000);

src/Driver/ac101/ac101.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ typedef struct {
167167
} ac_i2s_clock_t;
168168

169169

170-
error_t ac101_init(codec_config_t* codec_cfg, i2c_bus_handle_t i2c_handle);
170+
error_t ac101_init(codec_config_t* codec_cfg, i2c_bus_handle_t i2c_handle, int addr);
171171
error_t ac101_deinit(void);
172172
error_t ac101_ctrl_state_active(codec_mode_t mode, bool ctrl_state_active);
173173
error_t ac101_config_i2s(codec_mode_t mode, I2SDefinition* iface);

src/Driver/es7210/es7210.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,6 @@
3535
#define FROM_PAD_PIN 0
3636
#define FROM_CLOCK_DOUBLE_PIN 1
3737

38-
// /*
39-
// * Operate function of ADC
40-
// */
41-
// func_t AUDIO_CODEC_ES7210_DEFAULT_HANDLE = {
42-
// .audio_codec_initialize = es7210_adc_init,
43-
// .audio_codec_deinitialize = es7210_adc_deinit,
44-
// .audio_codec_ctrl = es7210_adc_ctrl_state_active,
45-
// .audio_codec_config_iface = es7210_adc_config_i2s,
46-
// .audio_codec_set_mute = es7210_set_mute,
47-
// .audio_codec_set_volume = es7210_adc_set_volume,
48-
// .lock = NULL,
49-
// .handle = NULL,
50-
// };
5138

5239
/*
5340
* Clock coefficient structer

src/Driver/es7243/es7243.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,6 @@ static i2c_bus_handle_t i2c_handle;
3838
static int es7243_addr = 0x13; // 0x26>>1;
3939
static int mclk_gpio = 0;
4040

41-
// func_t AUDIO_CODEC_ES7243_DEFAULT_HANDLE = {
42-
// .audio_codec_initialize = es7243_adc_init,
43-
// .audio_codec_deinitialize = es7243_adc_deinit,
44-
// .audio_codec_ctrl = es7243_adc_ctrl_state_active,
45-
// .audio_codec_config_iface = es7243_adc_config_i2s,
46-
// .audio_codec_set_mute = es7243_adc_set_voice_mute,
47-
// .audio_codec_set_volume = es7243_adc_set_voice_volume,
48-
// .audio_codec_get_volume = es7243_adc_get_voice_volume,
49-
// .lock = NULL,
50-
// .handle = NULL,
51-
// };
52-
5341
void es7243_mclk_gpio(int gpio){
5442
mclk_gpio = gpio;
5543
}

src/Driver/es7243e/es7243e.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,6 @@
2929
static i2c_bus_handle_t i2c_handle;
3030
static int es7243e_addr = 0x10; //0x20 >> 1;
3131

32-
// func_t AUDIO_CODEC_ES7243E_DEFAULT_HANDLE = {
33-
// .audio_codec_initialize = es7243e_adc_init,
34-
// .audio_codec_deinitialize = es7243e_adc_deinit,
35-
// .audio_codec_ctrl = es7243e_adc_ctrl_state_active,
36-
// .audio_codec_config_iface = es7243e_adc_config_i2s,
37-
// .audio_codec_set_mute = NULL,
38-
// .audio_codec_set_volume = es7243e_adc_set_voice_volume,
39-
// .audio_codec_get_volume = es7243e_adc_get_voice_volume,
40-
// .lock = NULL,
41-
// .handle = NULL,
42-
// };
43-
4432
static error_t es7243e_write_reg(uint8_t reg_add, uint8_t data)
4533
{
4634
return i2c_bus_write_bytes(i2c_handle, es7243e_addr, &reg_add, sizeof(reg_add), &data, sizeof(data));

src/Driver/es8311/es8311.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
/* ES8311 address
3232
* 0x32:CE=1;0x30:CE=0
33+
* 0x32>>1 = 0x19
3334
* 0x30>>1 = 0x18
3435
*/
3536
#define ES8311_ADDR 0x18
@@ -51,6 +52,7 @@
5152
#define MCLK_DIV_FRE 256
5253

5354
static i2c_bus_handle_t i2c_handle;
55+
static int i2c_address_es8311 = ES8311_ADDR;
5456

5557
// /*
5658
// * operate function of codec
@@ -203,13 +205,13 @@ int8_t get_es8311_mclk_src(void) {
203205

204206
static error_t es8311_write_reg(uint8_t reg_addr, uint8_t data)
205207
{
206-
return i2c_bus_write_bytes(i2c_handle, ES8311_ADDR, &reg_addr, sizeof(reg_addr), &data, sizeof(data));
208+
return i2c_bus_write_bytes(i2c_handle, i2c_address_es8311, &reg_addr, sizeof(reg_addr), &data, sizeof(data));
207209
}
208210

209211
static int es8311_read_reg(uint8_t reg_addr)
210212
{
211213
uint8_t data;
212-
i2c_bus_read_bytes(i2c_handle, ES8311_ADDR, &reg_addr, sizeof(reg_addr), &data, sizeof(data));
214+
i2c_bus_read_bytes(i2c_handle, i2c_address_es8311, &reg_addr, sizeof(reg_addr), &data, sizeof(data));
213215
return (int)data;
214216
}
215217

@@ -277,13 +279,16 @@ static void es8311_suspend(void)
277279
// }
278280
// }
279281

280-
error_t es8311_codec_init(codec_config_t *codec_cfg, i2c_bus_handle_t handle, int8_t mclk_src)
282+
error_t es8311_codec_init(codec_config_t *codec_cfg, i2c_bus_handle_t handle, int8_t mclk_src, int i2c_address)
281283
{
282284
es8311_mclk_src = mclk_src;
283285
uint8_t datmp, regv;
284286
int coeff;
285287
error_t ret = RESULT_OK;
286288
i2c_handle = handle;
289+
if (i2c_address > 0){
290+
i2c_address_es8311 = i2c_address;
291+
}
287292

288293
ret |= es8311_write_reg(ES8311_CLK_MANAGER_REG01, 0x30);
289294
ret |= es8311_write_reg(ES8311_CLK_MANAGER_REG02, 0x00);

src/Driver/es8311/es8311.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ typedef enum {
124124
* - RESULT_OK
125125
* - RESULT_FAIL
126126
*/
127-
error_t es8311_codec_init(codec_config_t *codec_cfg, i2c_bus_handle_t handle, int8_t mclk_src);
127+
error_t es8311_codec_init(codec_config_t *codec_cfg, i2c_bus_handle_t handle, int8_t mclk_src, int i2c_address);
128128

129129
/**
130130
* @brief Deinitialize ES8311 codec chip

src/Driver/es8374/es8374.c

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,7 @@
3535

3636
static int codec_init_flag = 0;
3737
static i2c_bus_handle_t i2c_handle;
38-
39-
// func_t AUDIO_CODEC_ES8374_DEFAULT_HANDLE = {
40-
// .audio_codec_initialize = es8374_codec_init,
41-
// .audio_codec_deinitialize = es8374_codec_deinit,
42-
// .audio_codec_ctrl = es8374_codec_ctrl_state_active,
43-
// .audio_codec_config_iface = es8374_codec_config_i2s,
44-
// .audio_codec_set_mute = es8374_set_voice_mute,
45-
// .audio_codec_set_volume = es8374_codec_set_voice_volume,
46-
// .audio_codec_get_volume = es8374_codec_get_voice_volume,
47-
// .lock = NULL,
48-
// .handle = NULL,
49-
// };
38+
static int i2c_address_es8374 = ES8374_ADDR;
5039

5140
static bool es8374_codec_initialized()
5241
{
@@ -66,15 +55,15 @@ static error_t es_read_reg(uint8_t slave_addr, uint8_t reg_add, uint8_t *p_data)
6655

6756
error_t es8374_write_reg(uint8_t reg_add, uint8_t data)
6857
{
69-
return es_write_reg(ES8374_ADDR, reg_add, data);
58+
return es_write_reg(i2c_address_es8374, reg_add, data);
7059
}
7160

7261
int es8374_read_reg(uint8_t reg_add, uint8_t *regv)
7362
{
7463
uint8_t regdata = 0xFF;
7564
uint8_t res = 0;
7665

77-
if (es_read_reg(ES8374_ADDR, reg_add, &regdata) == 0) {
66+
if (es_read_reg(i2c_address_es8374, reg_add, &regdata) == 0) {
7867
*regv = regdata;
7968
return res;
8069
} else {
@@ -687,9 +676,12 @@ static int es8374_init_reg(codec_mode_t ms_mode, i2s_format_t fmt, es_i2s_clock_
687676
return res;
688677
}
689678

690-
error_t es8374_codec_init(codec_config_t *cfg, codec_mode_t codec_mode, void* i2c)
679+
error_t es8374_codec_init(codec_config_t *cfg, codec_mode_t codec_mode, void* i2c, int i2c_port)
691680
{
692681
i2c_handle = i2c;
682+
if (i2c_port>0){
683+
i2c_address_es8374 = i2c_port;
684+
}
693685
if (es8374_codec_initialized()) {
694686
AD_LOGW( "The es8374 codec has already been initialized!");
695687
return RESULT_FAIL;

src/Driver/es8374/es8374.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ extern "C" {
4545
* - RESULT_OK
4646
* - RESULT_FAIL
4747
*/
48-
error_t es8374_codec_init(codec_config_t *cfg, codec_mode_t codec_mode, void *i2c);
48+
error_t es8374_codec_init(codec_config_t *cfg, codec_mode_t codec_mode, void *i2c, int i2c_addr);
4949

5050
/**
5151
* @brief Deinitialize ES8374 codec chip

src/Driver/wm8960/mtb_wm8960.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ extern "C"
5050
#endif
5151

5252
#define WM8960_I2C_ADDRESS (0x1A)
53+
5354
#ifdef ARDUINO
5455
# define WM8960_LOG(msg) Serial.println(msg)
5556
#else

0 commit comments

Comments
 (0)