Fix WM8731 registers

pull/3/head
Thomas Grill 3 weeks ago
parent c922e5024b
commit 1eb7d3ed2c
  1. 22
      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;
}
// ----------------------------------------------------------------------------------

Loading…
Cancel
Save