1 /* Copyright (c) 2016, The Linux Foundation. All rights reserved.
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
15 #include "msm8916-wcd-registers.h"
17 #define MSM8916_WCD_NUM_REGISTERS 0x6FF
18 #define MSM8916_WCD_MAX_REGISTER (MSM8916_WCD_NUM_REGISTERS-1)
19 #define MSM8916_WCD_REG_VAL(reg, val) {reg, 0, val}
20 #define MSM8916_WCD_REG_VAL_MASK 0xFF
21 #define MSM8916_WCD_DIGITAL_REG(reg) ((reg ^ 0x0200) & 0x0FFF)
22 #define MSM8916_WCD_IS_DIGITAL_REG(reg) \
23 (((reg >= 0x200) && (reg <= 0x4FF)) ? 1 : 0)
24 #define MSM8916_WCD_IS_TOMBAK_REG(reg) \
25 (((reg >= 0x000) && (reg <= 0x1FF)) ? 1 : 0)
26 #define TOMBAK_VERSION_1_0 0
27 #define TOMBAK_IS_1_0(ver) ((ver == TOMBAK_VERSION_1_0) ? 1 : 0)
29 struct msm8916_wcd_reg_mask_val {
35 const u8 msm8916_wcd_reg_readonly[MSM8916_WCD_NUM_REGISTERS] = {
36 [CDC_D_REVISION1] = 1,
37 [CDC_D_REVISION2] = 1,
38 [CDC_D_PERPH_TYPE] = 1,
39 [CDC_D_PERPH_SUBTYPE] = 1,
40 [CDC_D_INT_RT_STS] = 1,
41 [CDC_D_INT_SET_TYPE] = 1,
42 [CDC_D_INT_POLARITY_HIGH] = 1,
43 [CDC_D_INT_POLARITY_LOW] = 1,
44 [CDC_D_INT_LATCHED_STS] = 1,
45 [CDC_D_INT_PENDING_STS] = 1,
46 [CDC_D_PIN_STATUS] = 1,
47 [CDC_A_REVISION1] = 1,
48 [CDC_A_REVISION2] = 1,
49 [CDC_A_REVISION3] = 1,
50 [CDC_A_REVISION4] = 1,
51 [CDC_A_PERPH_TYPE] = 1,
52 [CDC_A_PERPH_SUBTYPE] = 1,
53 [CDC_A_INT_RT_STS] = 1,
54 [CDC_A_INT_SET_TYPE] = 1,
55 [CDC_A_INT_POLARITY_HIGH] = 1,
56 [CDC_A_INT_POLARITY_LOW] = 1,
57 [CDC_A_INT_LATCHED_STS] = 1,
58 [CDC_A_INT_PENDING_STS] = 1,
59 [CDC_A_MBHC_BTN_RESULT] = 1,
60 [CDC_A_MBHC_ZDET_ELECT_RESULT] = 1,
61 [CDC_A_RX_HPH_STATUS] = 1,
62 [CDC_A_RX_EAR_STATUS] = 1,
63 [CDC_A_SPKR_SAR_STATUS] = 1,
64 [CDC_A_SPKR_DRV_STATUS] = 1,
65 [LPASS_CDC_RX1_B1_CTL] = 1,
66 [LPASS_CDC_RX2_B1_CTL] = 1,
67 [LPASS_CDC_RX3_B1_CTL] = 1,
68 [LPASS_CDC_RX1_B6_CTL] = 1,
69 [LPASS_CDC_RX2_B6_CTL] = 1,
70 [LPASS_CDC_RX3_B6_CTL] = 1,
71 [LPASS_CDC_TX1_VOL_CTL_CFG] = 1,
72 [LPASS_CDC_TX2_VOL_CTL_CFG] = 1,
73 [LPASS_CDC_IIR1_COEF_B1_CTL] = 1,
74 [LPASS_CDC_IIR2_COEF_B1_CTL] = 1,
75 [LPASS_CDC_CLK_MCLK_CTL] = 1,
76 [LPASS_CDC_CLK_PDM_CTL] = 1,
79 #define MSM8916_REG_POR(reg) [reg] = reg##_POR
81 u8 msm8916_wcd_reset_reg_defaults[MSM8916_WCD_NUM_REGISTERS] = {
82 MSM8916_REG_POR(CDC_D_REVISION1),
83 MSM8916_REG_POR(CDC_D_REVISION2),
84 MSM8916_REG_POR(CDC_D_PERPH_TYPE),
85 MSM8916_REG_POR(CDC_D_PERPH_SUBTYPE),
86 MSM8916_REG_POR(CDC_D_INT_RT_STS),
87 MSM8916_REG_POR(CDC_D_INT_SET_TYPE),
88 MSM8916_REG_POR(CDC_D_INT_POLARITY_HIGH),
89 MSM8916_REG_POR(CDC_D_INT_POLARITY_LOW),
90 MSM8916_REG_POR(CDC_D_INT_LATCHED_CLR),
91 MSM8916_REG_POR(CDC_D_INT_EN_SET),
92 MSM8916_REG_POR(CDC_D_INT_EN_CLR),
93 MSM8916_REG_POR(CDC_D_INT_LATCHED_STS),
94 MSM8916_REG_POR(CDC_D_INT_PENDING_STS),
95 MSM8916_REG_POR(CDC_D_INT_MID_SEL),
96 MSM8916_REG_POR(CDC_D_INT_PRIORITY),
97 MSM8916_REG_POR(CDC_D_GPIO_MODE),
98 MSM8916_REG_POR(CDC_D_PIN_CTL_OE),
99 MSM8916_REG_POR(CDC_D_PIN_CTL_DATA),
100 MSM8916_REG_POR(CDC_D_PIN_STATUS),
101 MSM8916_REG_POR(CDC_D_HDRIVE_CTL),
102 MSM8916_REG_POR(CDC_D_CDC_RST_CTL),
103 MSM8916_REG_POR(CDC_D_CDC_TOP_CLK_CTL),
104 MSM8916_REG_POR(CDC_D_CDC_ANA_CLK_CTL),
105 MSM8916_REG_POR(CDC_D_CDC_DIG_CLK_CTL),
106 MSM8916_REG_POR(CDC_D_CDC_CONN_TX1_CTL),
107 MSM8916_REG_POR(CDC_D_CDC_CONN_TX2_CTL),
108 MSM8916_REG_POR(CDC_D_CDC_CONN_HPHR_DAC_CTL),
109 MSM8916_REG_POR(CDC_D_CDC_CONN_RX1_CTL),
110 MSM8916_REG_POR(CDC_D_CDC_CONN_RX2_CTL),
111 MSM8916_REG_POR(CDC_D_CDC_CONN_RX3_CTL),
112 MSM8916_REG_POR(CDC_D_CDC_CONN_RX_LB_CTL),
113 MSM8916_REG_POR(CDC_D_CDC_RX_CTL1),
114 MSM8916_REG_POR(CDC_D_CDC_RX_CTL2),
115 MSM8916_REG_POR(CDC_D_CDC_RX_CTL3),
116 MSM8916_REG_POR(CDC_D_DEM_BYPASS_DATA0),
117 MSM8916_REG_POR(CDC_D_DEM_BYPASS_DATA1),
118 MSM8916_REG_POR(CDC_D_DEM_BYPASS_DATA2),
119 MSM8916_REG_POR(CDC_D_DEM_BYPASS_DATA3),
120 MSM8916_REG_POR(CDC_D_SPARE_0),
121 MSM8916_REG_POR(CDC_D_SPARE_1),
122 MSM8916_REG_POR(CDC_D_SPARE_2),
123 MSM8916_REG_POR(CDC_A_REVISION1),
124 MSM8916_REG_POR(CDC_A_REVISION2),
125 MSM8916_REG_POR(CDC_A_REVISION3),
126 MSM8916_REG_POR(CDC_A_REVISION4),
127 MSM8916_REG_POR(CDC_A_PERPH_TYPE),
128 MSM8916_REG_POR(CDC_A_PERPH_SUBTYPE),
129 MSM8916_REG_POR(CDC_A_INT_RT_STS),
130 MSM8916_REG_POR(CDC_A_INT_SET_TYPE),
131 MSM8916_REG_POR(CDC_A_INT_POLARITY_HIGH),
132 MSM8916_REG_POR(CDC_A_INT_POLARITY_LOW),
133 MSM8916_REG_POR(CDC_A_INT_LATCHED_CLR),
134 MSM8916_REG_POR(CDC_A_INT_EN_SET),
135 MSM8916_REG_POR(CDC_A_INT_EN_CLR),
136 MSM8916_REG_POR(CDC_A_INT_LATCHED_STS),
137 MSM8916_REG_POR(CDC_A_INT_PENDING_STS),
138 MSM8916_REG_POR(CDC_A_INT_MID_SEL),
139 MSM8916_REG_POR(CDC_A_INT_PRIORITY),
140 MSM8916_REG_POR(CDC_A_MICB_1_EN),
141 MSM8916_REG_POR(CDC_A_MICB_1_VAL),
142 MSM8916_REG_POR(CDC_A_MICB_1_CTL),
143 MSM8916_REG_POR(CDC_A_MICB_1_INT_RBIAS),
144 MSM8916_REG_POR(CDC_A_MICB_2_EN),
145 MSM8916_REG_POR(CDC_A_MBHC_DET_CTL_1),
146 MSM8916_REG_POR(CDC_A_MBHC_DET_CTL_2),
147 MSM8916_REG_POR(CDC_A_MBHC_FSM_CTL),
148 MSM8916_REG_POR(CDC_A_MBHC_DBNC_TIMER),
149 MSM8916_REG_POR(CDC_A_MBHC_BTN0_ZDETL_CTL),
150 MSM8916_REG_POR(CDC_A_MBHC_BTN1_ZDETM_CTL),
151 MSM8916_REG_POR(CDC_A_MBHC_BTN2_ZDETH_CTL),
152 MSM8916_REG_POR(CDC_A_MBHC_BTN3_CTL),
153 MSM8916_REG_POR(CDC_A_MBHC_BTN4_CTL),
154 MSM8916_REG_POR(CDC_A_MBHC_BTN_RESULT),
155 MSM8916_REG_POR(CDC_A_MBHC_ZDET_ELECT_RESULT),
156 MSM8916_REG_POR(CDC_A_TX_1_EN),
157 MSM8916_REG_POR(CDC_A_TX_2_EN),
158 MSM8916_REG_POR(CDC_A_TX_1_2_TEST_CTL_1),
159 MSM8916_REG_POR(CDC_A_TX_1_2_TEST_CTL_2),
160 MSM8916_REG_POR(CDC_A_TX_1_2_ATEST_CTL),
161 MSM8916_REG_POR(CDC_A_TX_1_2_OPAMP_BIAS),
162 MSM8916_REG_POR(CDC_A_TX_1_2_TXFE_CLKDIV),
163 MSM8916_REG_POR(CDC_A_TX_3_EN),
164 MSM8916_REG_POR(CDC_A_NCP_EN),
165 MSM8916_REG_POR(CDC_A_NCP_CLK),
166 MSM8916_REG_POR(CDC_A_NCP_DEGLITCH),
167 MSM8916_REG_POR(CDC_A_NCP_FBCTRL),
168 MSM8916_REG_POR(CDC_A_NCP_BIAS),
169 MSM8916_REG_POR(CDC_A_NCP_VCTRL),
170 MSM8916_REG_POR(CDC_A_NCP_TEST),
171 MSM8916_REG_POR(CDC_A_RX_CLOCK_DIVIDER),
172 MSM8916_REG_POR(CDC_A_RX_COM_OCP_CTL),
173 MSM8916_REG_POR(CDC_A_RX_COM_OCP_COUNT),
174 MSM8916_REG_POR(CDC_A_RX_COM_BIAS_DAC),
175 MSM8916_REG_POR(CDC_A_RX_HPH_BIAS_PA),
176 MSM8916_REG_POR(CDC_A_RX_HPH_BIAS_LDO_OCP),
177 MSM8916_REG_POR(CDC_A_RX_HPH_BIAS_CNP),
178 MSM8916_REG_POR(CDC_A_RX_HPH_CNP_EN),
179 MSM8916_REG_POR(CDC_A_RX_HPH_CNP_WG_CTL),
180 MSM8916_REG_POR(CDC_A_RX_HPH_CNP_WG_TIME),
181 MSM8916_REG_POR(CDC_A_RX_HPH_L_TEST),
182 MSM8916_REG_POR(CDC_A_RX_HPH_L_PA_DAC_CTL),
183 MSM8916_REG_POR(CDC_A_RX_HPH_R_TEST),
184 MSM8916_REG_POR(CDC_A_RX_HPH_R_PA_DAC_CTL),
185 MSM8916_REG_POR(CDC_A_RX_EAR_CTL),
186 MSM8916_REG_POR(CDC_A_RX_ATEST),
187 MSM8916_REG_POR(CDC_A_RX_HPH_STATUS),
188 MSM8916_REG_POR(CDC_A_RX_EAR_STATUS),
189 MSM8916_REG_POR(CDC_A_SPKR_DAC_CTL),
190 MSM8916_REG_POR(CDC_A_SPKR_DRV_CLIP_DET),
191 MSM8916_REG_POR(CDC_A_SPKR_DRV_CTL),
192 MSM8916_REG_POR(CDC_A_SPKR_ANA_BIAS_SET),
193 MSM8916_REG_POR(CDC_A_SPKR_OCP_CTL),
194 MSM8916_REG_POR(CDC_A_SPKR_PWRSTG_CTL),
195 MSM8916_REG_POR(CDC_A_SPKR_DRV_MISC),
196 MSM8916_REG_POR(CDC_A_SPKR_DRV_DBG),
197 MSM8916_REG_POR(CDC_A_CURRENT_LIMIT),
198 MSM8916_REG_POR(CDC_A_OUTPUT_VOLTAGE),
199 MSM8916_REG_POR(CDC_A_BYPASS_MODE),
200 MSM8916_REG_POR(CDC_A_BOOST_EN_CTL),
201 MSM8916_REG_POR(CDC_A_SLOPE_COMP_IP_ZERO),
202 MSM8916_REG_POR(CDC_A_RDSON_MAX_DUTY_CYCLE),
203 MSM8916_REG_POR(CDC_A_BOOST_TEST1_1),
204 MSM8916_REG_POR(CDC_A_BOOST_TEST_2),
205 MSM8916_REG_POR(CDC_A_SPKR_SAR_STATUS),
206 MSM8916_REG_POR(CDC_A_SPKR_DRV_STATUS),
207 MSM8916_REG_POR(CDC_A_PBUS_ADD_CSR),
208 MSM8916_REG_POR(CDC_A_PBUS_ADD_SEL),
209 MSM8916_REG_POR(LPASS_CDC_CLK_RX_RESET_CTL),
210 MSM8916_REG_POR(LPASS_CDC_CLK_TX_RESET_B1_CTL),
211 MSM8916_REG_POR(LPASS_CDC_CLK_DMIC_B1_CTL),
212 MSM8916_REG_POR(LPASS_CDC_CLK_RX_I2S_CTL),
213 MSM8916_REG_POR(LPASS_CDC_CLK_TX_I2S_CTL),
214 MSM8916_REG_POR(LPASS_CDC_CLK_OTHR_RESET_B1_CTL),
215 MSM8916_REG_POR(LPASS_CDC_CLK_TX_CLK_EN_B1_CTL),
216 MSM8916_REG_POR(LPASS_CDC_CLK_OTHR_CTL),
217 MSM8916_REG_POR(LPASS_CDC_CLK_RX_B1_CTL),
218 MSM8916_REG_POR(LPASS_CDC_CLK_MCLK_CTL),
219 MSM8916_REG_POR(LPASS_CDC_CLK_PDM_CTL),
220 MSM8916_REG_POR(LPASS_CDC_CLK_SD_CTL),
221 MSM8916_REG_POR(LPASS_CDC_RX1_B1_CTL),
222 MSM8916_REG_POR(LPASS_CDC_RX2_B1_CTL),
223 MSM8916_REG_POR(LPASS_CDC_RX3_B1_CTL),
224 MSM8916_REG_POR(LPASS_CDC_RX1_B2_CTL),
225 MSM8916_REG_POR(LPASS_CDC_RX2_B2_CTL),
226 MSM8916_REG_POR(LPASS_CDC_RX3_B2_CTL),
227 MSM8916_REG_POR(LPASS_CDC_RX1_B3_CTL),
228 MSM8916_REG_POR(LPASS_CDC_RX2_B3_CTL),
229 MSM8916_REG_POR(LPASS_CDC_RX3_B3_CTL),
230 MSM8916_REG_POR(LPASS_CDC_RX1_B4_CTL),
231 MSM8916_REG_POR(LPASS_CDC_RX2_B4_CTL),
232 MSM8916_REG_POR(LPASS_CDC_RX3_B4_CTL),
233 MSM8916_REG_POR(LPASS_CDC_RX1_B5_CTL),
234 MSM8916_REG_POR(LPASS_CDC_RX2_B5_CTL),
235 MSM8916_REG_POR(LPASS_CDC_RX3_B5_CTL),
236 MSM8916_REG_POR(LPASS_CDC_RX1_B6_CTL),
237 MSM8916_REG_POR(LPASS_CDC_RX2_B6_CTL),
238 MSM8916_REG_POR(LPASS_CDC_RX3_B6_CTL),
239 MSM8916_REG_POR(LPASS_CDC_RX1_VOL_CTL_B1_CTL),
240 MSM8916_REG_POR(LPASS_CDC_RX2_VOL_CTL_B1_CTL),
241 MSM8916_REG_POR(LPASS_CDC_RX3_VOL_CTL_B1_CTL),
242 MSM8916_REG_POR(LPASS_CDC_RX1_VOL_CTL_B2_CTL),
243 MSM8916_REG_POR(LPASS_CDC_RX2_VOL_CTL_B2_CTL),
244 MSM8916_REG_POR(LPASS_CDC_RX3_VOL_CTL_B2_CTL),
245 MSM8916_REG_POR(LPASS_CDC_TOP_GAIN_UPDATE),
246 MSM8916_REG_POR(LPASS_CDC_TOP_CTL),
247 MSM8916_REG_POR(LPASS_CDC_DEBUG_DESER1_CTL),
248 MSM8916_REG_POR(LPASS_CDC_DEBUG_DESER2_CTL),
249 MSM8916_REG_POR(LPASS_CDC_DEBUG_B1_CTL_CFG),
250 MSM8916_REG_POR(LPASS_CDC_DEBUG_B2_CTL_CFG),
251 MSM8916_REG_POR(LPASS_CDC_DEBUG_B3_CTL_CFG),
252 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B1_CTL),
253 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B1_CTL),
254 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B2_CTL),
255 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B2_CTL),
256 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B3_CTL),
257 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B3_CTL),
258 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B4_CTL),
259 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B4_CTL),
260 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B5_CTL),
261 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B5_CTL),
262 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B6_CTL),
263 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B6_CTL),
264 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B7_CTL),
265 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B7_CTL),
266 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_B8_CTL),
267 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_B8_CTL),
268 MSM8916_REG_POR(LPASS_CDC_IIR1_CTL),
269 MSM8916_REG_POR(LPASS_CDC_IIR2_CTL),
270 MSM8916_REG_POR(LPASS_CDC_IIR1_GAIN_TIMER_CTL),
271 MSM8916_REG_POR(LPASS_CDC_IIR2_GAIN_TIMER_CTL),
272 MSM8916_REG_POR(LPASS_CDC_IIR1_COEF_B1_CTL),
273 MSM8916_REG_POR(LPASS_CDC_IIR2_COEF_B1_CTL),
274 MSM8916_REG_POR(LPASS_CDC_IIR1_COEF_B2_CTL),
275 MSM8916_REG_POR(LPASS_CDC_IIR2_COEF_B2_CTL),
276 MSM8916_REG_POR(LPASS_CDC_CONN_RX1_B1_CTL),
277 MSM8916_REG_POR(LPASS_CDC_CONN_RX1_B2_CTL),
278 MSM8916_REG_POR(LPASS_CDC_CONN_RX1_B3_CTL),
279 MSM8916_REG_POR(LPASS_CDC_CONN_RX2_B1_CTL),
280 MSM8916_REG_POR(LPASS_CDC_CONN_RX2_B2_CTL),
281 MSM8916_REG_POR(LPASS_CDC_CONN_RX2_B3_CTL),
282 MSM8916_REG_POR(LPASS_CDC_CONN_RX3_B1_CTL),
283 MSM8916_REG_POR(LPASS_CDC_CONN_RX3_B2_CTL),
284 MSM8916_REG_POR(LPASS_CDC_CONN_TX_B1_CTL),
285 MSM8916_REG_POR(LPASS_CDC_CONN_EQ1_B1_CTL),
286 MSM8916_REG_POR(LPASS_CDC_CONN_EQ1_B2_CTL),
287 MSM8916_REG_POR(LPASS_CDC_CONN_EQ1_B3_CTL),
288 MSM8916_REG_POR(LPASS_CDC_CONN_EQ1_B4_CTL),
289 MSM8916_REG_POR(LPASS_CDC_CONN_EQ2_B1_CTL),
290 MSM8916_REG_POR(LPASS_CDC_CONN_EQ2_B2_CTL),
291 MSM8916_REG_POR(LPASS_CDC_CONN_EQ2_B3_CTL),
292 MSM8916_REG_POR(LPASS_CDC_CONN_EQ2_B4_CTL),
293 MSM8916_REG_POR(LPASS_CDC_CONN_TX_I2S_SD1_CTL),
294 MSM8916_REG_POR(LPASS_CDC_TX1_VOL_CTL_TIMER),
295 MSM8916_REG_POR(LPASS_CDC_TX2_VOL_CTL_TIMER),
296 MSM8916_REG_POR(LPASS_CDC_TX1_VOL_CTL_GAIN),
297 MSM8916_REG_POR(LPASS_CDC_TX2_VOL_CTL_GAIN),
298 MSM8916_REG_POR(LPASS_CDC_TX1_VOL_CTL_CFG),
299 MSM8916_REG_POR(LPASS_CDC_TX2_VOL_CTL_CFG),
300 MSM8916_REG_POR(LPASS_CDC_TX1_MUX_CTL),
301 MSM8916_REG_POR(LPASS_CDC_TX2_MUX_CTL),
302 MSM8916_REG_POR(LPASS_CDC_TX1_CLK_FS_CTL),
303 MSM8916_REG_POR(LPASS_CDC_TX2_CLK_FS_CTL),
304 MSM8916_REG_POR(LPASS_CDC_TX1_DMIC_CTL),
305 MSM8916_REG_POR(LPASS_CDC_TX2_DMIC_CTL),
308 #endif /* MSM8916_WCD_H */