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