From 1eb7d3ed2caa78a2c49fd3fb926d492dbe848dec Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Fri, 18 Apr 2025 22:42:22 +0200 Subject: [PATCH] Fix WM8731 registers --- src/control_WM8731_F32.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/control_WM8731_F32.cpp b/src/control_WM8731_F32.cpp index cdb3833..bf07364 100644 --- a/src/control_WM8731_F32.cpp +++ b/src/control_WM8731_F32.cpp @@ -212,11 +212,18 @@ bool AudioControlWM8731_F32::enable(bit_depth_t bits, TwoWire *i2cBus, uint8_t a } write(WM8731_REG_INTERFACE, WM8731_BITS_FORMAT(WM8731_FORMAT_I2S_MSB_LEFT) | - WM8731_BITS_IWL(bits)); // I2S, x bit, MCLK slave + WM8731_BITS_IWL(bits) | + WM8731_BITS_LRP(0) | + WM8731_BITS_BCLKINV(0) + ); // I2S, x bit, MCLK slave write(WM8731_REG_SAMPLING, WM8731_BITS_USB_NORMAL(0) | // normal mode WM8731_BITS_BOSR(0) | // 256*fs - WM8731_BITS_SR(8) | // 44.1kHz +#if AUDIO_SAMPLE_RATE_EXACT == 48000 || AUDIO_SAMPLE_RATE_EXACT == 96000 || AUDIO_SAMPLE_RATE_EXACT == 19200 + WM8731_BITS_SR(0) | // n*48kHz +#else + WM8731_BITS_SR(8) | // n*44.1kHz +#endif WM8731_BITS_CLKIDIV2(0) | // MCLK/1 WM8731_BITS_CLKODIV2(0)); @@ -333,18 +340,15 @@ bool AudioControlWM8731_F32::inputLevel(float n) { // range is 0x00 (min) - 0x1F (max) int _level = int(n * 31.f); - _level = _level > 0x1F ? 0x1F : _level; - write(WM8731_REG_LLINEIN, _level); - write(WM8731_REG_RLINEIN, _level); - return true; + return inputLevelRaw(_level); } // ---------------------------------------------------------------------------------- bool AudioControlWM8731_F32::inputLevelRaw(uint8_t n) { // range is 0x00 (min) - 0x1F (max) - n = n > 0x1F ? 0x1F : n; - write(WM8731_REG_LLINEIN, n); - write(WM8731_REG_RLINEIN, n); + n = min(n, 0x1F); + modify(WM8731_REG_LLINEIN, WM8731_BITS_LINVOL(n), WM8731_BITS_LINVOL_MASK); + modify(WM8731_REG_RLINEIN, WM8731_BITS_RINVOL(n), WM8731_BITS_RINVOL_MASK); return true; } // ----------------------------------------------------------------------------------