144 int i2cAddress = -1) {
147 if (i2cAddress > 0) {
199 if (rate > 4000 && rate <= 50000) {
201 }
else if (rate > 50000 && rate <= 100000) {
203 }
else if (rate > 100000 && rate <= 200000) {
211 if (rate > 4000 && rate <= 50000) {
213 }
else if (rate > 50000 && rate <= 100000) {
215 }
else if (rate > 100000 && rate <= 200000) {
221 uint8_t reg_value = 0;
222 reg_value = (uint16_t)mode << 6 | (uint16_t)mode << 4 |
223 (uint16_t)master_freq << 1 | 0;
231 uint8_t mute_reg_value;
232 if (line >= 8)
return false;
234 setBit(mute_reg_value, line, mute);
240 uint8_t reg_value = mute ? 0xFF : 0;
248 uint8_t transition_ctl;
250 setBit(transition_ctl, 3, mute);
259 for (uint8_t j = 0; j < 8; j++) {
269 if (channel > 7)
return false;
276 if (channel > 7)
return false;
284 for (uint8_t j = 0; j < 6; j++) {
292 if (channel > 5)
return false;
299 if (channel > 5)
return false;
344 return ok_adc && ok_dac;
364 if (dac >= 4)
return false;
366 setBit(power, dac, active);
385 if (adc > 3)
return false;
387 setBit(power, adc + 4, active);
412 uint8_t fmt_reg_value;
415 (uint16_t)fmt | ((uint16_t)fmt << 3) | ((uint16_t)fmt_reg_value & 0x80);
421 uint8_t transition_ctl;
423 transition_ctl = (uint16_t)softRamp | ((uint16_t)softRamp << 5) |
424 (transition_ctl & 0x9F);
430 uint8_t transition_ctl;
432 setBit(transition_ctl, 4, autoMute);
438 uint8_t invert_reg_value;
440 setBit(invert_reg_value, channel, invert);
446 uint8_t invert_reg_value = invert ? 0xFF : 0;
452 uint8_t invert_reg_value;
454 setBit(invert_reg_value, channel, invert);
460 uint8_t invert_reg_value = invert ? 0xFF : 0;
466 uint8_t control_reg_value;
468 control_reg_value = ((uint16_t)value << 2) | (control_reg_value & 0xC);
480 uint8_t control_reg_value;
490 uint8_t control_reg_value;
500 uint8_t control_reg_value;
503 setBit(control_reg_value, 6, on);
510 uint8_t control_reg_value;
511 if (adc > 3)
return false;
512 if (adc < 1)
return false;
515 setBit(control_reg_value, 5 - adc, on);
522 uint8_t control_reg_value;
525 setBit(control_reg_value, 2, on);
526 setBit(control_reg_value, 3, on);
527 setBit(control_reg_value, 4, on);
578 bool writeReg(uint8_t reg, uint8_t* value,
int len) {
579 return i2c_bus_write_bytes(
i2c,
i2c_address, ®, 1, value, len) ==
583 bool readReg(uint8_t reg, uint8_t* outdata,
int datalen = 1) {
584 return i2c_bus_read_bytes(
i2c,
i2c_address, ®, 1, outdata, datalen) ==
588 inline uint8_t
setBit(uint8_t number, uint8_t n,
bool x) {
589 return (number & ~((uint8_t)1 << n)) | ((uint8_t)x << n);
#define RESULT_OK
Definition DriverCommon.h:74
The CS42448 CODEC from Cirrus Logic provides six multi-bit ana- log-to-digital and eight multi-bit di...
Definition CS42448.h:38
uint8_t setBit(uint8_t number, uint8_t n, bool x)
Definition CS42448.h:588
int getVolumeDAC(uint8_t channel)
Definition CS42448.h:274
bool setInterrupControl(InterruptControl value)
Definition CS42448.h:465
MasterFrequency
Definition CS42448.h:108
bool setDACInvert(uint8_t channel, int invert)
Definition CS42448.h:437
static constexpr uint8_t CS42448_PDN_ADC2
Definition CS42448.h:73
bool setADCInvert(uint8_t channel, int invert)
Definition CS42448.h:451
SoftRamp
Definition CS42448.h:91
static constexpr uint8_t CS42448_ADC_DIF_TDM
Definition CS42448.h:80
bool freeze(bool freeze)
All mute and volume values are activated on unfreeze.
Definition CS42448.h:403
bool setMuteDAC(bool mute)
Definition CS42448.h:239
static constexpr uint8_t CS42448_Power_Control
Definition CS42448.h:41
bool setPowerDAC(int dac, bool active)
Power on individual DAC from 1 to 4.
Definition CS42448.h:362
static constexpr uint8_t CS42448_AIN6_Volume_Control
Definition CS42448.h:61
bool setFormat()
Set I2S format based on codec_config.
Definition CS42448.h:552
bool setADCHighPassFilterFreeze3(bool freeze)
Definition CS42448.h:489
static constexpr uint8_t CS42448_AOUT2_Volume_Control
Definition CS42448.h:48
uint8_t getChipID()
Definition CS42448.h:533
static constexpr uint8_t CS42448_ADC_FM_SLAVE
Definition CS42448.h:76
static constexpr uint8_t CS42448_Chip_ID
Definition CS42448.h:40
static constexpr uint8_t CS42448_Status
Definition CS42448.h:64
bool is_active
Definition CS42448.h:549
static constexpr uint8_t CS42448_AIN4_Volume_Control
Definition CS42448.h:59
static constexpr uint8_t CS42448_DAC_Channel_Invert
Definition CS42448.h:55
static constexpr uint8_t CS42448_AOUT4_Volume_Control
Definition CS42448.h:50
static constexpr uint8_t CS42448_Transition_Control
Definition CS42448.h:45
bool setAutoMute(bool autoMute)
Definition CS42448.h:429
static constexpr uint8_t CS42448_AIN5_Volume_Control
Definition CS42448.h:60
bool setDACDeEmphasisControl(bool on)
Definition CS42448.h:499
bool setADCHighPassFilterFreeze12(bool freeze)
Definition CS42448.h:479
static constexpr uint8_t CS42448_AOUT5_Volume_Control
Definition CS42448.h:51
static constexpr uint8_t CS42448_PDN
Definition CS42448.h:67
static constexpr uint8_t CS42448_ADC_Control_DAC_DeEmphasis
Definition CS42448.h:44
static constexpr uint8_t CS42448_PDN_DAC4
Definition CS42448.h:71
bool begin(codec_config_t codecCfg, i2c_bus_handle_t handle, int i2cAddress=-1)
Definition CS42448.h:143
static constexpr uint8_t CS42448_MUTEC_Pin_Control
Definition CS42448.h:66
bool setVolumeDAC(uint8_t vol)
Definition CS42448.h:257
uint8_t getChipRevision()
Definition CS42448.h:539
static constexpr uint8_t CS42448_ADC_DIF_I2S
Definition CS42448.h:78
bool setPowerADC(int adc, bool active)
Power on individual ADC from 1 to 3.
Definition CS42448.h:383
bool setMuteDAC(uint8_t line, bool mute)
Definition CS42448.h:230
bool setADCInvert(int invert)
Definition CS42448.h:459
bool writeReg(uint8_t reg, uint8_t *value, int len)
Definition CS42448.h:578
bool getInterruptStatus(uint8_t &status)
Definition CS42448.h:473
static constexpr uint8_t CS42448_DAC_FM_SLAVE
Definition CS42448.h:75
static constexpr uint8_t CS42448_DAC_Channel_Mute
Definition CS42448.h:46
i2c_bus_handle_t i2c
Definition CS42448.h:547
static constexpr uint8_t CS42448_DAC_DIF_TDM
Definition CS42448.h:79
static constexpr uint8_t CS42448_PDN_DAC3
Definition CS42448.h:70
static constexpr uint8_t CS42448_AOUT7_Volume_Control
Definition CS42448.h:53
FunctionalMode
Definition CS42448.h:102
static constexpr uint8_t CS42448_AOUT1_Volume_Control
Definition CS42448.h:47
bool setPower(bool active)
Device Power.
Definition CS42448.h:353
bool setPowerAll(bool active)
Power all ADC and DAC and Device.
Definition CS42448.h:348
static constexpr uint8_t CS42448_AOUT8_Volume_Control
Definition CS42448.h:54
bool setMuteADC(bool mute)
Definition CS42448.h:247
bool readReg(uint8_t reg, uint8_t *outdata, int datalen=1)
Definition CS42448.h:583
static constexpr uint8_t CS42448_AIN1_Volume_Control
Definition CS42448.h:56
bool setPowerADC(bool active)
Definition CS42448.h:392
int i2c_address
Definition CS42448.h:548
bool setFormat(CS42448::Format fmt)
Definition CS42448.h:411
static constexpr uint8_t CS42448_Status_Control
Definition CS42448.h:63
bool setMute(bool mute)
Definition CS42448.h:255
static constexpr uint8_t CS42448_PDN_ADC3
Definition CS42448.h:74
static constexpr uint8_t CS42448_AOUT3_Volume_Control
Definition CS42448.h:49
static constexpr uint8_t CS42448_AIN3_Volume_Control
Definition CS42448.h:58
bool setPowerDAC(bool active)
Definition CS42448.h:371
Format
Definition CS42448.h:82
static constexpr uint8_t CS42448_Status_Mask
Definition CS42448.h:65
static constexpr uint8_t CS42448_DAC_DIF_I2S
Definition CS42448.h:77
bool setPowerDevices(bool active)
Power only the selected devices.
Definition CS42448.h:306
bool setADCSingleEnded(bool on)
Definition CS42448.h:521
bool setDACInvert(int invert)
Definition CS42448.h:445
static constexpr uint8_t CS42448_AIN2_Volume_Control
Definition CS42448.h:57
static constexpr uint8_t CS42448_AOUT6_Volume_Control
Definition CS42448.h:52
static constexpr uint8_t CS42448_Functional_Mode
Definition CS42448.h:42
static constexpr uint8_t CS42448_PDN_ADC1
Definition CS42448.h:72
bool writeReg(uint8_t reg, uint8_t value)
Definition CS42448.h:576
bool setVolumeADC(int8_t volume)
Set volume in 0.5 dB increments. -128 .. 127 is -64dB .. 24dB; 0 = 0dB.
Definition CS42448.h:282
bool setSoftRampControl(CS42448::SoftRamp softRamp)
Definition CS42448.h:420
static constexpr uint8_t CS42448_PDN_DAC1
Definition CS42448.h:68
bool setADCSingleEnded(int adc, bool on)
Definition CS42448.h:509
codec_config_t codec_config
Definition CS42448.h:546
static constexpr uint8_t CS42448_ADC_Channel_Invert
Definition CS42448.h:62
static constexpr uint8_t CS42448_PDN_DAC2
Definition CS42448.h:69
bool setVolumeDAC(uint8_t channel, uint8_t vol)
Definition CS42448.h:268
InterruptControl
Definition CS42448.h:97
bool end()
Mute ADC and DAC and then power down.
Definition CS42448.h:174
static constexpr uint8_t CS42448_Interface_Formats
Definition CS42448.h:43
int8_t getVolumeADC(uint8_t channel)
Definition CS42448.h:297
bool setSampleRate(int rate)
Single-Speed Mode (SSM) supports input sample rates up to 50 kHz and uses a 128x oversampling ratio....
Definition CS42448.h:189
bool setVolumeADC(uint8_t channel, int8_t volume)
Definition CS42448.h:291
Namespace for audio driver components.
Definition AudioBoard.h:5
@ ADC_INPUT_ALL
Definition DriverCommon.h:175
@ ADC_INPUT_NONE
Definition DriverCommon.h:171
@ ADC_INPUT_LINE1
Definition DriverCommon.h:172
@ ADC_INPUT_LINE3
Definition DriverCommon.h:174
@ ADC_INPUT_LINE2
Definition DriverCommon.h:173
@ BIT_LENGTH_24BITS
Definition DriverCommon.h:240
@ BIT_LENGTH_16BITS
Definition DriverCommon.h:237
@ DAC_OUTPUT_LINE1
Definition DriverCommon.h:188
@ DAC_OUTPUT_ALL
Definition DriverCommon.h:190
@ DAC_OUTPUT_NONE
Definition DriverCommon.h:187
@ DAC_OUTPUT_LINE2
Definition DriverCommon.h:189
@ I2S_RIGHT
Definition DriverCommon.h:253
@ I2S_LEFT
Definition DriverCommon.h:252
@ I2S_NORMAL
Definition DriverCommon.h:251
@ MODE_MASTER
Definition DriverCommon.h:205
@ MODE_SLAVE
Definition DriverCommon.h:204
@ SIGNAL_TDM
Definition DriverCommon.h:266
void * i2c_bus_handle_t
Definition DriverCommon.h:155
i2s_format_t fmt
Definition DriverCommon.h:386
samplerate_t rate
Definition DriverCommon.h:387
i2s_master_slave_t mode
Definition DriverCommon.h:385
signal_t signal_type
Definition DriverCommon.h:390
sample_bits_t bits
Definition DriverCommon.h:388
Top-level codec configuration passed to the audio driver at init.
Definition DriverCommon.h:397
output_device_t output_device
Definition DriverCommon.h:399
I2SDefinition i2s
Definition DriverCommon.h:400
input_device_t input_device
Definition DriverCommon.h:398