xref: /OK3568_Linux_fs/kernel/sound/soc/codecs/max9860.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Driver for the MAX9860 Mono Audio Voice Codec
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Author: Peter Rosin <peda@axentia.s>
6*4882a593Smuzhiyun  *         Copyright 2016 Axentia Technologies
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef _SND_SOC_MAX9860
10*4882a593Smuzhiyun #define _SND_SOC_MAX9860
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #define MAX9860_INTRSTATUS   0x00
13*4882a593Smuzhiyun #define MAX9860_MICREADBACK  0x01
14*4882a593Smuzhiyun #define MAX9860_INTEN        0x02
15*4882a593Smuzhiyun #define MAX9860_SYSCLK       0x03
16*4882a593Smuzhiyun #define MAX9860_AUDIOCLKHIGH 0x04
17*4882a593Smuzhiyun #define MAX9860_AUDIOCLKLOW  0x05
18*4882a593Smuzhiyun #define MAX9860_IFC1A        0x06
19*4882a593Smuzhiyun #define MAX9860_IFC1B        0x07
20*4882a593Smuzhiyun #define MAX9860_VOICEFLTR    0x08
21*4882a593Smuzhiyun #define MAX9860_DACATTN      0x09
22*4882a593Smuzhiyun #define MAX9860_ADCLEVEL     0x0a
23*4882a593Smuzhiyun #define MAX9860_DACGAIN      0x0b
24*4882a593Smuzhiyun #define MAX9860_MICGAIN      0x0c
25*4882a593Smuzhiyun #define MAX9860_RESERVED     0x0d
26*4882a593Smuzhiyun #define MAX9860_MICADC       0x0e
27*4882a593Smuzhiyun #define MAX9860_NOISEGATE    0x0f
28*4882a593Smuzhiyun #define MAX9860_PWRMAN       0x10
29*4882a593Smuzhiyun #define MAX9860_REVISION     0xff
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define MAX9860_MAX_REGISTER 0xff
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* INTRSTATUS */
34*4882a593Smuzhiyun #define MAX9860_CLD          0x80
35*4882a593Smuzhiyun #define MAX9860_SLD          0x40
36*4882a593Smuzhiyun #define MAX9860_ULK          0x20
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /* MICREADBACK */
39*4882a593Smuzhiyun #define MAX9860_NG           0xe0
40*4882a593Smuzhiyun #define MAX9860_AGC          0x1f
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /* INTEN */
43*4882a593Smuzhiyun #define MAX9860_ICLD         0x80
44*4882a593Smuzhiyun #define MAX9860_ISLD         0x40
45*4882a593Smuzhiyun #define MAX9860_IULK         0x20
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /* SYSCLK */
48*4882a593Smuzhiyun #define MAX9860_PSCLK        0x30
49*4882a593Smuzhiyun #define MAX9860_PSCLK_OFF    0x00
50*4882a593Smuzhiyun #define MAX9860_PSCLK_SHIFT  4
51*4882a593Smuzhiyun #define MAX9860_FREQ         0x06
52*4882a593Smuzhiyun #define MAX9860_FREQ_NORMAL  0x00
53*4882a593Smuzhiyun #define MAX9860_FREQ_12MHZ   0x02
54*4882a593Smuzhiyun #define MAX9860_FREQ_13MHZ   0x04
55*4882a593Smuzhiyun #define MAX9860_FREQ_19_2MHZ 0x06
56*4882a593Smuzhiyun #define MAX9860_16KHZ        0x01
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /* AUDIOCLKHIGH */
59*4882a593Smuzhiyun #define MAX9860_PLL          0x80
60*4882a593Smuzhiyun #define MAX9860_NHI          0x7f
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /* AUDIOCLKLOW */
63*4882a593Smuzhiyun #define MAX9860_NLO          0xff
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun /* IFC1A */
66*4882a593Smuzhiyun #define MAX9860_MASTER       0x80
67*4882a593Smuzhiyun #define MAX9860_WCI          0x40
68*4882a593Smuzhiyun #define MAX9860_DBCI         0x20
69*4882a593Smuzhiyun #define MAX9860_DDLY         0x10
70*4882a593Smuzhiyun #define MAX9860_HIZ          0x08
71*4882a593Smuzhiyun #define MAX9860_TDM          0x04
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* IFC1B */
74*4882a593Smuzhiyun #define MAX9860_ABCI         0x20
75*4882a593Smuzhiyun #define MAX9860_ADLY         0x10
76*4882a593Smuzhiyun #define MAX9860_ST           0x08
77*4882a593Smuzhiyun #define MAX9860_BSEL         0x07
78*4882a593Smuzhiyun #define MAX9860_BSEL_OFF     0x00
79*4882a593Smuzhiyun #define MAX9860_BSEL_64X     0x01
80*4882a593Smuzhiyun #define MAX9860_BSEL_48X     0x02
81*4882a593Smuzhiyun #define MAX9860_BSEL_PCLK_2  0x04
82*4882a593Smuzhiyun #define MAX9860_BSEL_PCLK_4  0x05
83*4882a593Smuzhiyun #define MAX9860_BSEL_PCLK_8  0x06
84*4882a593Smuzhiyun #define MAX9860_BSEL_PCLK_16 0x07
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* VOICEFLTR */
87*4882a593Smuzhiyun #define MAX9860_AVFLT        0xf0
88*4882a593Smuzhiyun #define MAX9860_AVFLT_SHIFT  4
89*4882a593Smuzhiyun #define MAX9860_AVFLT_COUNT  6
90*4882a593Smuzhiyun #define MAX9860_DVFLT        0x0f
91*4882a593Smuzhiyun #define MAX9860_DVFLT_SHIFT  0
92*4882a593Smuzhiyun #define MAX9860_DVFLT_COUNT  6
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /* DACATTN */
95*4882a593Smuzhiyun #define MAX9860_DVA          0xfe
96*4882a593Smuzhiyun #define MAX9860_DVA_SHIFT    1
97*4882a593Smuzhiyun #define MAX9860_DVA_MUTE     0x5e
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun /* ADCLEVEL */
100*4882a593Smuzhiyun #define MAX9860_ADCRL        0xf0
101*4882a593Smuzhiyun #define MAX9860_ADCRL_SHIFT  4
102*4882a593Smuzhiyun #define MAX9860_ADCLL        0x0f
103*4882a593Smuzhiyun #define MAX9860_ADCLL_SHIFT  0
104*4882a593Smuzhiyun #define MAX9860_ADCxL_MIN    15
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /* DACGAIN */
107*4882a593Smuzhiyun #define MAX9860_DVG          0x60
108*4882a593Smuzhiyun #define MAX9860_DVG_SHIFT    5
109*4882a593Smuzhiyun #define MAX9860_DVG_MAX      3
110*4882a593Smuzhiyun #define MAX9860_DVST         0x1f
111*4882a593Smuzhiyun #define MAX9860_DVST_SHIFT   0
112*4882a593Smuzhiyun #define MAX9860_DVST_MIN     31
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /* MICGAIN */
115*4882a593Smuzhiyun #define MAX9860_PAM          0x60
116*4882a593Smuzhiyun #define MAX9860_PAM_SHIFT    5
117*4882a593Smuzhiyun #define MAX9860_PAM_MAX      3
118*4882a593Smuzhiyun #define MAX9860_PGAM         0x1f
119*4882a593Smuzhiyun #define MAX9860_PGAM_SHIFT   0
120*4882a593Smuzhiyun #define MAX9860_PGAM_MIN     20
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun /* MICADC */
123*4882a593Smuzhiyun #define MAX9860_AGCSRC       0x80
124*4882a593Smuzhiyun #define MAX9860_AGCSRC_SHIFT 7
125*4882a593Smuzhiyun #define MAX9860_AGCSRC_COUNT 2
126*4882a593Smuzhiyun #define MAX9860_AGCRLS       0x70
127*4882a593Smuzhiyun #define MAX9860_AGCRLS_SHIFT 4
128*4882a593Smuzhiyun #define MAX9860_AGCRLS_COUNT 8
129*4882a593Smuzhiyun #define MAX9860_AGCATK       0x0c
130*4882a593Smuzhiyun #define MAX9860_AGCATK_SHIFT 2
131*4882a593Smuzhiyun #define MAX9860_AGCATK_COUNT 4
132*4882a593Smuzhiyun #define MAX9860_AGCHLD       0x03
133*4882a593Smuzhiyun #define MAX9860_AGCHLD_OFF   0x00
134*4882a593Smuzhiyun #define MAX9860_AGCHLD_SHIFT 0
135*4882a593Smuzhiyun #define MAX9860_AGCHLD_COUNT 4
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /* NOISEGATE */
138*4882a593Smuzhiyun #define MAX9860_ANTH         0xf0
139*4882a593Smuzhiyun #define MAX9860_ANTH_SHIFT   4
140*4882a593Smuzhiyun #define MAX9860_ANTH_MAX     15
141*4882a593Smuzhiyun #define MAX9860_AGCTH        0x0f
142*4882a593Smuzhiyun #define MAX9860_AGCTH_SHIFT  0
143*4882a593Smuzhiyun #define MAX9860_AGCTH_MIN    15
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /* PWRMAN */
146*4882a593Smuzhiyun #define MAX9860_SHDN         0x80
147*4882a593Smuzhiyun #define MAX9860_DACEN        0x08
148*4882a593Smuzhiyun #define MAX9860_DACEN_SHIFT  3
149*4882a593Smuzhiyun #define MAX9860_ADCLEN       0x02
150*4882a593Smuzhiyun #define MAX9860_ADCLEN_SHIFT 1
151*4882a593Smuzhiyun #define MAX9860_ADCREN       0x01
152*4882a593Smuzhiyun #define MAX9860_ADCREN_SHIFT 0
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun #endif /* _SND_SOC_MAX9860 */
155