xref: /OK3568_Linux_fs/kernel/sound/soc/codecs/rk817_codec.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2018 Rockchip Electronics Co. Ltd.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify
5*4882a593Smuzhiyun  * it under the terms of the GNU General Public License as published by
6*4882a593Smuzhiyun  * the Free Software Foundation; either version 2 of the License, or
7*4882a593Smuzhiyun  * (at your option) any later version.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful,
10*4882a593Smuzhiyun  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11*4882a593Smuzhiyun  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12*4882a593Smuzhiyun  * GNU General Public License for more details.
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifndef __RK817_CODEC_H__
16*4882a593Smuzhiyun #define __RK817_CODEC_H__
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /* codec register */
19*4882a593Smuzhiyun #define RK817_CODEC_BASE		0x0000
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #define RK817_CODEC_DTOP_VUCTL		(RK817_CODEC_BASE + 0x12)
22*4882a593Smuzhiyun #define RK817_CODEC_DTOP_VUCTIME	(RK817_CODEC_BASE + 0x13)
23*4882a593Smuzhiyun #define RK817_CODEC_DTOP_LPT_SRST	(RK817_CODEC_BASE + 0x14)
24*4882a593Smuzhiyun #define RK817_CODEC_DTOP_DIGEN_CLKE	(RK817_CODEC_BASE + 0x15)
25*4882a593Smuzhiyun #define RK817_CODEC_AREF_RTCFG0		(RK817_CODEC_BASE + 0x16)
26*4882a593Smuzhiyun #define RK817_CODEC_AREF_RTCFG1		(RK817_CODEC_BASE + 0x17)
27*4882a593Smuzhiyun #define RK817_CODEC_AADC_CFG0		(RK817_CODEC_BASE + 0x18)
28*4882a593Smuzhiyun #define RK817_CODEC_AADC_CFG1		(RK817_CODEC_BASE + 0x19)
29*4882a593Smuzhiyun #define RK817_CODEC_DADC_VOLL		(RK817_CODEC_BASE + 0x1a)
30*4882a593Smuzhiyun #define RK817_CODEC_DADC_VOLR		(RK817_CODEC_BASE + 0x1b)
31*4882a593Smuzhiyun #define RK817_CODEC_DADC_SR_ACL0	(RK817_CODEC_BASE + 0x1e)
32*4882a593Smuzhiyun #define RK817_CODEC_DADC_ALC1		(RK817_CODEC_BASE + 0x1f)
33*4882a593Smuzhiyun #define RK817_CODEC_DADC_ALC2		(RK817_CODEC_BASE + 0x20)
34*4882a593Smuzhiyun #define RK817_CODEC_DADC_NG		(RK817_CODEC_BASE + 0x21)
35*4882a593Smuzhiyun #define RK817_CODEC_DADC_HPF		(RK817_CODEC_BASE + 0x22)
36*4882a593Smuzhiyun #define RK817_CODEC_DADC_RVOLL		(RK817_CODEC_BASE + 0x23)
37*4882a593Smuzhiyun #define RK817_CODEC_DADC_RVOLR		(RK817_CODEC_BASE + 0x24)
38*4882a593Smuzhiyun #define RK817_CODEC_AMIC_CFG0		(RK817_CODEC_BASE + 0x27)
39*4882a593Smuzhiyun #define RK817_CODEC_AMIC_CFG1		(RK817_CODEC_BASE + 0x28)
40*4882a593Smuzhiyun #define RK817_CODEC_DMIC_PGA_GAIN	(RK817_CODEC_BASE + 0x29)
41*4882a593Smuzhiyun #define RK817_CODEC_DMIC_LMT1		(RK817_CODEC_BASE + 0x2a)
42*4882a593Smuzhiyun #define RK817_CODEC_DMIC_LMT2		(RK817_CODEC_BASE + 0x2b)
43*4882a593Smuzhiyun #define RK817_CODEC_DMIC_NG1		(RK817_CODEC_BASE + 0x2c)
44*4882a593Smuzhiyun #define RK817_CODEC_DMIC_NG2		(RK817_CODEC_BASE + 0x2d)
45*4882a593Smuzhiyun #define RK817_CODEC_ADAC_CFG0		(RK817_CODEC_BASE + 0x2e)
46*4882a593Smuzhiyun #define RK817_CODEC_ADAC_CFG1		(RK817_CODEC_BASE + 0x2f)
47*4882a593Smuzhiyun #define RK817_CODEC_DDAC_POPD_DACST	(RK817_CODEC_BASE + 0x30)
48*4882a593Smuzhiyun #define RK817_CODEC_DDAC_VOLL		(RK817_CODEC_BASE + 0x31)
49*4882a593Smuzhiyun #define RK817_CODEC_DDAC_VOLR		(RK817_CODEC_BASE + 0x32)
50*4882a593Smuzhiyun #define RK817_CODEC_DDAC_SR_LMT0	(RK817_CODEC_BASE + 0x35)
51*4882a593Smuzhiyun #define RK817_CODEC_DDAC_LMT1		(RK817_CODEC_BASE + 0x36)
52*4882a593Smuzhiyun #define RK817_CODEC_DDAC_LMT2		(RK817_CODEC_BASE + 0x37)
53*4882a593Smuzhiyun #define RK817_CODEC_DDAC_MUTE_MIXCTL	(RK817_CODEC_BASE + 0x38)
54*4882a593Smuzhiyun #define RK817_CODEC_DDAC_RVOLL		(RK817_CODEC_BASE + 0x39)
55*4882a593Smuzhiyun #define RK817_CODEC_DDAC_RVOLR		(RK817_CODEC_BASE + 0x3a)
56*4882a593Smuzhiyun #define RK817_CODEC_AHP_ANTI0		(RK817_CODEC_BASE + 0x3b)
57*4882a593Smuzhiyun #define RK817_CODEC_AHP_ANTI1		(RK817_CODEC_BASE + 0x3c)
58*4882a593Smuzhiyun #define RK817_CODEC_AHP_CFG0		(RK817_CODEC_BASE + 0x3d)
59*4882a593Smuzhiyun #define RK817_CODEC_AHP_CFG1		(RK817_CODEC_BASE + 0x3e)
60*4882a593Smuzhiyun #define RK817_CODEC_AHP_CP		(RK817_CODEC_BASE + 0x3f)
61*4882a593Smuzhiyun #define RK817_CODEC_ACLASSD_CFG1	(RK817_CODEC_BASE + 0x40)
62*4882a593Smuzhiyun #define RK817_CODEC_ACLASSD_CFG2	(RK817_CODEC_BASE + 0x41)
63*4882a593Smuzhiyun #define RK817_CODEC_APLL_CFG0		(RK817_CODEC_BASE + 0x42)
64*4882a593Smuzhiyun #define RK817_CODEC_APLL_CFG1		(RK817_CODEC_BASE + 0x43)
65*4882a593Smuzhiyun #define RK817_CODEC_APLL_CFG2		(RK817_CODEC_BASE + 0x44)
66*4882a593Smuzhiyun #define RK817_CODEC_APLL_CFG3		(RK817_CODEC_BASE + 0x45)
67*4882a593Smuzhiyun #define RK817_CODEC_APLL_CFG4		(RK817_CODEC_BASE + 0x46)
68*4882a593Smuzhiyun #define RK817_CODEC_APLL_CFG5		(RK817_CODEC_BASE + 0x47)
69*4882a593Smuzhiyun #define RK817_CODEC_DI2S_CKM		(RK817_CODEC_BASE + 0x48)
70*4882a593Smuzhiyun #define RK817_CODEC_DI2S_RSD		(RK817_CODEC_BASE + 0x49)
71*4882a593Smuzhiyun #define RK817_CODEC_DI2S_RXCR1		(RK817_CODEC_BASE + 0x4a)
72*4882a593Smuzhiyun #define RK817_CODEC_DI2S_RXCR2		(RK817_CODEC_BASE + 0x4b)
73*4882a593Smuzhiyun #define RK817_CODEC_DI2S_RXCMD_TSD	(RK817_CODEC_BASE + 0x4c)
74*4882a593Smuzhiyun #define RK817_CODEC_DI2S_TXCR1		(RK817_CODEC_BASE + 0x4d)
75*4882a593Smuzhiyun #define RK817_CODEC_DI2S_TXCR2		(RK817_CODEC_BASE + 0x4e)
76*4882a593Smuzhiyun #define RK817_CODEC_DI2S_TXCR3_TXCMD	(RK817_CODEC_BASE + 0x4f)
77*4882a593Smuzhiyun #define RK817_PMIC_CHIP_NAME		(RK817_CODEC_BASE + 0xed)
78*4882a593Smuzhiyun #define RK817_PMIC_CHIP_VER		(RK817_CODEC_BASE + 0xee)
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun /* RK817_CODEC_DTOP_DIGEN_CLKE */
81*4882a593Smuzhiyun #define ADC_DIG_CLK_MASK		(0xf << 4)
82*4882a593Smuzhiyun #define ADC_DIG_CLK_SFT			4
83*4882a593Smuzhiyun #define ADC_DIG_CLK_DIS			(0x0 << 4)
84*4882a593Smuzhiyun #define ADC_DIG_CLK_EN			(0xf << 4)
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #define I2STX_CKE_EN			(0x1 << 6)
87*4882a593Smuzhiyun #define I2STX_CKE_DIS			(0x0 << 6)
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define DAC_DIG_CLK_MASK		(0xf << 0)
90*4882a593Smuzhiyun #define DAC_DIG_CLK_SFT			0
91*4882a593Smuzhiyun #define DAC_DIG_CLK_DIS			(0x0 << 0)
92*4882a593Smuzhiyun #define DAC_DIG_CLK_EN			(0xf << 0)
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /* RK817_CODEC_APLL_CFG5 */
95*4882a593Smuzhiyun #define PLL_PW_DOWN			(0x01 << 0)
96*4882a593Smuzhiyun #define PLL_PW_UP			(0x00 << 0)
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun /* RK817_CODEC_DI2S_CKM */
99*4882a593Smuzhiyun #define PDM_EN_MASK			(0x1 << 3)
100*4882a593Smuzhiyun #define PDM_EN_SFT			3
101*4882a593Smuzhiyun #define PDM_EN_DISABLE			(0x0 << 3)
102*4882a593Smuzhiyun #define PDM_EN_ENABLE			(0x1 << 3)
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun #define SCK_EN_ENABLE			(0x1 << 2)
105*4882a593Smuzhiyun #define SCK_EN_DISABLE			(0x0 << 2)
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define RK817_I2S_MODE_MASK		(0x1 << 0)
108*4882a593Smuzhiyun #define RK817_I2S_MODE_SFT		0
109*4882a593Smuzhiyun #define RK817_I2S_MODE_MST		(0x1 << 0)
110*4882a593Smuzhiyun #define RK817_I2S_MODE_SLV		(0x0 << 0)
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /* RK817_CODEC_DDAC_SR_LMT0 */
113*4882a593Smuzhiyun #define DACSRT_MASK			(0x7 << 0)
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun /* RK817_CODEC_DDAC_MUTE_MIXCTL */
116*4882a593Smuzhiyun #define DACMT_ENABLE			(0x1 << 0)
117*4882a593Smuzhiyun #define DACMT_DISABLE			(0x0 << 0)
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* RK817_CODEC_DI2S_RXCR2 */
120*4882a593Smuzhiyun #define VDW_RX_24BITS			(0x17)
121*4882a593Smuzhiyun #define VDW_RX_16BITS			(0x0f)
122*4882a593Smuzhiyun /* RK817_CODEC_DI2S_TXCR2 */
123*4882a593Smuzhiyun #define VDW_TX_24BITS			(0x17)
124*4882a593Smuzhiyun #define VDW_TX_16BITS			(0x0f)
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun /* RK817_CODEC_AHP_CFG1 */
127*4882a593Smuzhiyun #define HP_ANTIPOP_ENABLE		(0x1 << 4)
128*4882a593Smuzhiyun #define HP_ANTIPOP_DISABLE		(0x0 << 4)
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* RK817_CODEC_ADAC_CFG1 */
131*4882a593Smuzhiyun #define PWD_DACBIAS_MASK		(0x1 << 3)
132*4882a593Smuzhiyun #define PWD_DACBIAS_SFT			3
133*4882a593Smuzhiyun #define PWD_DACBIAS_DOWN		(0x1 << 3)
134*4882a593Smuzhiyun #define PWD_DACBIAS_ON			(0x0 << 3)
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun #define PWD_DACD_MASK			(0x1 << 2)
137*4882a593Smuzhiyun #define PWD_DACD_SFT			2
138*4882a593Smuzhiyun #define PWD_DACD_DOWN			(0x1 << 2)
139*4882a593Smuzhiyun #define PWD_DACD_ON			(0x0 << 2)
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #define PWD_DACL_MASK			(0x1 << 1)
142*4882a593Smuzhiyun #define PWD_DACL_SFT			1
143*4882a593Smuzhiyun #define PWD_DACL_DOWN			(0x1 << 1)
144*4882a593Smuzhiyun #define PWD_DACL_ON			(0x0 << 1)
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun #define PWD_DACR_MASK			(0x1 << 0)
147*4882a593Smuzhiyun #define PWD_DACR_SFT			0
148*4882a593Smuzhiyun #define PWD_DACR_DOWN			(0x1 << 0)
149*4882a593Smuzhiyun #define PWD_DACR_ON			(0x0 << 0)
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun /* RK817_CODEC_AADC_CFG0 */
152*4882a593Smuzhiyun #define ADC_L_PWD_MASK			(0x1 << 7)
153*4882a593Smuzhiyun #define ADC_L_PWD_SFT			7
154*4882a593Smuzhiyun #define ADC_L_PWD_DIS			(0x0 << 7)
155*4882a593Smuzhiyun #define ADC_L_PWD_EN			(0x1 << 7)
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun #define ADC_R_PWD_MASK			(0x1 << 6)
158*4882a593Smuzhiyun #define ADC_R_PWD_SFT			6
159*4882a593Smuzhiyun #define ADC_R_PWD_DIS			(0x0 << 6)
160*4882a593Smuzhiyun #define ADC_R_PWD_EN			(0x1 << 6)
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun /* RK817_CODEC_AMIC_CFG0 */
163*4882a593Smuzhiyun #define MIC_DIFF_MASK			(0x1 << 7)
164*4882a593Smuzhiyun #define MIC_DIFF_SFT			7
165*4882a593Smuzhiyun #define MIC_DIFF_DIS			(0x0 << 7)
166*4882a593Smuzhiyun #define MIC_DIFF_EN			(0x1 << 7)
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun #define PWD_PGA_L_MASK			(0x1 << 5)
169*4882a593Smuzhiyun #define PWD_PGA_L_SFT			5
170*4882a593Smuzhiyun #define PWD_PGA_L_DIS			(0x0 << 5)
171*4882a593Smuzhiyun #define PWD_PGA_L_EN			(0x1 << 5)
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define PWD_PGA_R_MASK			(0x1 << 4)
174*4882a593Smuzhiyun #define PWD_PGA_R_SFT			4
175*4882a593Smuzhiyun #define PWD_PGA_R_DIS			(0x0 << 4)
176*4882a593Smuzhiyun #define PWD_PGA_R_EN			(0x1 << 4)
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun enum {
179*4882a593Smuzhiyun 	RK817_HIFI,
180*4882a593Smuzhiyun 	RK817_VOICE,
181*4882a593Smuzhiyun };
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun enum {
184*4882a593Smuzhiyun 	RK817_MONO = 1,
185*4882a593Smuzhiyun 	RK817_STEREO,
186*4882a593Smuzhiyun };
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun enum {
189*4882a593Smuzhiyun 	OFF,
190*4882a593Smuzhiyun 	RCV,
191*4882a593Smuzhiyun 	SPK_PATH,
192*4882a593Smuzhiyun 	HP_PATH,
193*4882a593Smuzhiyun 	HP_NO_MIC,
194*4882a593Smuzhiyun 	BT,
195*4882a593Smuzhiyun 	SPK_HP,
196*4882a593Smuzhiyun 	RING_SPK,
197*4882a593Smuzhiyun 	RING_HP,
198*4882a593Smuzhiyun 	RING_HP_NO_MIC,
199*4882a593Smuzhiyun 	RING_SPK_HP,
200*4882a593Smuzhiyun };
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun enum {
203*4882a593Smuzhiyun 	MIC_OFF,
204*4882a593Smuzhiyun 	MAIN_MIC,
205*4882a593Smuzhiyun 	HANDS_FREE_MIC,
206*4882a593Smuzhiyun 	BT_SCO_MIC,
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun struct rk817_reg_val_typ {
210*4882a593Smuzhiyun 	unsigned int reg;
211*4882a593Smuzhiyun 	unsigned int value;
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun struct rk817_init_bit_typ {
215*4882a593Smuzhiyun 	unsigned int reg;
216*4882a593Smuzhiyun 	unsigned int power_bit;
217*4882a593Smuzhiyun 	unsigned int init_bit;
218*4882a593Smuzhiyun };
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun #endif /* __RK817_CODEC_H__ */
221