519 lines
13 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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_ */