new/kernel-rt/sound/soc/codecs/cx20810_config.h

519 lines
13 KiB
C
Raw Normal View History

2025-05-10 21:58:58 +08:00
/*
* Driver for CX2081X voice capture IC.
*
* Copyright: Conexant Systems.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
#ifndef CX20810_CONFIG_H_
#define CX20810_CONFIG_H_
enum {
CX20810_NORMAL_MODE = 0,
CX20810_NORMAL_MODE2,
CX20810_NORMAL_MODE_SIMPLE,
CX20810_NIRMAL_MODE_CODEC3,
CX20810_NIRMAL_MODE_CODEC3_SIMPLE,
CX20810_96K_16BIT_MODE,
CX20810_48K_16BIT_MODE,
};
static char codec_config_param_normal_mode[] = {
/*
* I2S Master mode, LeftJustified 1bit delay
* 48k_24bit MSB first, Frame Length 64bit
* 12.288Mhz MClk, bclk,48K* 64 , 3.072Mhz
* set up PLL, 12.288 Mhz mclk feed to PLL
*/
#if 1
0x80, 0x03, /* MCLK is an input */
0x08, 0x20, /* MCLK !gated */
0x60, 0x04, /* Bypass PLL */
0x09, 0x03, /* Use MLCK directly */
/* end pll setting */
0x78, 0x2D, /* Enable VREF @ 2.8V (5V) or 2.6V (3.3V) */
0x78, 0x2D, /* Enable VREF @ 2.8V (5V) or 2.6V (3.3V) */
0x78, 0x2D, /* Enable VREF @ 2.8V (5V) or 2.6V (3.3V) */
0x78, 0x2D, /* Enable VREF @ 2.8V (5V) or 2.6V (3.3V) */
0x78, 0x2D, /* Enable VREF @ 2.8V (5V) or 2.6V (3.3V) */
0x78, 0x2D, /* Enable VREF @ 2.8V (5V) or 2.6V (3.3V) */
0x78, 0x6D, /* Enable Analog LDO */
0x78, 0x6D, /* Enable Analog LDO */
0x78, 0x6D, /* Enable Analog LDO */
0x78, 0x6D, /* Enable Analog LDO */
0x78, 0x6D, /* Enable Analog LDO */
0x78, 0x6D, /* Enable Analog LDO */
0x7A, 0x01, /* Enable VREFP */
/* Setup I2S */
0x16, 0x00, /* Use DC Filters for ADCs */
0x0c, 0x3B, /* Enable I2S-TX and set Master Mode, enable ADC3/4 FIFO */
0x83, 0x00, /* Configure LRCK and BCLK as outputs */
0x30, 0x14, /* 7 wire mode,24-bit sample size,// Normal mode */
0x31, 0x07, /* Set 64 cycle per frame TX */
0x33, 0x1F, /* TX WS ,32 cycle */
0x35, 0xA8, /* Lj 1bit delay, enable TX1,2 */
0x0A, 0x03, /* Set TX divisor is Source Clock / 4 (Bclk,3.072Mhz) */
0x0A, 0x83, /* Enable divisor */
/* Setup ADCs and clocks */
/*
* if using 20/16/12/8/4 dB gain, set register
* 0x28/0x20/0x18/0x10/0x08
*/
0xBC, 0x28, /* ADC1 8dB Gain */
0xBD, 0x28, /* ADC2 8dB Gain */
0xBE, 0x28, /* ADC3 8dB Gain */
0xBF, 0x28, /* ADC4 8dB Gain */
0x10, 0x00, /* Disable all ADC clocks */
0x11, 0x00, /* Disable all ADC clocks and Mixer */
0x10, 0x1F, /* Enable all ADC clocks and ADC digital */
0x11, 0x4F, /* Enable all ADCs and set 48kHz sample rate */
0x10, 0x5F, /* Enable all ADC clocks, ADC digital and ADC Mic Clock Gate */
/*
*0xA0 , 0x0F ,// ADC1, Mute PGA, enable AAF/ADC/PGA
*0xA7 , 0x0F ,// ADC2, Mute PGA, enable AAF/ADC/PGA
*0xAE , 0x0F ,// ADC3, Mute PGA, enable AAF/ADC/PGA
*0xB5 , 0x0F ,// ADC4, Mute PGA, enable AAF/ADC/PGA
*/
0xA0, 0x07, /* ADC1 !Mute */
0xA7, 0x07, /* ADC2 !Mute */
0xAE, 0x07, /* ADC3 !Mute */
0xB5, 0x07, /* ADC4 !Mute */
#else
/* I2S slave mode */
0x0F, 0x03, /* RST */
0x0F, 0x03, /* repeat write is let chip has more time to RST */
0x0F, 0x03,
0x0F, 0x03,
0x0F, 0x00, /* release reset */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x7A, 0x01,
0x01, 0x01,
0xA0, 0x07, /* ADC bias EN */
0xA7, 0x07,
0xAE, 0x07,
0xB5, 0x07,
0xBC, 0x3C, /* 0x28 20dB 0x34 26dB */
0xBD, 0x3C,
0xBE, 0x3C,
0xBF, 0x3C,
0x30, 0x14, /* 14 24bit 0a 16bit */
0x31, 0x07, /* frame (n+1)*8 bit 32+32=64 */
0x32, 0x07, /* */
0x33, 0x1F, /* sys width 32 clk */
0x34, 0x1F,
0x35, 0xAC, /* TX right justified and revert i2s1+i2s2 */
0x36, 0x00, /* config for right justified ignored. */
0x37, 0x00, /* RX left justified. */
0x38, 0x00, /* config for right justified ignored. */
0x39, 0x08, /* ADC12 0n DATA1.ADC34 On DATA2 */
0x3A, 0x00, /* Slot1 */
0x3B, 0x00, /* slot2 */
0x3C, 0x00, /* slot3 */
0x3D, 0x00, /* slot4 */
0x3E, 0x1F, /* slot4 */
0x16, 0x00, /* Use DC Filter for ADCs */
0x80, 0x03, /* MCLK */
0x81, 0x01, /* LRCLK BCLK RX Pull down */
0x82, 0x3F, /* LRCLK BCLK RX */
0x83, 0x0F, /* LRCLK BCLK */
0x0F, 0x01, /* RST,clears DSP,audio data interface values */
0x0F, 0x01, /* repeat write is let chip has more time to RST */
0x0F, 0x01,
0x0F, 0x01,
0x08, 0x00, /* disable MCLK to chip */
0x0C, 0x0A, /* Clocks gated */
0x09, 0x02,
0x0F, 0x00, /* clear RST */
/* enable MCLK to chip */
/* 0x08, 0x30, */
/* 0x08, 0x38, */
0x08, 0x20,
0x09, 0x03,
0x10, 0x00, /* Disable all ADC clocks */
0x11, 0x10, /* Disable all ADC and Mixer */
0x10, 0x1F, /* Enable all ADC clocks and ADC digital */
0x11, 0x4F, /* Enable all ADC and set 48k sample rate */
0x10, 0x5F, /* Enable all ADC clocks,
ADC digital and ADC Mic Clock Gate */
#endif
};
static char codec_config_param_normal_mode2[] = {
0x0F, 0x03, /* RST */
0x0F, 0x03, /* repeat write is let chip has more time to RST */
0x0F, 0x03,
0x0F, 0x03,
0x0F, 0x00, /* release reset */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x7A, 0x01,
0x01, 0x01,
0xA0, 0x07, /* ADC bias EN */
0xA7, 0x07,
0xAE, 0x07,
0xB5, 0x07,
0xBC, 0x24, /* 0x28 20dB 0x34 26dB */
0xBD, 0x24,
0xBE, 0x24,
0xBF, 0x24,
0x30, 0x14, /* 14 24bit 0a 16bit */
0x31, 0x07, /* frame (n+1)*8 bit 32+32=64 */
0x32, 0x07, /* */
0x33, 0x1F, /* sys width 32 clk */
0x34, 0x1F,
0x35, 0xAC, /* TX right justified and revert i2s1+i2s2 */
0x36, 0x00, /* config for right justified ignored. */
0x37, 0x00, /* RX left justified. */
0x38, 0x00, /* config for right justified ignored. */
0x39, 0x08, /* ADC12 0n DATA1.ADC34 On DATA2 */
0x3A, 0x00, /* Slot1 */
0x3B, 0x00, /* slot2 */
0x3C, 0x00, /* slot3 */
0x3D, 0x00, /* slot4 */
0x3E, 0x1F, /* slot4 */
0x16, 0x00, /* Use DC Filter for ADCs */
0x80, 0x03, /* MCLK */
0x81, 0x01, /* LRCLK BCLK RX Pull down */
0x82, 0x3F, /* LRCLK BCLK RX */
0x83, 0x0F, /* LRCLK BCLK */
#if 0
/* PLL config */
0x08, 0x00, /* disable MCLK */
0x09, 0x40, /* I2S TX Bit Clock */
0x60, 0xF8, /* reset and Disable PLL1 */
0x61, 0xDF, /* */
0x62, 0x01,
0x63, 0x01,
/* {0x64, 0x90}, */
/* {0x65, 0x24}, */
0x66, 0x80,
0x67, 0x02,
/* {0x68, 0x0}, */
/* {0x69, 0x0}, */
/* enable PLL1 */
0x60, 0xFB, /* delay for PLL locked */
0x60, 0xFB,
0x60, 0xFB,
0x60, 0xFB,
0x60, 0xFB,
0x60, 0xFB,
/* end PLL config */
#endif
0x0F, 0x01, /* RST,clears DSP,audio data interface values */
0x0F, 0x01, /* repeat write is let chip has more time to RST */
0x0F, 0x01,
0x0F, 0x01,
0x08, 0x00, /* disable MCLK to chip */
0x0C, 0x0A, /* Clocks gated */
0x09, 0x02,
0x0F, 0x00, /* clear RST */
/* 0x08, 0x30, */
/* enable MCLK to chip */
/* 0x08, 0x38, */
0x08, 0x20,
0x09, 0x03,
0x10, 0x00, /* Disable all ADC clocks */
0x11, 0x10, /* Disable all ADC and Mixer */
0x10, 0x1F, /* Enable all ADC clocks and ADC digital */
0x11, 0x4F, /* Enable all ADC and set 48k sample rate */
0x10, 0x5F, /* Enable all ADC clocks,
ADC digital and ADC Mic Clock Gate */
};
static char codec_config_param_normal_mode_simple[] = {
/* mic pga 增益 */
/* 4通道录音工具 */
0xBC, 0x28, /* 0x28 20dB 0x34 26dB */
0xBD, 0x28,
0xBE, 0x28,
0xBF, 0x28,
0x60, 0x04,
0x66, 0x00,
0x67, 0x02,
/* PAD配置 */
0x80, 0x03, /* MCLK 为输入 */
0x83, 0x0F, /* LRCLK BCLK 为输入脚TX1 TX2为输出脚 */
/* MCLK 作为输入 */
/* 0x08, 0x30, */
/* MCLK divisor 生效 */
/* 0x08, 0x38, */
0x08, 0x20, /* MCLK 作为输入 12.288MHz */
0x09, 0x03, /* 选MCLK作为PLL输入源 */
0x0a, 0x0b,
0x0a, 0x8b,
0x0C, 0x0A, /* RT clock disable, TX clock enable,
enable clock to ADC3/4 */
/* I2S */
/* Tx sample size:16bit, Normal mode */
/* 0x30, 0x0A, */
0x30, 0x14, /* Tx sample size:24bit, Normal mode */
0x35, 0xA2, /* left justified, enable I2S-1 and I2S-2 */
0x10, 0x00,
0x11, 0x00,
0x10, 0x1F,
0x11, 0x1F, /* ADC 96k, enables all ADCs */
0x16, 0x00,
0x10, 0x5F,
};
static char codec3_config_param_normal_mode[] = {
/* POWER */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x39, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x78, 0x79, /* PLLEN = 1 ABIASEN IOBUFEN REFIMP = 11 3KR */
0x7A, 0x01,
0x01, 0x01,
/* Analog ADC Control */
/* MIcIn PGA A0,A7,AE,B5 [5:4] ctrl_rcm,
* [1] enable [3] mute [7] bypass */
/* 模拟部分电源 */
0xA0, 0x07, /* ADC bias EN */
0xA7, 0x07,
0xAE, 0x07,
0xB5, 0x07,
/* mic pga 增益 */
/* 4通道录音工具 */
0xBC, 0x06, /* 0x28 20dB 0x34 26dB */
0xBD, 0x06,
0xBE, 0x0C,
0xBF, 0x14,
0x60, 0x04,
0x66, 0x00,
0x67, 0x02,
/* PAD配置 */
0x80, 0x03, /* MCLK 为输入 */
0x83, 0x0F, /* LRCLK BCLK 为输入脚TX1 TX2为输出脚 */
/* MCLK 作为输入 */
/* 0x08, 0x30, */
/* MCLK divisor 生效 */
/* 0x08, 0x38, */
0x08, 0x20, /* MCLK 作为输入 12.288MHz */
0x09, 0x03, /* 选MCLK作为PLL输入源 */
0x0a, 0x0b,
0x0a, 0x8b,
0x0C, 0x0A, /* RT clock disable, TX clock enable,
enable clock to ADC3/4 */
/* I2S */
/* Tx sample size:16bit, Normal mode */
/* 0x30, 0x0A, */
0x30, 0x14, /* Tx sample size:24bit, Normal mode */
0x35, 0xA2, /* left justified, enable I2S-1 and I2S-2 */
0x10, 0x00,
0x11, 0x00,
0x10, 0x1F,
0x11, 0x1F, /* ADC 96k, enables all ADCs */
0x16, 0x00,
0x10, 0x5F,
};
static char codec3_config_param_normal_mode_simple[] = {
/* mic pga 增益 */
/* 4通道录音工具 */
0xBC, 0x28,/* 0x28 20dB 0x34 26dB */
0xBD, 0x28,
0xBE, 0x28,
0xBF, 0x28,
0x60, 0x04,
0x66, 0x00,
0x67, 0x02,
/* PAD配置 */
0x80, 0x03,/* MCLK 为输入 */
0x83, 0x0F,/* LRCLK BCLK 为输入脚TX1 TX2为输出脚 */
/* MCLK 作为输入 */
/* 0x08, 0x30, */
/* MCLK divisor 生效 */
/* 0x08, 0x38, */
0x08, 0x20,/* MCLK 作为输入 12.288MHz */
0x09, 0x03,/* 选MCLK作为PLL输入源 */
0x0a, 0x0b,
0x0a, 0x8b,
0x0C, 0x0A,/* RT clock disable, TX clock enable,
enable clock to ADC3/4 */
/* I2S */
/* Tx sample size:16bit, Normal mode */
/* 0x30, 0x0A, */
0x30, 0x14,/* Tx sample size:24bit, Normal mode */
0x35, 0xA2,/* left justified, enable I2S-1 and I2S-2 */
0x10, 0x00,
0x11, 0x00,
0x10, 0x1F,
0x11, 0x1F,/* ADC 96k, enables all ADCs */
0x16, 0x00,
0x10, 0x5F,
};
static char codec_config_param_48k_16bit_mode[] = {
/* mic pga 增益 */
/* 4通道录音工具 */
0xBC, 29 << 1,/* 0x28 20dB 0x34 26dB */
0xBD, 29 << 1,
0xBE, 29 << 1,
0xBF, 29 << 1,
0x60, 0x04,
0x66, 0x00,
0x67, 0x02,
/* PAD配置 */
0x80, 0x03,/* MCLK 为输入 */
0x83, 0x0F,/* LRCLK BCLK 为输入脚TX1 TX2为输出脚 */
/* MCLK 作为输入 */
/* 0x08, 0x30, */
/* MCLK divisor 生效 */
/* 0x08, 0x38, */
0x08, 0x20,/* MCLK 作为输入 12.288MHz */
0x09, 0x03,/* 选MCLK作为PLL输入源 */
0x0a, 0x03,
0x0a, 0x83,
0x0C, 0x0A,/* RT clock disable, TX clock enable,
enable clock to ADC3/4 */
/* I2S */
0x30, 0x0A,/* Tx sample size:16bit, Normal mode */
/* Tx sample size:24bit, Normal mode */
/* 0x30, 0x14, */
0x35, 0xA2,/* left justified, enable I2S-1 and I2S-2 */
0x10, 0x00,
0x11, 0x00,
0x10, 0x1F,
0x11, 0x4F,/* ADC 96k, enables all ADCs */
0x16, 0x00,
0x10, 0x5F,
};
static char codec_config_param_96k_16bit_mode[] = {
/* mic pga 增益 */
/* 4通道录音工具 */
0xBC, 29 << 1,/* 0x28 20dB 0x34 26dB */
0xBD, 29 << 1,
0xBE, 29 << 1,
0xBF, 29 << 1,
0x60, 0x04,
0x66, 0x00,
0x67, 0x02,
/* PAD配置 */
0x80, 0x03,/* MCLK 为输入 */
0x83, 0x0F,/* LRCLK BCLK 为输入脚TX1 TX2为输出脚 */
/* MCLK 作为输入 */
/* 0x08, 0x30, */
/* MCLK divisor 生效 */
/* 0x08, 0x38, */
0x08, 0x20,/* MCLK 作为输入 12.288MHz */
0x09, 0x03,/* 选MCLK作为PLL输入源 */
0x0a, 0x01,
0x0a, 0x81,
0x0C, 0x0A,/* RT clock disable, TX clock enable,
enable clock to ADC3/4 */
/* I2S */
0x30, 0x0A,/* Tx sample size:16bit, Normal mode */
/* Tx sample size:24bit, Normal mode */
/* 0x30, 0x14, */
0x35, 0xA2,/* left justified, enable I2S-1 and I2S-2 */
0x10, 0x00,
0x11, 0x00,
0x10, 0x1F,
0x11, 0x5F,/* ADC 96k, enables all ADCs */
0x16, 0x00,
0x10, 0x5F,
};
#endif /* CX20810_CONFIG_H_ */