16 0X0000, 0X0000, 0X0000, 0X0000, 0X0050, 0X0000, 0X0140, 0X0000, 0X0000,
17 0X0000, 0X0000, 0X00FF, 0X00FF, 0X0000, 0X0100, 0X00FF, 0X00FF, 0X0000,
18 0X012C, 0X002C, 0X002C, 0X002C, 0X002C, 0X0000, 0X0032, 0X0000, 0X0000,
19 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0038, 0X000B, 0X0032, 0X0000,
20 0X0008, 0X000C, 0X0093, 0X00E9, 0X0000, 0X0000, 0X0000, 0X0000, 0X0003,
21 0X0010, 0X0010, 0X0100, 0X0100, 0X0002, 0X0001, 0X0001, 0X0039, 0X0039,
22 0X0039, 0X0039, 0X0001, 0X0001};
50 void cfgADDA(uint8_t dacen, uint8_t adcen);
51 void cfgInput(uint8_t micen, uint8_t lineinen, uint8_t auxen);
52 void cfgOutput(uint8_t dacen, uint8_t bpsen);
53 void cfgI2S(uint8_t fmt, uint8_t len);
57 void setHPvol(uint8_t voll, uint8_t volr);
59 void set3D(uint8_t depth);
61 void setEQ1(uint8_t cfreq, uint8_t gain);
62 void setEQ2(uint8_t cfreq, uint8_t gain);
63 void setEQ3(uint8_t cfreq, uint8_t gain);
64 void setEQ4(uint8_t cfreq, uint8_t gain);
65 void setEQ5(uint8_t cfreq, uint8_t gain);
66 void setNoise(uint8_t enable, uint8_t gain);
67 void setALC(uint8_t enable, uint8_t maxgain, uint8_t mingain);
68 void setHPF(uint8_t enable);
78 uint8_t Write_Reg(uint8_t reg, uint16_t val);
79 uint16_t Read_Reg(uint8_t reg);
86inline uint8_t WM8978::Write_Reg(uint8_t reg, uint16_t val) {
87 uint8_t byte_val = val;
88 i2c_bus_write_bytes(p_wire, address, ®, 1, &byte_val, 1);
95inline uint8_t WM8978::Init(
void) {
97 res = Write_Reg(0, 0);
107 Write_Reg(43, 1 << 4);
114 Write_Reg(49, 1 << 1);
115 Write_Reg(10, 1 << 3);
116 Write_Reg(14, 1 << 3 | 1 << 8);
125inline uint16_t WM8978::Read_Reg(uint8_t reg) {
return REGVAL_TBL[reg]; }
132 regval = WM8978::Read_Reg(3);
138 Write_Reg(3, regval);
139 regval = WM8978::Read_Reg(2);
145 Write_Reg(2, regval);
154 regval = WM8978::Read_Reg(2);
159 Write_Reg(2, regval);
161 regval = WM8978::Read_Reg(44);
168 Write_Reg(44, regval);
186 if (dacen) regval |= 1 << 0;
191 Write_Reg(50, regval);
192 Write_Reg(51, regval);
200 Write_Reg(46, gain | 1 << 8);
209 regval = WM8978::Read_Reg(47);
211 Write_Reg(47, regval | gain << 4);
212 regval = WM8978::Read_Reg(48);
214 Write_Reg(48, regval | gain << 4);
223 regval = WM8978::Read_Reg(47);
225 Write_Reg(47, regval | gain << 0);
226 regval = WM8978::Read_Reg(48);
228 Write_Reg(48, regval | gain << 0);
238 Write_Reg(4, (fmt << 3) | (len << 5));
247 if (voll == 0) voll |= 1 << 6;
248 if (volr == 0) volr |= 1 << 6;
250 Write_Reg(53, volr | (1 << 8));
258 if (volx == 0) volx |= 1 << 6;
260 Write_Reg(55, volx | (1 << 8));
268 Write_Reg(41, depth);
276 regval = WM8978::Read_Reg(0X12);
281 Write_Reg(18, regval);
290 if (gain > 24) gain = 24;
292 regval = WM8978::Read_Reg(18);
294 regval |= cfreq << 5;
296 Write_Reg(18, regval);
305 if (gain > 24) gain = 24;
307 regval |= cfreq << 5;
309 Write_Reg(19, regval);
318 if (gain > 24) gain = 24;
320 regval |= cfreq << 5;
322 Write_Reg(20, regval);
331 if (gain > 24) gain = 24;
333 regval |= cfreq << 5;
335 Write_Reg(21, regval);
344 if (gain > 24) gain = 24;
346 regval |= cfreq << 5;
348 Write_Reg(22, regval);
354 if (maxgain > 7) maxgain = 7;
355 if (mingain > 7) mingain = 7;
357 regval = WM8978::Read_Reg(32);
363 regval &= ~((7 << 3) | (7 << 0));
364 regval |= (maxgain << 3) | (mingain << 0);
365 Write_Reg(32, regval);
371 if (gain > 7) gain = 7;
373 regval = WM8978::Read_Reg(35);
374 regval = (enable << 3);
376 Write_Reg(35, regval);
382 regval = WM8978::Read_Reg(14);
384 regval |= (enable << 8);
385 Write_Reg(14, regval);
388inline bool WM8978::begin() {
389 const int err = Init();
391 AD_LOGE(
"WM8978 init err: 0x%X", err);
414 this->address = address;
415 this->p_wire = p_wire;
#define AD_LOGE(...)
Definition Logger.h:15
static constexpr uint8_t EQ1_135Hz
Definition WM8978.h:29
void setEQ4(uint8_t cfreq, uint8_t gain)
Definition WM8978.h:328
WM8978()
Definition WM8978.h:47
static constexpr uint8_t EQ5_11700Hz
Definition WM8978.h:46
void setAUXgain(uint8_t gain)
Definition WM8978.h:220
void cfgADDA(uint8_t dacen, uint8_t adcen)
Definition WM8978.h:130
static constexpr uint8_t EQ1_175Hz
Definition WM8978.h:30
static constexpr uint8_t EQ3_1100Hz
Definition WM8978.h:37
static constexpr uint8_t EQ4_3200Hz
Definition WM8978.h:41
static constexpr uint8_t EQ1_80Hz
Definition WM8978.h:27
void cfgOutput(uint8_t dacen, uint8_t bpsen)
Definition WM8978.h:184
void set3D(uint8_t depth)
Definition WM8978.h:266
void cfgI2S(uint8_t fmt, uint8_t len)
Definition WM8978.h:235
static constexpr uint8_t EQ2_300Hz
Definition WM8978.h:32
static constexpr uint8_t EQ5_6900Hz
Definition WM8978.h:44
void setNoise(uint8_t enable, uint8_t gain)
Definition WM8978.h:368
static constexpr uint8_t EQ3_650Hz
Definition WM8978.h:35
void setEQ1(uint8_t cfreq, uint8_t gain)
Definition WM8978.h:287
static constexpr uint8_t EQ2_385Hz
Definition WM8978.h:33
static constexpr uint8_t EQ2_500Hz
Definition WM8978.h:34
void setEQ3(uint8_t cfreq, uint8_t gain)
Definition WM8978.h:315
static constexpr uint8_t EQ2_230Hz
Definition WM8978.h:31
~WM8978()
Definition WM8978.h:48
void setMICgain(uint8_t gain)
Definition WM8978.h:197
void setSPKvol(uint8_t volx)
Definition WM8978.h:256
static constexpr uint8_t EQ5_9000Hz
Definition WM8978.h:45
void setHPF(uint8_t enable)
Definition WM8978.h:379
static constexpr uint8_t EQ4_2400Hz
Definition WM8978.h:40
static constexpr uint8_t EQ4_1800Hz
Definition WM8978.h:39
static constexpr uint8_t EQ5_5300Hz
Definition WM8978.h:43
void setEQ2(uint8_t cfreq, uint8_t gain)
Definition WM8978.h:302
static constexpr int WM8978_ADDR
Definition WM8978.h:26
static constexpr uint8_t EQ1_105Hz
Definition WM8978.h:28
bool begin(i2c_bus_handle_t p_wire, int address)
Definition WM8978.h:413
void setLINEINgain(uint8_t gain)
Definition WM8978.h:206
static constexpr uint8_t EQ4_4100Hz
Definition WM8978.h:42
static constexpr uint8_t EQ3_850Hz
Definition WM8978.h:36
void cfgInput(uint8_t micen, uint8_t lineinen, uint8_t auxen)
Definition WM8978.h:152
void setHPvol(uint8_t voll, uint8_t volr)
Definition WM8978.h:244
static constexpr uint8_t EQ3_14000Hz
Definition WM8978.h:38
void setALC(uint8_t enable, uint8_t maxgain, uint8_t mingain)
Definition WM8978.h:351
void setEQ5(uint8_t cfreq, uint8_t gain)
Definition WM8978.h:341
void setWire(i2c_bus_handle_t wire)
Definition WM8978.h:69
void set3Ddir(uint8_t dir)
Definition WM8978.h:274
Namespace for audio driver components.
Definition AudioBoard.h:5
static uint16_t REGVAL_TBL[58]
Definition WM8978.h:15
void * i2c_bus_handle_t
Definition DriverCommon.h:155