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