diff --git a/firmware/export/config/samsungypcp3.h b/firmware/export/config/samsungypcp3.h index 658b327165..f3542f64f6 100644 --- a/firmware/export/config/samsungypcp3.h +++ b/firmware/export/config/samsungypcp3.h @@ -94,13 +94,15 @@ #define CONFIG_LCD LCD_SPFD5420A /* Wolfson WM8750 on I2C, headphones on its OUT2. The codec is the I2S - * slave: the rk27xx drives the bus and clocks the codec from its codec PLL - * at 256 fs for every rate (pcm-rk27xx.c), so the codec's CLOCKING register - * is its normal-mode 256 fs setting throughout. The original firmware runs - * the codec as master off a fixed 12 MHz instead, in USB mode, which puts + * master, driving BCLK and both of its LRCKs: as a slave it frames the ADC + * on its ADCLRC input, which the rk27xx's one LRCK does not reach, and + * records zeros. Its MCLK comes from the rk27xx's codec PLL at 256 fs for + * every rate (pcm-rk27xx.c), so the codec's CLOCKING register is its + * normal-mode 256 fs setting throughout. The original firmware runs the + * codec as master off a fixed 12 MHz instead, in USB mode, which puts * 44.1 kHz at 44.118. */ #define HAVE_WM8750 -#define CODEC_SLAVE +#define RK27XX_I2S_MCLK #define CODEC_SRCTRL_11025HZ 0 #define CODEC_SRCTRL_22050HZ 0 #define CODEC_SRCTRL_44100HZ 0 diff --git a/firmware/target/arm/rk27xx/pcm-rk27xx.c b/firmware/target/arm/rk27xx/pcm-rk27xx.c index 2aa5979ce8..2040663a76 100644 --- a/firmware/target/arm/rk27xx/pcm-rk27xx.c +++ b/firmware/target/arm/rk27xx/pcm-rk27xx.c @@ -196,8 +196,9 @@ static void i2s_init(void) #endif } -#ifdef CODEC_SLAVE -/* When codec is slave we need to setup i2s MCLK clock using codec pll. +#if defined(CODEC_SLAVE) || defined(RK27XX_I2S_MCLK) +/* When codec is slave, or master off our MCLK (RK27XX_I2S_MCLK), we need + * to setup i2s MCLK clock using codec pll. * The MCLK frequency is 256*codec frequency as i2s setup is: * LRCK/SCLK = 64 and MCLK/SCLK = 4 (see i2s_init() for reference) * @@ -278,7 +279,7 @@ static void sink_dma_init(void) static void sink_set_freq(uint16_t freq) { -#ifdef CODEC_SLAVE +#if defined(CODEC_SLAVE) || defined(RK27XX_I2S_MCLK) set_codec_freq(freq); #endif