37static constexpr uint8_t
makeBits(uint8_t l, uint8_t r, uint8_t v) {
38 return (uint8_t)(((v) << (r)) & ((1 << ((l) + 1)) - 1));
40static constexpr uint8_t
makeBit(uint8_t l, uint8_t v) {
41 return (uint8_t)(((v) & 0x01) << (l));
259 if (q == 16)
return 0;
260 if (q == 17)
return 1;
264 static uint8_t
PLL_P_CODE(uint8_t p) {
return (p == 8) ? 0 : p & 0x07; }
267 static uint8_t
PLL_R_CODE(uint8_t r) {
return (r==16) ? 0 : r & 0x0F; }
335 i2s_format_t fmt,
bool is_master, uint8_t channels)
override {
338 return begin(sample_rate, bits, channels, is_master);
341 bool begin(uint32_t sample_rate = 44100, uint8_t word_size = 16, uint8_t channels = 2,
bool is_master =
false, uint32_t mclk = 0) {
342 AD_LOGI(
"TLV320AIC3104 begin()");
343 AD_LOGD(
"rate:%d size:%d channels:%d master:%s mclk:%d", sample_rate, word_size, channels, is_master?
"true":
"false", mclk);
348 rc &=
configureClocks(sample_rate, word_size, channels, mclk, is_master);
357 AD_LOGI(
"TLV320AIC3104 softReset()");
363 AD_LOGI(
"TLV320AIC3104 configureDai()");
372 default:
return false;
386 bool configureClocks(uint32_t sample_rate, uint8_t word_size, uint8_t channels, uint32_t mclk,
bool is_master) {
387 AD_LOGI(
"TLV320AIC3104 configureClocks() rate:%d mclk:%d is_master:%s", sample_rate, mclk, is_master?
"true":
"false");
390 bool use_bclk = (mclk == 0);
391 uint32_t clock = use_bclk ? (sample_rate * word_size * channels) : mclk;
392 AD_LOGI(
"MCLK: %d Using %s at %dHz", mclk, use_bclk?
"BCLK":
"MCLK", clock);
395 size_t rate_count = 0;
397 const RateDivs* rate_entry =
nullptr;
398 for (
size_t i = 0; i < rate_count; i++) {
399 if (rate_table[i].rate == sample_rate) {
400 rate_entry = &rate_table[i];
404 if (rate_entry ==
nullptr) {
405 AD_LOGE(
"TLV320AIC3104::configureClocks() No rate_entry found");
410 size_t pll_count = 0;
412 const PllDivs* pll_entry =
nullptr;
413 for (
size_t i = 0; i < pll_count; i++) {
414 if (pll_table[i].clk == clock && pll_table[i].fsref == rate_entry->
fsref) {
415 pll_entry = &pll_table[i];
419 if (pll_entry ==
nullptr) {
420 AD_LOGE(
"TLV320AIC3104::configureClocks() No pll_entry found. clock:%d fSref:%d", clock, rate_entry->
fsref);
423 AD_LOGI(
"PLL Div entry found: D:%d J:%d P:%d R:%d", pll_entry->
d, pll_entry->
j, pll_entry->
p, pll_entry->
r);
429 uint8_t r8 =
makeBits(7, 6, is_master?0b11:0b00);
431 uint8_t r101 =
makeBit(0, 0b0);
432 uint8_t r102 =
makeBits(7, 6, (use_bclk)?0b10:0b00)
433 |
makeBits(5, 4, (use_bclk)?0b10:0b00)
477 AD_LOGI(
"TLV320AIC3104 configureOutput()");
533 AD_LOGI(
"TLV320AIC3104 configureInput()");
539 uint8_t left2_reg = 0xFF;
540 uint8_t right2_reg = 0xFF;
541 uint8_t pga_gain_reg = 0;
549 right1_reg = left1_reg;
560 right1_reg = left1_reg;
594 right1_reg = left1_reg;
627 uint8_t atten = (uint8_t)(-vol);
733 uint8_t updated = (old & ~mask) | (value & mask);
734 if (updated == old)
return true;
750 if (!
writeReg(reg, page))
return false;
752 uint8_t new_page = 0xFF;
766 static const PllDivs table[] = {
768 {352800, 44100, 1, 16, 16, 0},
769 {705600, 44100, 1, 16, 8, 0},
770 {1411200, 44100, 1, 16, 4, 0},
771 {2822400, 44100, 1, 1, 32, 0},
772 {5644800, 44100, 1, 1, 16, 0},
773 {11289600, 44100, 1, 1, 8, 0},
774 {12000000, 44100, 1, 1, 7, 5264},
775 {13000000, 44100, 1, 1, 6, 9474},
776 {16000000, 44100, 1, 1, 5, 6448},
777 {19200000, 44100, 1, 1, 4, 7040},
778 {19680000, 44100, 1, 1, 4, 5893},
779 {48000000, 44100, 4, 1, 7, 5264},
781 {256000, 48000, 1, 16, 24, 0},
782 {512000, 48000, 1, 16, 12, 0},
783 {768000, 48000, 1, 16, 8, 0},
784 {1024000, 48000, 1, 16, 6, 0},
785 {1536000, 48000, 1, 16, 4, 0},
786 {2048000, 48000, 1, 1, 48, 0},
787 {3072000, 48000, 1, 1, 32, 0},
788 {4096000, 48000, 1, 1, 24, 0},
789 {6144000, 48000, 1, 1, 16, 0},
790 {8192000, 48000, 1, 1, 12, 0},
791 {12000000, 48000, 1, 1, 8, 1920},
792 {12288000, 48000, 1, 1, 6, 0},
793 {13000000, 48000, 1, 1, 7, 5618},
794 {16000000, 48000, 1, 1, 6, 1440},
795 {19200000, 48000, 1, 1, 5, 1200},
796 {19680000, 48000, 1, 1, 4, 9951},
797 {48000000, 48000, 4, 1, 8, 1920},
799 count =
sizeof(table) /
sizeof(table[0]);
819 count =
sizeof(table) /
sizeof(table[0]);
823#ifdef TLV320AIC3104_DEBUG
829 uint32_t extractBits(uint32_t val, uint8_t _start, uint8_t _end) {
830 uint8_t start = (_start > _end) ? _start : _end;
831 uint8_t end = (_start < _end) ? _start : _end;
832 return ((val) & ~(0xFFFFFFFF << start+1)) >> end;
834 uint32_t extractBit(uint32_t val, uint8_t _start) {
835 return extractBits(val, _start, _start);
838 void dumpRegisters() {
839 AD_LOGI(
"Dumping Registers...");
845 for (uint8_t reg = 2; reg <= 109; reg++) {
848 AD_LOGI(
" { \"reg\": %d, \"val\": %d }%s", reg, val, reg==109?
"":
",");
853 void printPLLConfig() {
854 uint8_t pll_a, pll_b, pll_c, pll_d, pll_r, datapath, rate, clk_sel;
879 AD_LOGI(
"PLL A:%02X B:%02X C:%02X D:%02X R:%02X\r\n",
880 pll_a, pll_b, pll_c, pll_d, pll_r);
881 AD_LOGI(
"CODEC Datapath:%02X SampleRate:%02X Clock Select:%02X\r\n",
882 datapath, rate, clk_sel);
885 uint8_t P = extractBits(pll_a, 2, 0);
887 uint8_t Q = extractBits(pll_a, 6, 3);
889 uint8_t J = extractBits(pll_b, 7, 2);
890 uint16_t D = ((uint16_t)pll_c << 6) + extractBits(pll_d, 7, 2);
891 uint8_t R = extractBits(pll_r, 3, 0);
892 const char *pll_enabled = extractBit(pll_a, 7) ?
"en" :
"dis";
893 const char *fSref = extractBit(datapath, 7) ?
"44.1kHz" :
"48kHz";
894 const char *ADC_DR = extractBit(datapath, 6) ?
"en" :
"dis";
895 const char *DAC_DR = extractBit(datapath, 5) ?
"en" :
"dis";
896 uint8_t LDAC_DP = extractBits(datapath, 4, 3);
897 uint8_t RDAC_DP = extractBits(datapath, 2, 1);
898 uint8_t NADC = extractBits(rate, 7, 4);
899 uint8_t NDAC = extractBits(rate, 3, 0);
901 AD_LOGI(
"P:%d Q:%d J:%d D:%d R:%d\r\n", P, Q, J, D, R);
902 AD_LOGI(
"PLL:%sabled fS(ref):%s ADC_DR:%s DAC_DR:%s\r\n", pll_enabled, fSref, ADC_DR, DAC_DR);
903 AD_LOGI(
"LDAC_DP:%d RDAC_DP:%d NADC:%d NDAC:%d\r\n", LDAC_DP, RDAC_DP, NADC, NDAC);
#define AD_LOGD(...)
Definition Logger.h:12
#define AD_LOGI(...)
Definition Logger.h:13
#define AD_LOGE(...)
Definition Logger.h:15
Header only C++ driver for the TLV320AIC3104 audio codec.
Definition TLV320AIC3104.h:55
static constexpr RegAddr LINE1L_RADC_CTRL_ADDR
Definition TLV320AIC3104.h:89
static constexpr RegAddr RAGC_GAIN_ADDR
Definition TLV320AIC3104.h:98
static constexpr uint8_t DUAL_RATE_MODE
Definition TLV320AIC3104.h:272
static constexpr RegAddr PGAR_HPROUT_VOL_ADDR
Definition TLV320AIC3104.h:128
static constexpr RegAddr ASD_INTF_CTRLC_ADDR
Definition TLV320AIC3104.h:75
static constexpr uint8_t NCODEC_6
Definition TLV320AIC3104.h:254
bool setDevices(input_device_t input_device, output_device_t output_device) override
Stores the output device selection for use by configureOutput()
Definition TLV320AIC3104.h:702
static constexpr RegAddr RCH_ADC_HPF_N1_MSB_ADDR
Definition TLV320AIC3104.h:234
static constexpr RegAddr ADC_DIG_FILT_CTRL_ADDR
Definition TLV320AIC3104.h:163
static constexpr uint8_t NCODEC_5
Definition TLV320AIC3104.h:252
static constexpr uint8_t NCODEC_4_5
Definition TLV320AIC3104.h:251
static constexpr RegAddr LDAC_VOL_ADDR
Definition TLV320AIC3104.h:108
static constexpr RegAddr D3D_ATTEN_LSB
Definition TLV320AIC3104.h:224
static constexpr RegAddr POWER_STATUS_ADDR
Definition TLV320AIC3104.h:152
static constexpr RegAddr PLL_PROGA_ADDR
Definition TLV320AIC3104.h:68
static constexpr RegAddr RAGC_CTRLA_ADDR
Definition TLV320AIC3104.h:94
static constexpr RegAddr RT_IRQ_FLAGS_ADDR
Definition TLV320AIC3104.h:155
static constexpr RegAddr PGAL_HPROUT_VOL_ADDR
Definition TLV320AIC3104.h:125
static constexpr RegAddr RCH_DEEMP_N0_MSB_ADDR
Definition TLV320AIC3104.h:217
static constexpr uint8_t NCODEC_3
Definition TLV320AIC3104.h:248
static constexpr uint8_t ASD_WLEN_32
Definition TLV320AIC3104.h:285
static constexpr RegAddr RCH_FX_N5_LSB_ADDR
Definition TLV320AIC3104.h:208
static constexpr RegAddr PGAL_RLOPM_VOL_ADDR
Definition TLV320AIC3104.h:146
static constexpr RegAddr RCH_FX_N0_LSB_ADDR
Definition TLV320AIC3104.h:198
static constexpr RegAddr DACR1_LLOPM_VOL_ADDR
Definition TLV320AIC3104.h:143
static constexpr RegAddr RCH_DEEMP_N1_MSB_ADDR
Definition TLV320AIC3104.h:219
static constexpr RegAddr PGAL_HPRCOM_VOL_ADDR
Definition TLV320AIC3104.h:132
static constexpr uint8_t NCODEC_1
Definition TLV320AIC3104.h:244
static constexpr RegAddr RAGC_CTRLC_ADDR
Definition TLV320AIC3104.h:96
static constexpr RegAddr LCH_FX_D4_MSB_ADDR
Definition TLV320AIC3104.h:187
static constexpr RegAddr RCH_FX_D5_LSB_ADDR
Definition TLV320AIC3104.h:216
bool softReset()
Soft reset of the codec.
Definition TLV320AIC3104.h:356
static constexpr uint8_t RDAC_PWR_ON
Definition TLV320AIC3104.h:297
static constexpr RegAddr LCH_FX_D5_LSB_ADDR
Definition TLV320AIC3104.h:190
static constexpr RegAddr LCH_FX_N2_LSB_ADDR
Definition TLV320AIC3104.h:176
static constexpr RegAddr PGAL_HPLOUT_VOL_ADDR
Definition TLV320AIC3104.h:111
static constexpr RegAddr PGAR_HPRCOM_VOL_ADDR
Definition TLV320AIC3104.h:135
static constexpr RegAddr I2C_BUS_STATUS_ADDR
Definition TLV320AIC3104.h:164
static constexpr RegAddr PGAR_RLOPM_VOL_ADDR
Definition TLV320AIC3104.h:149
static constexpr RegAddr DACR1_HPLCOM_VOL_ADDR
Definition TLV320AIC3104.h:122
static constexpr RegAddr LAGC_GAIN_ADDR
Definition TLV320AIC3104.h:97
static constexpr RegAddr DACL1_HPROUT_VOL_ADDR
Definition TLV320AIC3104.h:126
static constexpr RegAddr RCH_FX_N4_MSB_ADDR
Definition TLV320AIC3104.h:205
static constexpr RegAddr LAGC_CTRLC_ADDR
Definition TLV320AIC3104.h:93
static constexpr RegAddr LINE1R_LADC_CTRL_ADDR
Definition TLV320AIC3104.h:86
static constexpr RegAddr LAGC_NGATE_DEBOUNCE_ADDR
Definition TLV320AIC3104.h:99
bool setDACMute(bool mute)
Definition TLV320AIC3104.h:651
static constexpr RegAddr LCH_FX_N1_LSB_ADDR
Definition TLV320AIC3104.h:174
static constexpr RegAddr RCH_DEEMP_D0_LSB_ADDR
Definition TLV320AIC3104.h:222
static constexpr RegAddr RCH_FX_D1_MSB_ADDR
Definition TLV320AIC3104.h:209
static constexpr RegAddr SOFT_RESET_ADDR
Definition TLV320AIC3104.h:66
bool configureInput()
Configure the microphone/line input path to the Left/Right ADC PGA at 0dB and power up the ADC channe...
Definition TLV320AIC3104.h:532
bool setMute(bool mute) override
Mutes/unmutes all outputs.
Definition TLV320AIC3104.h:699
static constexpr RegAddr LCH_ADC_HPF_N1_MSB_ADDR
Definition TLV320AIC3104.h:228
static constexpr RegAddr SHORT_DETECT_ADDR
Definition TLV320AIC3104.h:153
bool configureDai(uint8_t word_size)
Configure the digital audio interface (I2S) word size and clock direction.
Definition TLV320AIC3104.h:362
static constexpr RegAddr MIC2_LADC_CTRL_ADDR
Definition TLV320AIC3104.h:82
static constexpr RegAddr LCH_FX_N4_MSB_ADDR
Definition TLV320AIC3104.h:179
static constexpr uint8_t LDAC_PWR_ON
Definition TLV320AIC3104.h:296
static constexpr RegAddr PGAL_LLOPM_VOL_ADDR
Definition TLV320AIC3104.h:139
static constexpr RegAddr LCH_ADC_HPF_N0_MSB_ADDR
Definition TLV320AIC3104.h:226
static constexpr RegAddr RADC_VOL_ADDR
Definition TLV320AIC3104.h:81
static constexpr RegAddr STICKY_IRQ_FLAGS_ADDR
Definition TLV320AIC3104.h:154
static constexpr RegAddr LCH_FX_N2_MSB_ADDR
Definition TLV320AIC3104.h:175
static constexpr RegAddr HPLOUT_CTRL_ADDR
Definition TLV320AIC3104.h:116
static constexpr RegAddr LCH_FX_N0_MSB_ADDR
Definition TLV320AIC3104.h:171
static constexpr RegAddr DACR1_RLOPM_VOL_ADDR
Definition TLV320AIC3104.h:150
static constexpr RegAddr LCH_FX_N1_MSB_ADDR
Definition TLV320AIC3104.h:173
static constexpr RegAddr HPRCOM_CFG_ADDR
Definition TLV320AIC3104.h:103
output_device_t output_device
Output and input device selections set via setDevices(),.
Definition TLV320AIC3104.h:743
static constexpr RegAddr LCH_ADC_HPF_D1_LSB_ADDR
Definition TLV320AIC3104.h:231
static uint8_t PLL_P_CODE(uint8_t p)
PLL P register code: P=8 -> 000, P=1..7 -> value itself.
Definition TLV320AIC3104.h:264
static constexpr RegAddr PLL_PROGD_ADDR
Definition TLV320AIC3104.h:71
static constexpr RegAddr CLK_ADDR
Definition TLV320AIC3104.h:157
static constexpr RegAddr DACL1_RLOPM_VOL_ADDR
Definition TLV320AIC3104.h:147
static constexpr RegAddr LCH_FX_N3_LSB_ADDR
Definition TLV320AIC3104.h:178
static constexpr uint8_t DAC_UNMUTE
Definition TLV320AIC3104.h:291
static constexpr RegAddr RLOPM_CTRL_ADDR
Definition TLV320AIC3104.h:151
bool configureOutput()
Configure the headphone (HPLOUT/HPROUT) and/or fully differential line (LOP/M) output paths,...
Definition TLV320AIC3104.h:476
static constexpr RegAddr DACR1_HPLOUT_VOL_ADDR
Definition TLV320AIC3104.h:115
static constexpr RegAddr D3D_ATTEN_MSB
Definition TLV320AIC3104.h:223
static constexpr uint8_t NCODEC_4
Definition TLV320AIC3104.h:250
static constexpr RegAddr PLL_PROGC_ADDR
Definition TLV320AIC3104.h:70
static constexpr RegAddr LLOPM_CTRL_ADDR
Definition TLV320AIC3104.h:144
static constexpr RegAddr DACL1_HPLCOM_VOL_ADDR
Definition TLV320AIC3104.h:119
static uint8_t PLL_Q_CODE(uint8_t q)
PLL Q register code: Q=16 -> 0000, Q=17 -> 0001, Q=2..15 -> value itself.
Definition TLV320AIC3104.h:258
static constexpr RegAddr PGAR_HPLCOM_VOL_ADDR
Definition TLV320AIC3104.h:121
static constexpr int CODEC_OUTPUT_VOLUME_MIN
Definition TLV320AIC3104.h:307
uint8_t current_page
cached page, invalid initially
Definition TLV320AIC3104.h:739
static constexpr RegAddr RCH_DEEMP_N0_LSB_ADDR
Definition TLV320AIC3104.h:218
static constexpr uint8_t NCODEC_3_5
Definition TLV320AIC3104.h:249
static constexpr int CODEC_OUTPUT_VOLUME_MAX
Output volume range, in 0.5dB steps (-63.5dB .. 0dB)
Definition TLV320AIC3104.h:306
static constexpr RegAddr HPCOM_CMVOLT_ADDR
Definition TLV320AIC3104.h:105
static constexpr RegAddr DACR1_HPRCOM_VOL_ADDR
Definition TLV320AIC3104.h:136
static constexpr RegAddr RCH_FX_N4_LSB_ADDR
Definition TLV320AIC3104.h:206
bool startOutput()
Power up the DAC channels.
Definition TLV320AIC3104.h:459
static constexpr uint8_t ASD_WLEN_16
Definition TLV320AIC3104.h:282
static constexpr RegAddr CLK_GEN_ADDR
Definition TLV320AIC3104.h:158
bool configureClocks(uint32_t sample_rate, uint8_t word_size, uint8_t channels, uint32_t mclk, bool is_master)
Configure the PLL for the given MCLK/fS(ref) combination, then set the shared ADC/DAC NCODEC divider ...
Definition TLV320AIC3104.h:386
static constexpr RegAddr RCH_FX_D4_MSB_ADDR
Definition TLV320AIC3104.h:213
static constexpr uint8_t FSREF_48000
Definition TLV320AIC3104.h:271
static uint8_t ROUTE_VOL(uint8_t atten)
Definition TLV320AIC3104.h:301
static constexpr RegAddr RCH_FX_N0_MSB_ADDR
Definition TLV320AIC3104.h:197
static constexpr RegAddr PGAR_HPLOUT_VOL_ADDR
Definition TLV320AIC3104.h:114
static constexpr RegAddr ANALOG_BYPASS_CTRL_ADDR
Definition TLV320AIC3104.h:165
static constexpr RegAddr DACL1_LLOPM_VOL_ADDR
Definition TLV320AIC3104.h:140
static constexpr RegAddr RCH_FX_D5_MSB_ADDR
Definition TLV320AIC3104.h:215
static constexpr RegAddr LCH_DEEMP_N0_MSB_ADDR
Definition TLV320AIC3104.h:191
static constexpr RegAddr DIGI_FILT_CTRL_ADDR
Definition TLV320AIC3104.h:77
static constexpr RegAddr LCH_DEEMP_D0_MSB_ADDR
Definition TLV320AIC3104.h:195
bool updatePagedReg(RegAddr reg, uint8_t mask, uint8_t value)
Read-Modify-Write of a register on the given page.
Definition TLV320AIC3104.h:730
static constexpr RegAddr LCH_FX_N5_MSB_ADDR
Definition TLV320AIC3104.h:181
bool begin(uint32_t sample_rate=44100, uint8_t word_size=16, uint8_t channels=2, bool is_master=false, uint32_t mclk=0)
Definition TLV320AIC3104.h:341
static constexpr RegAddr PGAR_LLOPM_VOL_ADDR
Definition TLV320AIC3104.h:142
static constexpr RegAddr RCH_ADC_HPF_D1_LSB_ADDR
Definition TLV320AIC3104.h:237
static constexpr RegAddr RCH_DEEMP_D0_MSB_ADDR
Definition TLV320AIC3104.h:221
static constexpr RegAddr DAC_PWR_ADDR
Definition TLV320AIC3104.h:102
static constexpr uint8_t ASD_WLEN_20
Definition TLV320AIC3104.h:283
static constexpr RegAddr RCH_FX_N1_LSB_ADDR
Definition TLV320AIC3104.h:200
static constexpr RegAddr LADC_VOL_ADDR
Definition TLV320AIC3104.h:80
bool readPagedReg(RegAddr reg, uint8_t &value)
Reads a register on the given page.
Definition TLV320AIC3104.h:719
static constexpr RegAddr HPLCOM_CTRL_ADDR
Definition TLV320AIC3104.h:123
static constexpr uint8_t FSREF_44100
Definition TLV320AIC3104.h:270
static constexpr RegAddr HEADSET_BTN_PRESS_DETECTA_ADDR
Definition TLV320AIC3104.h:78
static constexpr uint8_t LDAC2LCH
Definition TLV320AIC3104.h:273
static constexpr uint8_t RDAC2RCH
Definition TLV320AIC3104.h:274
static constexpr RegAddr LINE1L_LADC_CTRL_ADDR
Definition TLV320AIC3104.h:84
bool setOutputVolume(int vol, AIC3104Channel channel=AIC3104Channel::All)
Set the output (headphone / line out) volume.
Definition TLV320AIC3104.h:625
static constexpr uint8_t ROUTE_ON
Definition TLV320AIC3104.h:290
static constexpr uint8_t AIC3104_IFTYPE_DSP
Definition TLV320AIC3104.h:278
static constexpr uint8_t AIC3104_IFTYPE_I2S
Definition TLV320AIC3104.h:277
static const RateDivs * rateDivTable(size_t &count)
Definition TLV320AIC3104.h:805
static constexpr RegAddr RAGC_PROG_DECAY_ADDR
Definition TLV320AIC3104.h:162
bool setOutputMute(bool mute, AIC3104Channel channel=AIC3104Channel::All)
Mute / unmute the headphone and/or line output driver(s)
Definition TLV320AIC3104.h:661
bool begin(uint32_t sample_rate, uint8_t bits, codec_mode_t mode, i2s_format_t fmt, bool is_master, uint8_t channels) override
Initializes the codec for I2S with the given sample rate and bits per sample.
Definition TLV320AIC3104.h:334
static constexpr RegAddr RCH_FX_D2_MSB_ADDR
Definition TLV320AIC3104.h:211
static constexpr RegAddr DAC_SW_CTRL_ADDR
Definition TLV320AIC3104.h:106
static constexpr RegAddr LCH_FX_D2_LSB_ADDR
Definition TLV320AIC3104.h:186
static constexpr RegAddr LCH_DEEMP_N1_LSB_ADDR
Definition TLV320AIC3104.h:194
static constexpr RegAddr HEADSET_BTN_PRESS_DETECTB_ADDR
Definition TLV320AIC3104.h:79
static constexpr RegAddr RAGC_PROG_ATTACK_ADDR
Definition TLV320AIC3104.h:161
static constexpr RegAddr RAGC_CTRLB_ADDR
Definition TLV320AIC3104.h:95
TLV320AIC3104()
Definition TLV320AIC3104.h:331
static constexpr RegAddr LCH_FX_N3_MSB_ADDR
Definition TLV320AIC3104.h:177
static constexpr RegAddr RDAC_VOL_ADDR
Definition TLV320AIC3104.h:109
bool selectPage(uint8_t page)
Selects the active register page (writes register 0 of page 0)
Definition TLV320AIC3104.h:747
static constexpr RegAddr RCH_ADC_HPF_N1_LSB_ADDR
Definition TLV320AIC3104.h:235
static constexpr RegAddr LCH_ADC_HPF_N1_LSB_ADDR
Definition TLV320AIC3104.h:229
static constexpr RegAddr RCH_ADC_HPF_D1_MSB_ADDR
Definition TLV320AIC3104.h:236
static constexpr RegAddr DACR1_HPROUT_VOL_ADDR
Definition TLV320AIC3104.h:129
static constexpr uint8_t NCODEC_5_5
Definition TLV320AIC3104.h:253
static constexpr RegAddr RCH_FX_D2_LSB_ADDR
Definition TLV320AIC3104.h:212
static constexpr RegAddr ASD_INTF_CTRLB_ADDR
Definition TLV320AIC3104.h:74
static constexpr RegAddr RCH_FX_N5_MSB_ADDR
Definition TLV320AIC3104.h:207
static constexpr uint8_t AIC3104_IFTYPE_LJF
Definition TLV320AIC3104.h:280
static uint8_t PLL_R_CODE(uint8_t r)
PLL R value lives in OVRF_STATUS_AND_PLLR_ADDR, D3-D0 (code = R - 1)
Definition TLV320AIC3104.h:267
static constexpr RegAddr LCH_FX_N0_LSB_ADDR
Definition TLV320AIC3104.h:172
static constexpr RegAddr HPRCOM_CTRL_ADDR
Definition TLV320AIC3104.h:137
static constexpr uint8_t NCODEC_2
Definition TLV320AIC3104.h:246
static constexpr RegAddr DAC_QUIESCENT_CURRENT_ADDR
Definition TLV320AIC3104.h:166
static constexpr RegAddr RCH_FX_D1_LSB_ADDR
Definition TLV320AIC3104.h:210
static constexpr RegAddr LCH_FX_N5_LSB_ADDR
Definition TLV320AIC3104.h:182
static constexpr RegAddr LCH_DEEMP_N1_MSB_ADDR
Definition TLV320AIC3104.h:193
static constexpr RegAddr RAGC_NGATE_DEBOUNCE_ADDR
Definition TLV320AIC3104.h:100
static constexpr RegAddr LCH_FX_D1_LSB_ADDR
Definition TLV320AIC3104.h:184
static constexpr RegAddr LCH_FX_N4_LSB_ADDR
Definition TLV320AIC3104.h:180
static constexpr RegAddr LAGC_PROG_ATTACK_ADDR
Definition TLV320AIC3104.h:159
bool stopOutput()
Power down the DAC channels.
Definition TLV320AIC3104.h:465
static constexpr RegAddr LAGC_CTRLB_ADDR
Definition TLV320AIC3104.h:92
static constexpr RegAddr RCH_DEEMP_N1_LSB_ADDR
Definition TLV320AIC3104.h:220
bool setVolume(int volume) override
Definition TLV320AIC3104.h:691
static constexpr uint8_t OUT_PWR_ON
Definition TLV320AIC3104.h:293
static constexpr RegAddr RCH_FX_N2_MSB_ADDR
Definition TLV320AIC3104.h:201
static constexpr uint8_t HP_UNMUTE
Definition TLV320AIC3104.h:292
static constexpr RegAddr DACL1_HPRCOM_VOL_ADDR
Definition TLV320AIC3104.h:133
static constexpr uint8_t NCODEC_1_5
Definition TLV320AIC3104.h:245
static constexpr RegAddr LCH_DEEMP_D0_LSB_ADDR
Definition TLV320AIC3104.h:196
static constexpr RegAddr RCH_ADC_HPF_N0_LSB_ADDR
Definition TLV320AIC3104.h:233
static constexpr RegAddr MIC2_RADC_CTRL_ADDR
Definition TLV320AIC3104.h:83
static constexpr RegAddr DACL1_HPLOUT_VOL_ADDR
Definition TLV320AIC3104.h:112
static constexpr RegAddr POP_REDUCTION_ADDR
Definition TLV320AIC3104.h:107
static constexpr uint8_t I2C_ADDR
Definition TLV320AIC3104.h:63
static constexpr RegAddr RCH_FX_N2_LSB_ADDR
Definition TLV320AIC3104.h:202
static constexpr uint8_t ASD_WLEN_24
Definition TLV320AIC3104.h:284
static constexpr RegAddr LCH_DEEMP_N0_LSB_ADDR
Definition TLV320AIC3104.h:192
static constexpr RegAddr LAGC_PROG_DECAY_ADDR
Definition TLV320AIC3104.h:160
static constexpr RegAddr LCH_FX_D1_MSB_ADDR
Definition TLV320AIC3104.h:183
static constexpr uint8_t PAGE_CONTROL_ADDR
Definition TLV320AIC3104.h:761
bool writePagedReg(RegAddr reg, uint8_t value)
Writes a register on the given page.
Definition TLV320AIC3104.h:713
static constexpr RegAddr LCH_FX_D4_LSB_ADDR
Definition TLV320AIC3104.h:188
static constexpr RegAddr RCH_FX_N1_MSB_ADDR
Definition TLV320AIC3104.h:199
static constexpr RegAddr ADC_FLAG_ADDR
Definition TLV320AIC3104.h:101
static constexpr uint8_t AIC3104_IFTYPE_RJF
Definition TLV320AIC3104.h:279
static constexpr RegAddr MICBIAS_CTRL_ADDR
Definition TLV320AIC3104.h:90
static constexpr RegAddr LCH_FX_D2_MSB_ADDR
Definition TLV320AIC3104.h:185
static constexpr RegAddr PGAL_HPLCOM_VOL_ADDR
Definition TLV320AIC3104.h:118
static constexpr RegAddr LINE1R_RADC_CTRL_ADDR
Definition TLV320AIC3104.h:87
static constexpr RegAddr PLL_PROGB_ADDR
Definition TLV320AIC3104.h:69
static constexpr RegAddr LCH_FX_D5_MSB_ADDR
Definition TLV320AIC3104.h:189
static constexpr RegAddr LCH_ADC_HPF_D1_MSB_ADDR
Definition TLV320AIC3104.h:230
input_device_t input_device
Definition TLV320AIC3104.h:744
static constexpr RegAddr ASD_INTF_CTRLA_ADDR
Definition TLV320AIC3104.h:73
static constexpr RegAddr RCH_FX_N3_MSB_ADDR
Definition TLV320AIC3104.h:203
static constexpr RegAddr LCH_ADC_HPF_N0_LSB_ADDR
Definition TLV320AIC3104.h:227
static constexpr RegAddr SAMPLE_RATE_SEL_ADDR
Definition TLV320AIC3104.h:67
static constexpr RegAddr RCH_FX_D4_LSB_ADDR
Definition TLV320AIC3104.h:214
static constexpr RegAddr CODEC_DATAPATH_ADDR
Definition TLV320AIC3104.h:72
static const PllDivs * pllDivTable(size_t &count)
Definition TLV320AIC3104.h:765
static constexpr RegAddr LAGC_CTRLA_ADDR
Definition TLV320AIC3104.h:91
static constexpr RegAddr RCH_FX_N3_LSB_ADDR
Definition TLV320AIC3104.h:204
static constexpr RegAddr HPROUT_CTRL_ADDR
Definition TLV320AIC3104.h:130
static constexpr uint8_t NCODEC_2_5
Definition TLV320AIC3104.h:247
static constexpr uint8_t ADC_PWR_ON
Definition TLV320AIC3104.h:294
static constexpr RegAddr RCH_ADC_HPF_N0_MSB_ADDR
Definition TLV320AIC3104.h:232
static constexpr RegAddr OVRF_STATUS_PLLR_ADDR
Definition TLV320AIC3104.h:76
Common parent class for codec drivers that have been ported from the Zephyr RTOS audio driver impleme...
Definition ZephyrDriverCommon.h:22
uint8_t i2c_addr
Definition ZephyrDriverCommon.h:87
int volume_percent
Last volume (in %) provided to setVolume()
Definition ZephyrDriverCommon.h:89
bool readReg(uint8_t reg, uint8_t &value, bool stopBit=true)
Reads a single byte from an 8 bit register address.
Definition ZephyrDriverCommon.h:100
bool writeReg(uint8_t reg, uint8_t value)
Writes a single byte to an 8 bit register address.
Definition ZephyrDriverCommon.h:94
uint16_t RegAddr
Definition TLV320AIC3110.h:57
Namespace for audio driver components.
Definition AudioBoard.h:5
AIC3104Channel
Logical audio channels.
Definition TLV320AIC3104.h:20
@ LineOutRight
RIGHT_LOP/M (fully differential line output)
@ LineOutLeft
LEFT_LOP/M (fully differential line output)
input_device_t
Definition DriverCommon.h:170
@ ADC_INPUT_ALL
Definition DriverCommon.h:175
@ ADC_INPUT_LINE1
Definition DriverCommon.h:172
@ ADC_INPUT_LINE3
Definition DriverCommon.h:174
@ ADC_INPUT_LINE2
Definition DriverCommon.h:173
@ ADC_INPUT_DIFFERENCE
Definition DriverCommon.h:176
void delayMs(unsigned long ms)
Definition API_Delay.h:19
static constexpr uint8_t makeBits(uint8_t l, uint8_t r, uint8_t v)
Definition TLV320AIC3104.h:37
codec_mode_t
Definition DriverCommon.h:290
output_device_t
Definition DriverCommon.h:186
@ DAC_OUTPUT_LINE1
Definition DriverCommon.h:188
@ DAC_OUTPUT_ALL
Definition DriverCommon.h:190
@ DAC_OUTPUT_LINE2
Definition DriverCommon.h:189
static constexpr uint8_t makeBit(uint8_t l, uint8_t v)
Definition TLV320AIC3104.h:40
i2s_format_t
Definition DriverCommon.h:250
Definition TLV320AIC3104.h:312
uint32_t clk
Definition TLV320AIC3104.h:313
uint8_t r
Definition TLV320AIC3104.h:316
uint32_t fsref
44100 or 48000
Definition TLV320AIC3104.h:314
uint8_t p
Definition TLV320AIC3104.h:315
uint8_t j
Definition TLV320AIC3104.h:317
uint16_t d
Definition TLV320AIC3104.h:318
Definition TLV320AIC3104.h:324
uint8_t ncodec_code
Definition TLV320AIC3104.h:327
bool dual_rate
Definition TLV320AIC3104.h:328
uint32_t fsref
Definition TLV320AIC3104.h:326
uint32_t rate
Definition TLV320AIC3104.h:325
Page + register address pair.
Definition TLV320AIC3104.h:58
uint8_t page
Definition TLV320AIC3104.h:59
uint8_t reg
Definition TLV320AIC3104.h:60