xref: /linux/sound/soc/codecs/es9356.h (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
1*5d9cb740SZhang Yi /* SPDX-License-Identifier: GPL-2.0-only */
2*5d9cb740SZhang Yi 
3*5d9cb740SZhang Yi #ifndef __ES9356_H__
4*5d9cb740SZhang Yi #define __ES9356_H__
5*5d9cb740SZhang Yi 
6*5d9cb740SZhang Yi /*ES9356 Implementation-define*/
7*5d9cb740SZhang Yi #define ES9356_FLAGS_HP                         0x2003
8*5d9cb740SZhang Yi #define ES9356_CSM_RESET                        0x2020
9*5d9cb740SZhang Yi #define ES9356_FUC_RESET                        0x2021
10*5d9cb740SZhang Yi #define ES9356_STATE                            0x2022
11*5d9cb740SZhang Yi #define ES9356_VMID_TIME                        0x2023
12*5d9cb740SZhang Yi #define ES9356_STATE_TIME                       0x2024
13*5d9cb740SZhang Yi #define ES9356_HP_SPK_TIME                      0x2025
14*5d9cb740SZhang Yi #define ES9356_WP_ENABLE                        0x2026
15*5d9cb740SZhang Yi #define ES9356_DMIC_GPIO                        0x2027
16*5d9cb740SZhang Yi #define ES9356_ENDPOINT_MODE                    0x2028
17*5d9cb740SZhang Yi 
18*5d9cb740SZhang Yi /*HP DETECT*/
19*5d9cb740SZhang Yi #define ES9356_HP_TYPE                          0x2029
20*5d9cb740SZhang Yi #define ES9356_HP_DETECTTIME                    0x202A
21*5d9cb740SZhang Yi #define ES9356_MICBIAS_SEL                      0x202B
22*5d9cb740SZhang Yi #define ES9356_KEY_PRESS_TIME                   0x202C
23*5d9cb740SZhang Yi #define ES9356_KEY_RELEASE_TIME                 0x202D
24*5d9cb740SZhang Yi #define ES9356_KEY_HOLD_TIME                    0x202E
25*5d9cb740SZhang Yi #define ES9356_BTSEL_REF                        0x202F
26*5d9cb740SZhang Yi #define ES9356_BUTTON_CHARGE                    0x2030
27*5d9cb740SZhang Yi 
28*5d9cb740SZhang Yi #define ES9356_KEYD_DETECT                      0x2031
29*5d9cb740SZhang Yi #define ES9356_DPEN_TIME                        0x2032
30*5d9cb740SZhang Yi #define ES9356_TIMER_CHECK                      0x2033
31*5d9cb740SZhang Yi #define ES9356_IBIASGEN                         0x2041
32*5d9cb740SZhang Yi #define ES9356_VMID1SEL                         0x2042
33*5d9cb740SZhang Yi #define ES9356_VMID1STL                         0x2043
34*5d9cb740SZhang Yi #define ES9356_VMID2SEL                         0x2044
35*5d9cb740SZhang Yi #define ES9356_VMID2STL                         0x2045
36*5d9cb740SZhang Yi #define ES9356_VSEL                             0x2046
37*5d9cb740SZhang Yi #define ES9356_MICBIAS_CTL                      0x2047
38*5d9cb740SZhang Yi #define ES9356_HPDETECT_CTL                     0x2048
39*5d9cb740SZhang Yi #define ES9356_MICBIAS_RES                      0x2049
40*5d9cb740SZhang Yi 
41*5d9cb740SZhang Yi /*CLK*/
42*5d9cb740SZhang Yi #define ES9356_CLK_SEL                          0x2050
43*5d9cb740SZhang Yi #define ES9356_CLK_CTL                          0x2051
44*5d9cb740SZhang Yi #define ES9356_DETCLK_CTL                       0x2052
45*5d9cb740SZhang Yi #define ES9356_CPCLK_CTL                        0x2053
46*5d9cb740SZhang Yi #define ES9356_SPKCLK_CTL                       0x2054
47*5d9cb740SZhang Yi #define ES9356_PRE_DIV_CTL                      0x2055
48*5d9cb740SZhang Yi #define ES9356_DLL_MODE                         0x2056
49*5d9cb740SZhang Yi #define ES9356_ANACLK_SEL                       0x2057
50*5d9cb740SZhang Yi #define ES9356_OSRCLK_SEL                       0x2058
51*5d9cb740SZhang Yi #define ES9356_DSPCLK_SEL                       0x2059
52*5d9cb740SZhang Yi #define ES9356_SPK9M_MODE                       0x205a
53*5d9cb740SZhang Yi 
54*5d9cb740SZhang Yi /*ADC DIG CTL*/
55*5d9cb740SZhang Yi #define ES9356_DMIC_POL                         0x2061
56*5d9cb740SZhang Yi #define ES9356_ADC_SWAP                         0x2062
57*5d9cb740SZhang Yi #define ES9356_ADC_OSR                          0x2063
58*5d9cb740SZhang Yi #define ES9356_ADC_OSRGAIN                      0x2064
59*5d9cb740SZhang Yi #define ES9356_ADC_CLEARRAM                     0x2065
60*5d9cb740SZhang Yi #define ES9356_ADC_RAMP                         0x2066
61*5d9cb740SZhang Yi #define ES9356_ADC_HPF1                         0x2067
62*5d9cb740SZhang Yi #define ES9356_ADC_HPF2                         0x2068
63*5d9cb740SZhang Yi #define ES9356_ADC_ALC                          0x206C
64*5d9cb740SZhang Yi #define ES9356_ALC_LEVEL                        0x206D
65*5d9cb740SZhang Yi #define ES9356_ALC_RAMP_WINSIZE                 0x206E
66*5d9cb740SZhang Yi 
67*5d9cb740SZhang Yi /*ADC ANA CTL*/
68*5d9cb740SZhang Yi #define ES9356_ADC_REF_EN                       0x2080
69*5d9cb740SZhang Yi #define ES9356_ADC_AMIC_CTL                     0x2081
70*5d9cb740SZhang Yi #define ES9356_ADC_ANA                          0x2082
71*5d9cb740SZhang Yi #define ES9356_PGA_CTL                          0x2083
72*5d9cb740SZhang Yi #define ES9356_ADC_INT                          0x2084
73*5d9cb740SZhang Yi #define ES9356_ADC_VCM                          0x2085
74*5d9cb740SZhang Yi #define ES9356_ADC_VRPBIAS                      0x2086
75*5d9cb740SZhang Yi #define ES9356_ADC_LP                           0x2087
76*5d9cb740SZhang Yi 
77*5d9cb740SZhang Yi /*DAC DIG CTL*/
78*5d9cb740SZhang Yi #define ES9356_DAC_FSMODE                       0x2090
79*5d9cb740SZhang Yi #define ES9356_DAC_OSR                          0x2091
80*5d9cb740SZhang Yi #define ES9356_DAC_INV                          0x2092
81*5d9cb740SZhang Yi #define ES9356_DAC_RAMP                         0x2093
82*5d9cb740SZhang Yi #define ES9356_DAC_VPPSCALE                     0x2094
83*5d9cb740SZhang Yi #define ES9356_DAC_SWAP                         0x2097
84*5d9cb740SZhang Yi #define ES9356_SPKCMP_VPPSC                     0x20A0
85*5d9cb740SZhang Yi #define ES9356_CALIBRATION_TIME                 0x20A1
86*5d9cb740SZhang Yi #define ES9356_CALIBRATION_SETTING              0x20A2
87*5d9cb740SZhang Yi #define ES9356_DAC_OFFSET_LH                    0x20A3
88*5d9cb740SZhang Yi #define ES9356_DAC_OFFSET_LL                    0x20A4
89*5d9cb740SZhang Yi #define ES9356_DAC_OFFSET_RH                    0x20A5
90*5d9cb740SZhang Yi #define ES9356_DAC_OFFSET_RL                    0x20A6
91*5d9cb740SZhang Yi 
92*5d9cb740SZhang Yi /*DAC ANA CTL*/
93*5d9cb740SZhang Yi #define ES9356_DAC_REF_EN                       0x20B0
94*5d9cb740SZhang Yi #define ES9356_DAC_ENABLE                       0x20B1
95*5d9cb740SZhang Yi #define ES9356_DAC_VROI                         0x20B2
96*5d9cb740SZhang Yi #define ES9356_DAC_LP                           0x20B3
97*5d9cb740SZhang Yi 
98*5d9cb740SZhang Yi /*HP CTL*/
99*5d9cb740SZhang Yi #define ES9356_CHARGEPUMP_CTL                   0x20C0
100*5d9cb740SZhang Yi #define ES9356_CPLDO_CTL                        0x20C1
101*5d9cb740SZhang Yi #define ES9356_HP_REF_CTL                       0x20C2
102*5d9cb740SZhang Yi #define ES9356_HP_IBIAS                         0x20C3
103*5d9cb740SZhang Yi #define ES9356_HP_EN                            0x20C4
104*5d9cb740SZhang Yi #define ES9356_HP_VOLUME                        0x20C5
105*5d9cb740SZhang Yi #define ES9356_HP_LP                            0x20C6
106*5d9cb740SZhang Yi 
107*5d9cb740SZhang Yi /*SPK CTL*/
108*5d9cb740SZhang Yi #define ES9356_SPKLDO_CTL                       0x20D0
109*5d9cb740SZhang Yi #define ES9356_CLASSD_CTL                       0x20D1
110*5d9cb740SZhang Yi #define ES9356_SPK_HBDG                         0x20D5
111*5d9cb740SZhang Yi #define ES9356_SPK_VOLUME                       0x20D7
112*5d9cb740SZhang Yi #define ES9356_SPK_SCP                          0x20D8
113*5d9cb740SZhang Yi #define ES9356_SPK_DT                           0x20D9
114*5d9cb740SZhang Yi #define ES9356_SPK_OTP                          0x20DA
115*5d9cb740SZhang Yi #define ES9356_SPKBIAS_COMP                     0x20DB
116*5d9cb740SZhang Yi 
117*5d9cb740SZhang Yi /* ES9356 SDCA Control - function number */
118*5d9cb740SZhang Yi #define FUNC_NUM_UAJ                            0x01
119*5d9cb740SZhang Yi #define FUNC_NUM_MIC                            0x02
120*5d9cb740SZhang Yi #define FUNC_NUM_AMP                            0x03
121*5d9cb740SZhang Yi #define FUNC_NUM_HID                            0x04
122*5d9cb740SZhang Yi 
123*5d9cb740SZhang Yi /* ES9356 SDCA entity */
124*5d9cb740SZhang Yi #define ES9356_SDCA_ENT0                        0x00
125*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_PDE11                   0x03
126*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU11                    0x04
127*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_XU12                    0x05
128*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU113                   0x07
129*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_CS113                   0x09
130*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_PPU11                   0x0C
131*5d9cb740SZhang Yi 
132*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_CS21                    0x02
133*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_PPU21                   0x03
134*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU21                    0X04
135*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_XU22                    0x06
136*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_SAPU29                  0x03
137*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_PDE23                   0x0B
138*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_HID01                   0x01
139*5d9cb740SZhang Yi 
140*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_CS41                    0x02
141*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU35                    0x04
142*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_XU42                    0x06
143*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU41                    0x07
144*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_PDE47                   0x0E
145*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_IT33                    0x0F
146*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_PDE34                   0x10
147*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU33                    0x11
148*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_XU36                    0x13
149*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_FU36                    0x15
150*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_CS36                    0x17
151*5d9cb740SZhang Yi #define ES9356_SDCA_ENT_GE35                    0x18
152*5d9cb740SZhang Yi 
153*5d9cb740SZhang Yi /* ES9356 SDCA control */
154*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_SAMPLE_FREQ_INDEX       0x10
155*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_FU_MUTE                 0x01
156*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_FU_VOLUME               0x02
157*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_HIDTX_CURRENT_OWNER     0x10
158*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_SELECTED_MODE           0x01
159*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_DETECTED_MODE           0x02
160*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_REQ_POWER_STATE         0x01
161*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_FU_CH_GAIN              0x0b
162*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_FUNC_STATUS             0x10
163*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_ACTUAL_POWER_STATE      0x10
164*5d9cb740SZhang Yi #define ES9356_SDCA_CTL_POSTURE_NUMBER          0x00
165*5d9cb740SZhang Yi 
166*5d9cb740SZhang Yi /* ES9356 SDCA channel */
167*5d9cb740SZhang Yi #define CH_L	0x01
168*5d9cb740SZhang Yi #define CH_R	0x02
169*5d9cb740SZhang Yi #define MBQ	0x2000
170*5d9cb740SZhang Yi 
171*5d9cb740SZhang Yi /* ES9356 HID*/
172*5d9cb740SZhang Yi #define ES9356_BUF_ADDR_HID     0x44000000
173*5d9cb740SZhang Yi #define ES9356_HID_BYTE2        0x44000001
174*5d9cb740SZhang Yi #define ES9356_HID_BYTE3        0x44000002
175*5d9cb740SZhang Yi #define ES9356_HID_BYTE4        0x44000003
176*5d9cb740SZhang Yi 
177*5d9cb740SZhang Yi /* ES9356 Volume Setting*/
178*5d9cb740SZhang Yi #define ES9356_VU_BASE          768
179*5d9cb740SZhang Yi #define ES9356_OFFSET_HIGH      0x07F8
180*5d9cb740SZhang Yi #define ES9356_OFFSET_LOW       0x0007
181*5d9cb740SZhang Yi #define ES9356_DEFAULT_VOLUME   0x00
182*5d9cb740SZhang Yi #define	ES9356_VOLUME_STEP      32
183*5d9cb740SZhang Yi #define ES9356_VOLUME_MIN       -768
184*5d9cb740SZhang Yi #define	ES9356_VOLUME_MAX       285
185*5d9cb740SZhang Yi #define	ES9356_AMIC_GAIN_STEP   768
186*5d9cb740SZhang Yi #define	ES9356_DMIC_GAIN_STEP   1536
187*5d9cb740SZhang Yi #define ES9356_GAIN_MIN         0
188*5d9cb740SZhang Yi #define	ES9356_AMIC_GAIN_MAX    10
189*5d9cb740SZhang Yi #define	ES9356_DMIC_GAIN_MAX    3
190*5d9cb740SZhang Yi 
191*5d9cb740SZhang Yi enum {
192*5d9cb740SZhang Yi 	ES9356_DMIC = 1, /* For dmic */
193*5d9cb740SZhang Yi 	ES9356_JACK_IN, /* For headset mic */
194*5d9cb740SZhang Yi 	ES9356_AMP, /* For speaker */
195*5d9cb740SZhang Yi 	ES9356_JACK_OUT, /* For headphone */
196*5d9cb740SZhang Yi };
197*5d9cb740SZhang Yi 
198*5d9cb740SZhang Yi enum {
199*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_16000HZ,
200*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_24000HZ,
201*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_32000HZ,
202*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_44100HZ,
203*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_48000HZ,
204*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_88200HZ,
205*5d9cb740SZhang Yi 	ES9356_SDCA_RATE_96000HZ,
206*5d9cb740SZhang Yi };
207*5d9cb740SZhang Yi 
208*5d9cb740SZhang Yi #endif
209