Skip to content

Commit 7c687d4

Browse files
author
mkuettner97
committed
improve DSP boot sequence: leave master block en off and hybernate 2 until clock is set
1 parent 006a847 commit 7c687d4

2 files changed

Lines changed: 25 additions & 13 deletions

File tree

src/drivers/ADAU1860.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,15 @@ int ADAU1860::begin() {
7070

7171
k_msleep(35); // CM rise time (see datasheet)
7272

73-
uint8_t power_mode = 0x01 | 0x04; // Hibernate 1, Master enable
74-
writeReg(registers::CHIP_PWR, &power_mode, sizeof(power_mode));
73+
//uint8_t power_mode = 0x01 | 0x04; // Hibernate 1, Master enable
74+
//writeReg(registers::CHIP_PWR, &power_mode, sizeof(power_mode));
7575

7676
// Non self-boot
7777
uint8_t startup_dlycnt_byp = 1;
7878
writeReg(registers::PMU_CTRL2, &startup_dlycnt_byp, sizeof(startup_dlycnt_byp));
7979

8080
// Power saving
81-
uint8_t cm_startup_over = 1 << 4 | power_mode;
81+
uint8_t cm_startup_over = 1 << 4; // | power_mode;
8282
writeReg(registers::CHIP_PWR, &cm_startup_over, sizeof(cm_startup_over));
8383

8484
//uint8_t sai_clk_pwr = 0x01; // I2S_IN enable
@@ -88,6 +88,22 @@ int ADAU1860::begin() {
8888
uint8_t clk_ctrl13 = (1 << 7) | (1 << 4) | 0x01; // (0x01 = 49.152 MHz) // | 0x3;
8989
writeReg(registers::CLK_CTRL13, &clk_ctrl13, sizeof(clk_ctrl13));
9090

91+
uint8_t status2;
92+
readReg(registers::STATUS2, &status2, sizeof(status2));
93+
LOG_DBG("STATUS2: 0x%x", status2);
94+
95+
if (!(status2 & (1 << 7))) LOG_WRN("No power up");
96+
97+
while (!(status2 & (1 << 7))) {
98+
readReg(registers::STATUS2, &status2, sizeof(status2));
99+
LOG_DBG("STATUS2: 0x%x", status2);
100+
101+
// power up complete and PLL lock
102+
if (!(status2 & (1 << 7))) LOG_WRN("No power up");
103+
104+
k_usleep(10);
105+
}
106+
91107
//uint8_t clk_ctrl13 = (0 << 7) | (1 << 4) | 0x01; // (0x01 = 49.152 MHz)
92108
//writeReg(registers::CLK_CTRL13, &clk_ctrl13, sizeof(clk_ctrl13));
93109

@@ -109,7 +125,7 @@ int ADAU1860::begin() {
109125
//k_msleep(1);
110126

111127
// verify power up complete
112-
uint8_t status2;
128+
//uint8_t status2;
113129
readReg(registers::STATUS2, &status2, sizeof(status2));
114130
LOG_DBG("STATUS2: 0x%x", status2);
115131

@@ -127,10 +143,9 @@ int ADAU1860::begin() {
127143
k_usleep(10);
128144
}
129145

130-
// LOG_INF("DAC_CTRL: 0x%02X", status);
131146
// Power saving
132-
// uint8_t cm_startup_over = 1 << 2 | 0x01; // Master block en | Hibernate 1 (SOC off, ADP on);
133-
// writeReg(registers::CHIP_PWR, &cm_startup_over, sizeof(cm_startup_over));
147+
uint8_t power_mode = 0x40 | 0x01 | 0x04; // CM_Startup_over | Hibernate 1, Master enable
148+
writeReg(registers::CHIP_PWR, &power_mode, sizeof(power_mode));
134149

135150
// SPT0_CTRL1 - reset val (32 BCLKs?)
136151
uint8_t spt0_ctrl1 = 0x10; // 1 << 4 (16 BCLKs)
@@ -527,10 +542,6 @@ void ADAU1860::writeReg(uint32_t reg, uint8_t *buffer, uint16_t len) {
527542
_i2c->release();
528543
}
529544

530-
void ADAU1860::writeReg_u8(uint32_t reg, uint8_t &buffer) {
531-
writeReg(reg, &buffer, sizeof(buffer));
532-
}
533-
534545
#ifdef NOISE_GATE_ACTIVE
535546
int cmd_dsp_noise_gate(const struct shell *shell, size_t argc, char **argv) {
536547
if (argc != 6) {

src/drivers/ADAU1860.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,6 @@ class ADAU1860 {
419419
bool readReg(uint32_t reg, uint8_t * buffer, uint16_t len);
420420
void writeReg(uint32_t reg, uint8_t * buffer, uint16_t len);
421421

422-
void writeReg_u8(uint32_t reg, uint8_t &buffer);
423-
424422
int setup_EQ();
425423
int setup_FDSP();
426424
int setup_DAC();
@@ -448,6 +446,9 @@ class ADAU1860 {
448446
//const struct gpio_dt_spec pg_pin = GPIO_DT_SPEC_GET(DT_NODELABEL(bq25120a), pg_gpios);
449447

450448
friend int cmd_dsp_noise_gate(const struct shell *shell, size_t argc, char **argv);
449+
450+
friend int32_t adau_read(void* user_data, uint8_t *rd_buf, uint32_t rd_len, uint8_t *wr_buf, uint32_t wr_len);
451+
friend int32_t adau_write(void* user_data, uint8_t *wr_buf, uint32_t len);
451452
};
452453

453454
extern ADAU1860 dac;

0 commit comments

Comments
 (0)