321 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			321 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * rk1000_codec.h  --  rk1000 ALSA Soc Audio driver
 | |
|  *
 | |
|  * Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd All rights reserved.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify it
 | |
|  * under the terms and conditions of the GNU General Public License,
 | |
|  * version 2, as published by the Free Software Foundation.
 | |
|  *
 | |
|  * This program is distributed in the hope it will be useful, but WITHOUT
 | |
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 | |
|  * more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  */
 | |
| #ifndef _RK1000_CODEC_H
 | |
| #define _RK1000_CODEC_H
 | |
| 
 | |
| /* RK1000 register space */
 | |
| /* ADC High Pass Filter / DSM */
 | |
| #define ACCELCODEC_R00	0x00
 | |
| /* DITHER power */
 | |
| #define ACCELCODEC_R01	0x01
 | |
| /* DITHER power */
 | |
| #define ACCELCODEC_R02	0x02
 | |
| /* DITHER power */
 | |
| #define ACCELCODEC_R03	0x03
 | |
| /* Soft mute / sidetone gain control */
 | |
| #define ACCELCODEC_R04	0x04
 | |
| /* Right interpolate filter volume control (MSB) */
 | |
| #define ACCELCODEC_R05	0x05
 | |
| /* Right interpolate filter volume control (LSB) */
 | |
| #define ACCELCODEC_R06	0x06
 | |
| /* Left interpolate filter volume control (MSB) */
 | |
| #define ACCELCODEC_R07	0x07
 | |
| /* Left interpolate filter volume control (LSB) */
 | |
| #define ACCELCODEC_R08	0x08
 | |
| /* Audio interface control */
 | |
| #define ACCELCODEC_R09	0x09
 | |
| /* Sample Rate / CLK control */
 | |
| #define ACCELCODEC_R0A	0x0A
 | |
| /* Decimation filter / Interpolate filter enable */
 | |
| #define ACCELCODEC_R0B	0x0B
 | |
| /* LIN volume */
 | |
| #define ACCELCODEC_R0C	0x0C
 | |
| /* LIP volume */
 | |
| #define ACCELCODEC_R0D	0x0D
 | |
| /* AL volume */
 | |
| #define ACCELCODEC_R0E	0x0E
 | |
| /* Input volume */
 | |
| #define ACCELCODEC_R12	0x12
 | |
| /* Left out mix */
 | |
| #define ACCELCODEC_R13	0x13
 | |
| /* Right out mix */
 | |
| #define ACCELCODEC_R14	0x14
 | |
| /* LPF out mix / SCF */
 | |
| #define ACCELCODEC_R15	0x15
 | |
| /* SCF control */
 | |
| #define ACCELCODEC_R16	0x16
 | |
| /* LOUT (AOL) volume */
 | |
| #define ACCELCODEC_R17	0x17
 | |
| /* ROUT (AOR) volume */
 | |
| #define ACCELCODEC_R18	0x18
 | |
| /* MONOOUT (AOM) volume */
 | |
| #define ACCELCODEC_R19	0x19
 | |
| /* MONOOUT / Reference control */
 | |
| #define ACCELCODEC_R1A	0x1A
 | |
| /* Bias Current control */
 | |
| #define ACCELCODEC_R1B	0x1B
 | |
| /* ADC control */
 | |
| #define ACCELCODEC_R1C	0x1C
 | |
| /* Power Mrg 1 */
 | |
| #define ACCELCODEC_R1D	0x1D
 | |
| /* Power Mrg 2 */
 | |
| #define ACCELCODEC_R1E	0x1E
 | |
| /* Power Mrg 3 */
 | |
| #define ACCELCODEC_R1F	0x1F
 | |
| 
 | |
| /* ACCELCODEC_R00 */
 | |
| /* high_pass filter */
 | |
| #define ASC_HPF_ENABLE		(0x1)
 | |
| #define ASC_HPF_DISABLE		(0x0)
 | |
| 
 | |
| #define ASC_DSM_MODE_ENABLE	(0x1 << 1)
 | |
| #define ASC_DSM_MODE_DISABLE	(0x0 << 1)
 | |
| 
 | |
| #define ASC_SCRAMBLE_ENABLE	(0x1 << 2)
 | |
| #define ASC_SCRAMBLE_DISABLE	(0x0 << 2)
 | |
| 
 | |
| #define ASC_DITHER_ENABLE	(0x1 << 3)
 | |
| #define ASC_DITHER_DISABLE	(0x0 << 3)
 | |
| 
 | |
| #define ASC_BCLKDIV_4		(0x1 << 4)
 | |
| #define ASC_BCLKDIV_8		(0x2 << 4)
 | |
| #define ASC_BCLKDIV_16		(0x3 << 4)
 | |
| 
 | |
| /* ACCECODEC_R04 */
 | |
| #define ASC_INT_MUTE_L		(0x1)
 | |
| #define ASC_INT_ACTIVE_L	(0x0)
 | |
| #define ASC_INT_MUTE_R		(0x1 << 1)
 | |
| #define ASC_INT_ACTIVE_R	(0x0 << 1)
 | |
| 
 | |
| #define ASC_SIDETONE_L_OFF	(0x0 << 2)
 | |
| #define ASC_SIDETONE_L_GAIN_MAX	(0x1 << 2)
 | |
| #define ASC_SIDETONE_R_OFF	(0x0 << 5)
 | |
| #define ASC_SIDETONE_R_GAIN_MAX	(0x1 << 5)
 | |
| 
 | |
| /* ACCELCODEC_R05 */
 | |
| #define ASC_INT_VOL_0DB		(0x0)
 | |
| 
 | |
| /* ACCELCODEC_R09 */
 | |
| #define ASC_DSP_MODE		(0x3)
 | |
| #define ASC_I2S_MODE		(0x2)
 | |
| #define ASC_LEFT_MODE		(0x1)
 | |
| #define ASC_RIGHT_MODE		(0x0)
 | |
| 
 | |
| #define ASC_32BIT_MODE		(0x3 << 2)
 | |
| #define ASC_24BIT_MODE		(0x2 << 2)
 | |
| #define ASC_20BIT_MODE		(0x1 << 2)
 | |
| #define ASC_16BIT_MODE		(0x0 << 2)
 | |
| 
 | |
| #define ASC_INVERT_LRCLK	(0x1 << 4)
 | |
| #define ASC_NORMAL_LRCLK	(0x0 << 4)
 | |
| 
 | |
| #define ASC_LRSWAP_ENABLE	(0x1 << 5)
 | |
| #define ASC_LRSWAP_DISABLE	(0x0 << 5)
 | |
| 
 | |
| #define ASC_MASTER_MODE		(0x1 << 6)
 | |
| #define ASC_SLAVE_MODE		(0x0 << 6)
 | |
| 
 | |
| #define ASC_INVERT_BCLK		(0x1 << 7)
 | |
| #define ASC_NORMAL_BCLK		(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R0A */
 | |
| #define ASC_USB_MODE		(0x1)
 | |
| #define ASC_NORMAL_MODE		(0x0)
 | |
| 
 | |
| #define ASC_CLKDIV2		(0x1 << 6)
 | |
| #define ASC_CLKNODIV		(0x0 << 6)
 | |
| 
 | |
| #define ASC_CLK_ENABLE		(0x1 << 7)
 | |
| #define ASC_CLK_DISABLE		(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R0B */
 | |
| #define ASC_DEC_ENABLE		(0x1)
 | |
| #define ASC_DEC_DISABLE		(0x0)
 | |
| #define ASC_INT_ENABLE		(0x1 << 1)
 | |
| #define ASC_INT_DISABLE		(0x0 << 1)
 | |
| 
 | |
| #define ASC_INPUT_MUTE		(0x1 << 7)
 | |
| #define ASC_INPUT_ACTIVE	(0x0 << 7)
 | |
| #define ASC_INPUT_VOL_0DB	(0x0)
 | |
| 
 | |
| /* ACCELCODEC_R12 */
 | |
| #define ASC_LINE_INPUT		(0)
 | |
| #define ASC_MIC_INPUT		(1 << 7)
 | |
| 
 | |
| #define ASC_MIC_BOOST_0DB	(0)
 | |
| #define ASC_MIC_BOOST_20DB	(1 << 5)
 | |
| 
 | |
| /* ACCELCODEC_R13 */
 | |
| #define ASC_LPGAMXVOL_0DB	(0x5)
 | |
| /* the left channel PGA output is directly fed into the left mixer */
 | |
| #define ASC_LPGAMX_ENABLE	(0x1 << 3)
 | |
| #define ASC_LPGAMX_DISABLE	(0x0 << 3)
 | |
| #define ASC_ALMXVOL_0DB		(0x5 << 4)
 | |
| /* the left second line input is directly fed into the left mixer */
 | |
| #define ASC_ALMX_ENABLE		(0x1 << 7)
 | |
| #define ASC_ALMX_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R14 */
 | |
| #define ASC_RPGAMXVOL_0DB	(0x5)
 | |
| /* the right channel PGA output is directly fed into the right mixer */
 | |
| #define ASC_RPGAMX_ENABLE	(0x1 << 3)
 | |
| #define ASC_RPGAMX_DISABLE	(0x0 << 3)
 | |
| #define ASC_ARMXVOL_0DB		(0x5 << 4)
 | |
| /* the right second line input is directly fed into the right mixer */
 | |
| #define ASC_ARMX_ENABLE		(0x1 << 7)
 | |
| #define ASC_ARMX_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /*ACCELCODEC_R15 */
 | |
| /*the left differential signal from DAC is directly fed into the left mixer*/
 | |
| #define ASC_LDAMX_ENABLE	(0x1 << 2)
 | |
| #define ASC_LDAMX_DISABLE	(0x0 << 2)
 | |
| /* the right differential signal --> the right mixer */
 | |
| #define ASC_RDAMX_ENABLE	(0x1 << 3)
 | |
| #define ASC_RDAMX_DISABLE	(0x0 << 3)
 | |
| /* the left channel LPF is mute */
 | |
| #define ASC_LSCF_MUTE		(0x1 << 4)
 | |
| #define ASC_LSCF_ACTIVE		(0x0 << 4)
 | |
| /* the right channel LPF is mute */
 | |
| #define ASC_RSCF_MUTE		(0x1 << 5)
 | |
| #define ASC_RSCF_ACTIVE		(0x0 << 5)
 | |
| /* the left channel LPF output is fed into the left into the mixer */
 | |
| #define ASC_LLPFMX_ENABLE	(0x1 << 6)
 | |
| #define ASC_LLPFMX_DISABLE	(0x0 << 6)
 | |
| /* the right channel LPF output is fed into the right into the mixer. */
 | |
| #define ASC_RLPFMX_ENABLE	(0x1 << 7)
 | |
| #define ASC_RLPFMX_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R17/R18 */
 | |
| #define ASC_OUTPUT_MUTE		(0x1 << 6)
 | |
| #define ASC_OUTPUT_ACTIVE	(0x0 << 6)
 | |
| #define ASC_CROSSZERO_EN	(0x1 << 7)
 | |
| #define ASC_OUTPUT_VOL_0DB	(0x0F)
 | |
| /* ACCELCODEC_R19 */
 | |
| #define ASC_MONO_OUTPUT_MUTE	(0x1 << 7)
 | |
| #define ASC_MONO_OUTPUT_ACTIVE	(0x0 << 7)
 | |
| #define ASC_MONO_CROSSZERO_EN	(0x1 << 6)
 | |
| 
 | |
| /* ACCELCODEC_R1A */
 | |
| #define ASC_VMDSCL_SLOWEST	(0x0 << 2)
 | |
| #define ASC_VMDSCL_SLOW		(0x1 << 2)
 | |
| #define ASC_VMDSCL_FAST		(0x2 << 2)
 | |
| #define ASC_VMDSCL_FASTEST	(0x3 << 2)
 | |
| 
 | |
| #define ASC_MICBIAS_09		(0x1 << 4)
 | |
| #define ASC_MICBIAS_06		(0x0 << 4)
 | |
| 
 | |
| /* the right channel LPF output is fed to mono PA */
 | |
| #define ASC_L2M_ENABLE		(0x1 << 5)
 | |
| #define ASC_L2M_DISABLE		(0x0 << 5)
 | |
| /* the left channel LPF output is fed to mono PA */
 | |
| #define ASC_R2M_ENABLE		(0x1 << 6)
 | |
| #define ASC_R2M_DISABLE		(0x0 << 6)
 | |
| /* the capless connection is enable */
 | |
| #define ASC_CAPLESS_ENABLE	(0x1 << 7)
 | |
| #define ASC_CAPLESS_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R1C */
 | |
| /* the amplitude setting of the ASDM dither(div=vdd/48) */
 | |
| #define ASC_DITH_0_DIV		(0x0 << 3)
 | |
| #define ASC_DITH_2_DIV		(0x1 << 3)
 | |
| #define ASC_DITH_4_DIV		(0x2 << 3)
 | |
| #define ASC_DITH_8_DIV		(0x3 << 3)
 | |
| 
 | |
| /* the ASDM dither is enabled */
 | |
| #define ASC_DITH_ENABLE		(0x1 << 5)
 | |
| #define ASC_DITH_DISABLE	(0x0 << 5)
 | |
| 
 | |
| /* the ASDM DEM is enabled */
 | |
| #define ASC_DEM_ENABLE		(0x1 << 7)
 | |
| #define ASC_DEM_DISABLE		(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R1D */
 | |
| /* the VMID reference is powered down. VMID is connected to GND */
 | |
| #define ASC_PDVMID_ENABLE	(0x1)
 | |
| #define ASC_PDVMID_DISABLE	(0x0)
 | |
| /* the PGA S2D buffer is power down */
 | |
| #define ASC_PDSDL_ENABLE	(0x1 << 2)
 | |
| #define ASC_PDSDL_DISABLE	(0x0 << 2)
 | |
| /* the micphone input Op-Amp is power down */
 | |
| #define ASC_PDBSTL_ENABLE	(0x1 << 4)
 | |
| #define ASC_PDBSTL_DISABLE	(0x0 << 4)
 | |
| /* the PGA is power down */
 | |
| #define ASC_PDPGAL_ENABLE	(0x1 << 6)
 | |
| #define ASC_PDPGAL_DISABLE	(0x0 << 6)
 | |
| /* reference generator is power down */
 | |
| #define ASC_PDREF_ENABLE	(0x1 << 7)
 | |
| #define ASC_PDREF_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R1E */
 | |
| /* the right channel PA is power down */
 | |
| #define ASC_PDPAR_ENABLE	(0x1)
 | |
| #define ASC_PDPAR_DISABLE	(0x0)
 | |
| /* the left channel power amplifier is power down */
 | |
| #define ASC_PDPAL_ENABLE	(0x1 << 1)
 | |
| #define ASC_PDPAL_DISABLE	(0x0 << 1)
 | |
| /* the right mixer is power down */
 | |
| #define ASC_PDMIXR_ENABLE	(0x1 << 2)
 | |
| #define ASC_PDMIXR_DISABLE	(0x0 << 2)
 | |
| /* the left mixer is power down */
 | |
| #define ASC_PDMIXL_ENABLE	(0x1 << 3)
 | |
| #define ASC_PDMIXL_DISABLE	(0x0 << 3)
 | |
| /* the right RC LPF is power down */
 | |
| #define ASC_PDLPFR_ENABLE	(0x1 << 4)
 | |
| #define ASC_PDLPFR_DISABLE	(0x0 << 4)
 | |
| /* the left channel RC LPF is power down */
 | |
| #define ASC_PDLPFL_ENABLE	(0x1 << 5)
 | |
| #define ASC_PDLPFL_DISABLE	(0x0 << 5)
 | |
| /* the ASDM is power down */
 | |
| #define ASC_PDASDML_ENABLE	(0x1 << 7)
 | |
| #define ASC_PDASDML_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /* ACCELCODEC_R1F */
 | |
| /* the right channel DAC is power down */
 | |
| #define ASC_PDSCFR_ENABLE	(0x1 << 1)
 | |
| #define ASC_PDSCFR_DISABLE	(0x0 << 1)
 | |
| /* the left channel DAC is power down */
 | |
| #define ASC_PDSCFL_ENABLE	(0x1 << 2)
 | |
| #define ASC_PDSCFL_DISABLE	(0x0 << 2)
 | |
| /* the micbias is power down */
 | |
| #define ASC_PDMICB_ENABLE	(0x1 << 4)
 | |
| #define ASC_PDMICB_DISABLE	(0x0 << 4)
 | |
| /* the left channel LPF is power down */
 | |
| #define ASC_PDIB_ENABLE		(0x1 << 5)
 | |
| #define ASC_PDIB_DISABLE	(0x0 << 5)
 | |
| /* the mon mixer is power down */
 | |
| #define ASC_PDMIXM_ENABLE	(0x1 << 6)
 | |
| #define ASC_PDMIXM_DISABLE	(0x0 << 6)
 | |
| /* the mono PA is power down. */
 | |
| #define ASC_PDPAM_ENABLE	(0x1 << 7)
 | |
| #define ASC_PDPAM_DISABLE	(0x0 << 7)
 | |
| 
 | |
| /* left and right PA gain */
 | |
| #define LINE_2_MIXER_GAIN	(0x5)
 | |
| #define RK1000_CODEC_NUM_REG	0x20
 | |
| 
 | |
| #define GPIO_HIGH		1
 | |
| #define GPIO_LOW		0
 | |
| 
 | |
| /* rk1000 ctl register */
 | |
| #define CODEC_CON		0x01
 | |
| #define CODEC_ON		0X00
 | |
| #define CODEC_OFF		0x0d
 | |
| 
 | |
| #endif
 |