1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * pmic.h -- Power Management Driver for Wolfson WM8350 PMIC |
4 | * |
5 | * Copyright 2007 Wolfson Microelectronics PLC |
6 | */ |
7 | |
8 | #ifndef __LINUX_MFD_WM8350_PMIC_H |
9 | #define __LINUX_MFD_WM8350_PMIC_H |
10 | |
11 | #include <linux/platform_device.h> |
12 | #include <linux/leds.h> |
13 | #include <linux/regulator/machine.h> |
14 | |
15 | /* |
16 | * Register values. |
17 | */ |
18 | |
19 | #define WM8350_CURRENT_SINK_DRIVER_A 0xAC |
20 | #define WM8350_CSA_FLASH_CONTROL 0xAD |
21 | #define WM8350_CURRENT_SINK_DRIVER_B 0xAE |
22 | #define WM8350_CSB_FLASH_CONTROL 0xAF |
23 | #define WM8350_DCDC_LDO_REQUESTED 0xB0 |
24 | #define WM8350_DCDC_ACTIVE_OPTIONS 0xB1 |
25 | #define WM8350_DCDC_SLEEP_OPTIONS 0xB2 |
26 | #define WM8350_POWER_CHECK_COMPARATOR 0xB3 |
27 | #define WM8350_DCDC1_CONTROL 0xB4 |
28 | #define WM8350_DCDC1_TIMEOUTS 0xB5 |
29 | #define WM8350_DCDC1_LOW_POWER 0xB6 |
30 | #define WM8350_DCDC2_CONTROL 0xB7 |
31 | #define WM8350_DCDC2_TIMEOUTS 0xB8 |
32 | #define WM8350_DCDC3_CONTROL 0xBA |
33 | #define WM8350_DCDC3_TIMEOUTS 0xBB |
34 | #define WM8350_DCDC3_LOW_POWER 0xBC |
35 | #define WM8350_DCDC4_CONTROL 0xBD |
36 | #define WM8350_DCDC4_TIMEOUTS 0xBE |
37 | #define WM8350_DCDC4_LOW_POWER 0xBF |
38 | #define WM8350_DCDC5_CONTROL 0xC0 |
39 | #define WM8350_DCDC5_TIMEOUTS 0xC1 |
40 | #define WM8350_DCDC6_CONTROL 0xC3 |
41 | #define WM8350_DCDC6_TIMEOUTS 0xC4 |
42 | #define WM8350_DCDC6_LOW_POWER 0xC5 |
43 | #define WM8350_LIMIT_SWITCH_CONTROL 0xC7 |
44 | #define WM8350_LDO1_CONTROL 0xC8 |
45 | #define WM8350_LDO1_TIMEOUTS 0xC9 |
46 | #define WM8350_LDO1_LOW_POWER 0xCA |
47 | #define WM8350_LDO2_CONTROL 0xCB |
48 | #define WM8350_LDO2_TIMEOUTS 0xCC |
49 | #define WM8350_LDO2_LOW_POWER 0xCD |
50 | #define WM8350_LDO3_CONTROL 0xCE |
51 | #define WM8350_LDO3_TIMEOUTS 0xCF |
52 | #define WM8350_LDO3_LOW_POWER 0xD0 |
53 | #define WM8350_LDO4_CONTROL 0xD1 |
54 | #define WM8350_LDO4_TIMEOUTS 0xD2 |
55 | #define WM8350_LDO4_LOW_POWER 0xD3 |
56 | #define WM8350_VCC_FAULT_MASKS 0xD7 |
57 | #define WM8350_MAIN_BANDGAP_CONTROL 0xD8 |
58 | #define WM8350_OSC_CONTROL 0xD9 |
59 | #define WM8350_RTC_TICK_CONTROL 0xDA |
60 | #define WM8350_SECURITY 0xDB |
61 | #define WM8350_RAM_BIST_1 0xDC |
62 | #define WM8350_DCDC_LDO_STATUS 0xE1 |
63 | #define WM8350_GPIO_PIN_STATUS 0xE6 |
64 | |
65 | #define WM8350_DCDC1_FORCE_PWM 0xF8 |
66 | #define WM8350_DCDC3_FORCE_PWM 0xFA |
67 | #define WM8350_DCDC4_FORCE_PWM 0xFB |
68 | #define WM8350_DCDC6_FORCE_PWM 0xFD |
69 | |
70 | /* |
71 | * R172 (0xAC) - Current Sink Driver A |
72 | */ |
73 | #define WM8350_CS1_HIB_MODE 0x1000 |
74 | #define WM8350_CS1_HIB_MODE_MASK 0x1000 |
75 | #define WM8350_CS1_HIB_MODE_SHIFT 12 |
76 | #define WM8350_CS1_ISEL_MASK 0x003F |
77 | #define WM8350_CS1_ISEL_SHIFT 0 |
78 | |
79 | /* Bit values for R172 (0xAC) */ |
80 | #define WM8350_CS1_HIB_MODE_DISABLE 0 |
81 | #define WM8350_CS1_HIB_MODE_LEAVE 1 |
82 | |
83 | #define WM8350_CS1_ISEL_220M 0x3F |
84 | |
85 | /* |
86 | * R173 (0xAD) - CSA Flash control |
87 | */ |
88 | #define WM8350_CS1_FLASH_MODE 0x8000 |
89 | #define WM8350_CS1_TRIGSRC 0x4000 |
90 | #define WM8350_CS1_DRIVE 0x2000 |
91 | #define WM8350_CS1_FLASH_DUR_MASK 0x0300 |
92 | #define WM8350_CS1_OFF_RAMP_MASK 0x0030 |
93 | #define WM8350_CS1_ON_RAMP_MASK 0x0003 |
94 | |
95 | /* |
96 | * R174 (0xAE) - Current Sink Driver B |
97 | */ |
98 | #define WM8350_CS2_HIB_MODE 0x1000 |
99 | #define WM8350_CS2_ISEL_MASK 0x003F |
100 | |
101 | /* |
102 | * R175 (0xAF) - CSB Flash control |
103 | */ |
104 | #define WM8350_CS2_FLASH_MODE 0x8000 |
105 | #define WM8350_CS2_TRIGSRC 0x4000 |
106 | #define WM8350_CS2_DRIVE 0x2000 |
107 | #define WM8350_CS2_FLASH_DUR_MASK 0x0300 |
108 | #define WM8350_CS2_OFF_RAMP_MASK 0x0030 |
109 | #define WM8350_CS2_ON_RAMP_MASK 0x0003 |
110 | |
111 | /* |
112 | * R176 (0xB0) - DCDC/LDO requested |
113 | */ |
114 | #define WM8350_LS_ENA 0x8000 |
115 | #define WM8350_LDO4_ENA 0x0800 |
116 | #define WM8350_LDO3_ENA 0x0400 |
117 | #define WM8350_LDO2_ENA 0x0200 |
118 | #define WM8350_LDO1_ENA 0x0100 |
119 | #define WM8350_DC6_ENA 0x0020 |
120 | #define WM8350_DC5_ENA 0x0010 |
121 | #define WM8350_DC4_ENA 0x0008 |
122 | #define WM8350_DC3_ENA 0x0004 |
123 | #define WM8350_DC2_ENA 0x0002 |
124 | #define WM8350_DC1_ENA 0x0001 |
125 | |
126 | /* |
127 | * R177 (0xB1) - DCDC Active options |
128 | */ |
129 | #define WM8350_PUTO_MASK 0x3000 |
130 | #define WM8350_PWRUP_DELAY_MASK 0x0300 |
131 | #define WM8350_DC6_ACTIVE 0x0020 |
132 | #define WM8350_DC4_ACTIVE 0x0008 |
133 | #define WM8350_DC3_ACTIVE 0x0004 |
134 | #define WM8350_DC1_ACTIVE 0x0001 |
135 | |
136 | /* |
137 | * R178 (0xB2) - DCDC Sleep options |
138 | */ |
139 | #define WM8350_DC6_SLEEP 0x0020 |
140 | #define WM8350_DC4_SLEEP 0x0008 |
141 | #define WM8350_DC3_SLEEP 0x0004 |
142 | #define WM8350_DC1_SLEEP 0x0001 |
143 | |
144 | /* |
145 | * R179 (0xB3) - Power-check comparator |
146 | */ |
147 | #define WM8350_PCCMP_ERRACT 0x4000 |
148 | #define WM8350_PCCMP_RAIL 0x0100 |
149 | #define WM8350_PCCMP_OFF_THR_MASK 0x0070 |
150 | #define WM8350_PCCMP_ON_THR_MASK 0x0007 |
151 | |
152 | /* |
153 | * R180 (0xB4) - DCDC1 Control |
154 | */ |
155 | #define WM8350_DC1_OPFLT 0x0400 |
156 | #define WM8350_DC1_VSEL_MASK 0x007F |
157 | #define WM8350_DC1_VSEL_SHIFT 0 |
158 | |
159 | /* |
160 | * R181 (0xB5) - DCDC1 Timeouts |
161 | */ |
162 | #define WM8350_DC1_ERRACT_MASK 0xC000 |
163 | #define WM8350_DC1_ERRACT_SHIFT 14 |
164 | #define WM8350_DC1_ENSLOT_MASK 0x3C00 |
165 | #define WM8350_DC1_ENSLOT_SHIFT 10 |
166 | #define WM8350_DC1_SDSLOT_MASK 0x03C0 |
167 | #define WM8350_DC1_UVTO_MASK 0x0030 |
168 | #define WM8350_DC1_SDSLOT_SHIFT 6 |
169 | |
170 | /* Bit values for R181 (0xB5) */ |
171 | #define WM8350_DC1_ERRACT_NONE 0 |
172 | #define WM8350_DC1_ERRACT_SHUTDOWN_CONV 1 |
173 | #define WM8350_DC1_ERRACT_SHUTDOWN_SYS 2 |
174 | |
175 | /* |
176 | * R182 (0xB6) - DCDC1 Low Power |
177 | */ |
178 | #define WM8350_DC1_HIB_MODE_MASK 0x7000 |
179 | #define WM8350_DC1_HIB_TRIG_MASK 0x0300 |
180 | #define WM8350_DC1_VIMG_MASK 0x007F |
181 | |
182 | /* |
183 | * R183 (0xB7) - DCDC2 Control |
184 | */ |
185 | #define WM8350_DC2_MODE 0x4000 |
186 | #define WM8350_DC2_MODE_MASK 0x4000 |
187 | #define WM8350_DC2_MODE_SHIFT 14 |
188 | #define WM8350_DC2_HIB_MODE 0x1000 |
189 | #define WM8350_DC2_HIB_MODE_MASK 0x1000 |
190 | #define WM8350_DC2_HIB_MODE_SHIFT 12 |
191 | #define WM8350_DC2_HIB_TRIG_MASK 0x0300 |
192 | #define WM8350_DC2_HIB_TRIG_SHIFT 8 |
193 | #define WM8350_DC2_ILIM 0x0040 |
194 | #define WM8350_DC2_ILIM_MASK 0x0040 |
195 | #define WM8350_DC2_ILIM_SHIFT 6 |
196 | #define WM8350_DC2_RMP_MASK 0x0018 |
197 | #define WM8350_DC2_RMP_SHIFT 3 |
198 | #define WM8350_DC2_FBSRC_MASK 0x0003 |
199 | #define WM8350_DC2_FBSRC_SHIFT 0 |
200 | |
201 | /* Bit values for R183 (0xB7) */ |
202 | #define WM8350_DC2_MODE_BOOST 0 |
203 | #define WM8350_DC2_MODE_SWITCH 1 |
204 | |
205 | #define WM8350_DC2_HIB_MODE_ACTIVE 1 |
206 | #define WM8350_DC2_HIB_MODE_DISABLE 0 |
207 | |
208 | #define WM8350_DC2_HIB_TRIG_NONE 0 |
209 | #define WM8350_DC2_HIB_TRIG_LPWR1 1 |
210 | #define WM8350_DC2_HIB_TRIG_LPWR2 2 |
211 | #define WM8350_DC2_HIB_TRIG_LPWR3 3 |
212 | |
213 | #define WM8350_DC2_ILIM_HIGH 0 |
214 | #define WM8350_DC2_ILIM_LOW 1 |
215 | |
216 | #define WM8350_DC2_RMP_30V 0 |
217 | #define WM8350_DC2_RMP_20V 1 |
218 | #define WM8350_DC2_RMP_10V 2 |
219 | #define WM8350_DC2_RMP_5V 3 |
220 | |
221 | #define WM8350_DC2_FBSRC_FB2 0 |
222 | #define WM8350_DC2_FBSRC_ISINKA 1 |
223 | #define WM8350_DC2_FBSRC_ISINKB 2 |
224 | #define WM8350_DC2_FBSRC_USB 3 |
225 | |
226 | /* |
227 | * R184 (0xB8) - DCDC2 Timeouts |
228 | */ |
229 | #define WM8350_DC2_ERRACT_MASK 0xC000 |
230 | #define WM8350_DC2_ERRACT_SHIFT 14 |
231 | #define WM8350_DC2_ENSLOT_MASK 0x3C00 |
232 | #define WM8350_DC2_ENSLOT_SHIFT 10 |
233 | #define WM8350_DC2_SDSLOT_MASK 0x03C0 |
234 | #define WM8350_DC2_UVTO_MASK 0x0030 |
235 | |
236 | /* Bit values for R184 (0xB8) */ |
237 | #define WM8350_DC2_ERRACT_NONE 0 |
238 | #define WM8350_DC2_ERRACT_SHUTDOWN_CONV 1 |
239 | #define WM8350_DC2_ERRACT_SHUTDOWN_SYS 2 |
240 | |
241 | /* |
242 | * R186 (0xBA) - DCDC3 Control |
243 | */ |
244 | #define WM8350_DC3_OPFLT 0x0400 |
245 | #define WM8350_DC3_VSEL_MASK 0x007F |
246 | #define WM8350_DC3_VSEL_SHIFT 0 |
247 | |
248 | /* |
249 | * R187 (0xBB) - DCDC3 Timeouts |
250 | */ |
251 | #define WM8350_DC3_ERRACT_MASK 0xC000 |
252 | #define WM8350_DC3_ERRACT_SHIFT 14 |
253 | #define WM8350_DC3_ENSLOT_MASK 0x3C00 |
254 | #define WM8350_DC3_ENSLOT_SHIFT 10 |
255 | #define WM8350_DC3_SDSLOT_MASK 0x03C0 |
256 | #define WM8350_DC3_UVTO_MASK 0x0030 |
257 | #define WM8350_DC3_SDSLOT_SHIFT 6 |
258 | |
259 | /* Bit values for R187 (0xBB) */ |
260 | #define WM8350_DC3_ERRACT_NONE 0 |
261 | #define WM8350_DC3_ERRACT_SHUTDOWN_CONV 1 |
262 | #define WM8350_DC3_ERRACT_SHUTDOWN_SYS 2 |
263 | /* |
264 | * R188 (0xBC) - DCDC3 Low Power |
265 | */ |
266 | #define WM8350_DC3_HIB_MODE_MASK 0x7000 |
267 | #define WM8350_DC3_HIB_TRIG_MASK 0x0300 |
268 | #define WM8350_DC3_VIMG_MASK 0x007F |
269 | |
270 | /* |
271 | * R189 (0xBD) - DCDC4 Control |
272 | */ |
273 | #define WM8350_DC4_OPFLT 0x0400 |
274 | #define WM8350_DC4_VSEL_MASK 0x007F |
275 | #define WM8350_DC4_VSEL_SHIFT 0 |
276 | |
277 | /* |
278 | * R190 (0xBE) - DCDC4 Timeouts |
279 | */ |
280 | #define WM8350_DC4_ERRACT_MASK 0xC000 |
281 | #define WM8350_DC4_ERRACT_SHIFT 14 |
282 | #define WM8350_DC4_ENSLOT_MASK 0x3C00 |
283 | #define WM8350_DC4_ENSLOT_SHIFT 10 |
284 | #define WM8350_DC4_SDSLOT_MASK 0x03C0 |
285 | #define WM8350_DC4_UVTO_MASK 0x0030 |
286 | #define WM8350_DC4_SDSLOT_SHIFT 6 |
287 | |
288 | /* Bit values for R190 (0xBE) */ |
289 | #define WM8350_DC4_ERRACT_NONE 0 |
290 | #define WM8350_DC4_ERRACT_SHUTDOWN_CONV 1 |
291 | #define WM8350_DC4_ERRACT_SHUTDOWN_SYS 2 |
292 | |
293 | /* |
294 | * R191 (0xBF) - DCDC4 Low Power |
295 | */ |
296 | #define WM8350_DC4_HIB_MODE_MASK 0x7000 |
297 | #define WM8350_DC4_HIB_TRIG_MASK 0x0300 |
298 | #define WM8350_DC4_VIMG_MASK 0x007F |
299 | |
300 | /* |
301 | * R192 (0xC0) - DCDC5 Control |
302 | */ |
303 | #define WM8350_DC5_MODE 0x4000 |
304 | #define WM8350_DC5_MODE_MASK 0x4000 |
305 | #define WM8350_DC5_MODE_SHIFT 14 |
306 | #define WM8350_DC5_HIB_MODE 0x1000 |
307 | #define WM8350_DC5_HIB_MODE_MASK 0x1000 |
308 | #define WM8350_DC5_HIB_MODE_SHIFT 12 |
309 | #define WM8350_DC5_HIB_TRIG_MASK 0x0300 |
310 | #define WM8350_DC5_HIB_TRIG_SHIFT 8 |
311 | #define WM8350_DC5_ILIM 0x0040 |
312 | #define WM8350_DC5_ILIM_MASK 0x0040 |
313 | #define WM8350_DC5_ILIM_SHIFT 6 |
314 | #define WM8350_DC5_RMP_MASK 0x0018 |
315 | #define WM8350_DC5_RMP_SHIFT 3 |
316 | #define WM8350_DC5_FBSRC_MASK 0x0003 |
317 | #define WM8350_DC5_FBSRC_SHIFT 0 |
318 | |
319 | /* Bit values for R192 (0xC0) */ |
320 | #define WM8350_DC5_MODE_BOOST 0 |
321 | #define WM8350_DC5_MODE_SWITCH 1 |
322 | |
323 | #define WM8350_DC5_HIB_MODE_ACTIVE 1 |
324 | #define WM8350_DC5_HIB_MODE_DISABLE 0 |
325 | |
326 | #define WM8350_DC5_HIB_TRIG_NONE 0 |
327 | #define WM8350_DC5_HIB_TRIG_LPWR1 1 |
328 | #define WM8350_DC5_HIB_TRIG_LPWR2 2 |
329 | #define WM8350_DC5_HIB_TRIG_LPWR3 3 |
330 | |
331 | #define WM8350_DC5_ILIM_HIGH 0 |
332 | #define WM8350_DC5_ILIM_LOW 1 |
333 | |
334 | #define WM8350_DC5_RMP_30V 0 |
335 | #define WM8350_DC5_RMP_20V 1 |
336 | #define WM8350_DC5_RMP_10V 2 |
337 | #define WM8350_DC5_RMP_5V 3 |
338 | |
339 | #define WM8350_DC5_FBSRC_FB2 0 |
340 | #define WM8350_DC5_FBSRC_ISINKA 1 |
341 | #define WM8350_DC5_FBSRC_ISINKB 2 |
342 | #define WM8350_DC5_FBSRC_USB 3 |
343 | |
344 | /* |
345 | * R193 (0xC1) - DCDC5 Timeouts |
346 | */ |
347 | #define WM8350_DC5_ERRACT_MASK 0xC000 |
348 | #define WM8350_DC5_ERRACT_SHIFT 14 |
349 | #define WM8350_DC5_ENSLOT_MASK 0x3C00 |
350 | #define WM8350_DC5_ENSLOT_SHIFT 10 |
351 | #define WM8350_DC5_SDSLOT_MASK 0x03C0 |
352 | #define WM8350_DC5_UVTO_MASK 0x0030 |
353 | #define WM8350_DC5_SDSLOT_SHIFT 6 |
354 | |
355 | /* Bit values for R193 (0xC1) */ |
356 | #define WM8350_DC5_ERRACT_NONE 0 |
357 | #define WM8350_DC5_ERRACT_SHUTDOWN_CONV 1 |
358 | #define WM8350_DC5_ERRACT_SHUTDOWN_SYS 2 |
359 | |
360 | /* |
361 | * R195 (0xC3) - DCDC6 Control |
362 | */ |
363 | #define WM8350_DC6_OPFLT 0x0400 |
364 | #define WM8350_DC6_VSEL_MASK 0x007F |
365 | #define WM8350_DC6_VSEL_SHIFT 0 |
366 | |
367 | /* |
368 | * R196 (0xC4) - DCDC6 Timeouts |
369 | */ |
370 | #define WM8350_DC6_ERRACT_MASK 0xC000 |
371 | #define WM8350_DC6_ERRACT_SHIFT 14 |
372 | #define WM8350_DC6_ENSLOT_MASK 0x3C00 |
373 | #define WM8350_DC6_ENSLOT_SHIFT 10 |
374 | #define WM8350_DC6_SDSLOT_MASK 0x03C0 |
375 | #define WM8350_DC6_UVTO_MASK 0x0030 |
376 | #define WM8350_DC6_SDSLOT_SHIFT 6 |
377 | |
378 | /* Bit values for R196 (0xC4) */ |
379 | #define WM8350_DC6_ERRACT_NONE 0 |
380 | #define WM8350_DC6_ERRACT_SHUTDOWN_CONV 1 |
381 | #define WM8350_DC6_ERRACT_SHUTDOWN_SYS 2 |
382 | |
383 | /* |
384 | * R197 (0xC5) - DCDC6 Low Power |
385 | */ |
386 | #define WM8350_DC6_HIB_MODE_MASK 0x7000 |
387 | #define WM8350_DC6_HIB_TRIG_MASK 0x0300 |
388 | #define WM8350_DC6_VIMG_MASK 0x007F |
389 | |
390 | /* |
391 | * R199 (0xC7) - Limit Switch Control |
392 | */ |
393 | #define WM8350_LS_ERRACT_MASK 0xC000 |
394 | #define WM8350_LS_ERRACT_SHIFT 14 |
395 | #define WM8350_LS_ENSLOT_MASK 0x3C00 |
396 | #define WM8350_LS_ENSLOT_SHIFT 10 |
397 | #define WM8350_LS_SDSLOT_MASK 0x03C0 |
398 | #define WM8350_LS_SDSLOT_SHIFT 6 |
399 | #define WM8350_LS_HIB_MODE 0x0010 |
400 | #define WM8350_LS_HIB_MODE_MASK 0x0010 |
401 | #define WM8350_LS_HIB_MODE_SHIFT 4 |
402 | #define WM8350_LS_HIB_PROT 0x0002 |
403 | #define WM8350_LS_HIB_PROT_MASK 0x0002 |
404 | #define WM8350_LS_HIB_PROT_SHIFT 1 |
405 | #define WM8350_LS_PROT 0x0001 |
406 | #define WM8350_LS_PROT_MASK 0x0001 |
407 | #define WM8350_LS_PROT_SHIFT 0 |
408 | |
409 | /* Bit values for R199 (0xC7) */ |
410 | #define WM8350_LS_ERRACT_NONE 0 |
411 | #define WM8350_LS_ERRACT_SHUTDOWN_CONV 1 |
412 | #define WM8350_LS_ERRACT_SHUTDOWN_SYS 2 |
413 | |
414 | /* |
415 | * R200 (0xC8) - LDO1 Control |
416 | */ |
417 | #define WM8350_LDO1_SWI 0x4000 |
418 | #define WM8350_LDO1_OPFLT 0x0400 |
419 | #define WM8350_LDO1_VSEL_MASK 0x001F |
420 | #define WM8350_LDO1_VSEL_SHIFT 0 |
421 | |
422 | /* |
423 | * R201 (0xC9) - LDO1 Timeouts |
424 | */ |
425 | #define WM8350_LDO1_ERRACT_MASK 0xC000 |
426 | #define WM8350_LDO1_ERRACT_SHIFT 14 |
427 | #define WM8350_LDO1_ENSLOT_MASK 0x3C00 |
428 | #define WM8350_LDO1_ENSLOT_SHIFT 10 |
429 | #define WM8350_LDO1_SDSLOT_MASK 0x03C0 |
430 | #define WM8350_LDO1_UVTO_MASK 0x0030 |
431 | #define WM8350_LDO1_SDSLOT_SHIFT 6 |
432 | |
433 | /* Bit values for R201 (0xC9) */ |
434 | #define WM8350_LDO1_ERRACT_NONE 0 |
435 | #define WM8350_LDO1_ERRACT_SHUTDOWN_CONV 1 |
436 | #define WM8350_LDO1_ERRACT_SHUTDOWN_SYS 2 |
437 | |
438 | /* |
439 | * R202 (0xCA) - LDO1 Low Power |
440 | */ |
441 | #define WM8350_LDO1_HIB_MODE_MASK 0x3000 |
442 | #define WM8350_LDO1_HIB_TRIG_MASK 0x0300 |
443 | #define WM8350_LDO1_VIMG_MASK 0x001F |
444 | #define WM8350_LDO1_HIB_MODE_DIS (0x1 << 12) |
445 | |
446 | |
447 | /* |
448 | * R203 (0xCB) - LDO2 Control |
449 | */ |
450 | #define WM8350_LDO2_SWI 0x4000 |
451 | #define WM8350_LDO2_OPFLT 0x0400 |
452 | #define WM8350_LDO2_VSEL_MASK 0x001F |
453 | #define WM8350_LDO2_VSEL_SHIFT 0 |
454 | |
455 | /* |
456 | * R204 (0xCC) - LDO2 Timeouts |
457 | */ |
458 | #define WM8350_LDO2_ERRACT_MASK 0xC000 |
459 | #define WM8350_LDO2_ERRACT_SHIFT 14 |
460 | #define WM8350_LDO2_ENSLOT_MASK 0x3C00 |
461 | #define WM8350_LDO2_ENSLOT_SHIFT 10 |
462 | #define WM8350_LDO2_SDSLOT_MASK 0x03C0 |
463 | #define WM8350_LDO2_SDSLOT_SHIFT 6 |
464 | |
465 | /* Bit values for R204 (0xCC) */ |
466 | #define WM8350_LDO2_ERRACT_NONE 0 |
467 | #define WM8350_LDO2_ERRACT_SHUTDOWN_CONV 1 |
468 | #define WM8350_LDO2_ERRACT_SHUTDOWN_SYS 2 |
469 | |
470 | /* |
471 | * R205 (0xCD) - LDO2 Low Power |
472 | */ |
473 | #define WM8350_LDO2_HIB_MODE_MASK 0x3000 |
474 | #define WM8350_LDO2_HIB_TRIG_MASK 0x0300 |
475 | #define WM8350_LDO2_VIMG_MASK 0x001F |
476 | |
477 | /* |
478 | * R206 (0xCE) - LDO3 Control |
479 | */ |
480 | #define WM8350_LDO3_SWI 0x4000 |
481 | #define WM8350_LDO3_OPFLT 0x0400 |
482 | #define WM8350_LDO3_VSEL_MASK 0x001F |
483 | #define WM8350_LDO3_VSEL_SHIFT 0 |
484 | |
485 | /* |
486 | * R207 (0xCF) - LDO3 Timeouts |
487 | */ |
488 | #define WM8350_LDO3_ERRACT_MASK 0xC000 |
489 | #define WM8350_LDO3_ERRACT_SHIFT 14 |
490 | #define WM8350_LDO3_ENSLOT_MASK 0x3C00 |
491 | #define WM8350_LDO3_ENSLOT_SHIFT 10 |
492 | #define WM8350_LDO3_SDSLOT_MASK 0x03C0 |
493 | #define WM8350_LDO3_UVTO_MASK 0x0030 |
494 | #define WM8350_LDO3_SDSLOT_SHIFT 6 |
495 | |
496 | /* Bit values for R207 (0xCF) */ |
497 | #define WM8350_LDO3_ERRACT_NONE 0 |
498 | #define WM8350_LDO3_ERRACT_SHUTDOWN_CONV 1 |
499 | #define WM8350_LDO3_ERRACT_SHUTDOWN_SYS 2 |
500 | |
501 | /* |
502 | * R208 (0xD0) - LDO3 Low Power |
503 | */ |
504 | #define WM8350_LDO3_HIB_MODE_MASK 0x3000 |
505 | #define WM8350_LDO3_HIB_TRIG_MASK 0x0300 |
506 | #define WM8350_LDO3_VIMG_MASK 0x001F |
507 | |
508 | /* |
509 | * R209 (0xD1) - LDO4 Control |
510 | */ |
511 | #define WM8350_LDO4_SWI 0x4000 |
512 | #define WM8350_LDO4_OPFLT 0x0400 |
513 | #define WM8350_LDO4_VSEL_MASK 0x001F |
514 | #define WM8350_LDO4_VSEL_SHIFT 0 |
515 | |
516 | /* |
517 | * R210 (0xD2) - LDO4 Timeouts |
518 | */ |
519 | #define WM8350_LDO4_ERRACT_MASK 0xC000 |
520 | #define WM8350_LDO4_ERRACT_SHIFT 14 |
521 | #define WM8350_LDO4_ENSLOT_MASK 0x3C00 |
522 | #define WM8350_LDO4_ENSLOT_SHIFT 10 |
523 | #define WM8350_LDO4_SDSLOT_MASK 0x03C0 |
524 | #define WM8350_LDO4_UVTO_MASK 0x0030 |
525 | #define WM8350_LDO4_SDSLOT_SHIFT 6 |
526 | |
527 | /* Bit values for R210 (0xD2) */ |
528 | #define WM8350_LDO4_ERRACT_NONE 0 |
529 | #define WM8350_LDO4_ERRACT_SHUTDOWN_CONV 1 |
530 | #define WM8350_LDO4_ERRACT_SHUTDOWN_SYS 2 |
531 | |
532 | /* |
533 | * R211 (0xD3) - LDO4 Low Power |
534 | */ |
535 | #define WM8350_LDO4_HIB_MODE_MASK 0x3000 |
536 | #define WM8350_LDO4_HIB_TRIG_MASK 0x0300 |
537 | #define WM8350_LDO4_VIMG_MASK 0x001F |
538 | |
539 | /* |
540 | * R215 (0xD7) - VCC_FAULT Masks |
541 | */ |
542 | #define WM8350_LS_FAULT 0x8000 |
543 | #define WM8350_LDO4_FAULT 0x0800 |
544 | #define WM8350_LDO3_FAULT 0x0400 |
545 | #define WM8350_LDO2_FAULT 0x0200 |
546 | #define WM8350_LDO1_FAULT 0x0100 |
547 | #define WM8350_DC6_FAULT 0x0020 |
548 | #define WM8350_DC5_FAULT 0x0010 |
549 | #define WM8350_DC4_FAULT 0x0008 |
550 | #define WM8350_DC3_FAULT 0x0004 |
551 | #define WM8350_DC2_FAULT 0x0002 |
552 | #define WM8350_DC1_FAULT 0x0001 |
553 | |
554 | /* |
555 | * R216 (0xD8) - Main Bandgap Control |
556 | */ |
557 | #define WM8350_MBG_LOAD_FUSES 0x8000 |
558 | #define WM8350_MBG_FUSE_WPREP 0x4000 |
559 | #define WM8350_MBG_FUSE_WRITE 0x2000 |
560 | #define WM8350_MBG_FUSE_TRIM_MASK 0x1F00 |
561 | #define WM8350_MBG_TRIM_SRC 0x0020 |
562 | #define WM8350_MBG_USER_TRIM_MASK 0x001F |
563 | |
564 | /* |
565 | * R217 (0xD9) - OSC Control |
566 | */ |
567 | #define WM8350_OSC_LOAD_FUSES 0x8000 |
568 | #define WM8350_OSC_FUSE_WPREP 0x4000 |
569 | #define WM8350_OSC_FUSE_WRITE 0x2000 |
570 | #define WM8350_OSC_FUSE_TRIM_MASK 0x0F00 |
571 | #define WM8350_OSC_TRIM_SRC 0x0020 |
572 | #define WM8350_OSC_USER_TRIM_MASK 0x000F |
573 | |
574 | /* |
575 | * R248 (0xF8) - DCDC1 Force PWM |
576 | */ |
577 | #define WM8350_DCDC1_FORCE_PWM_ENA 0x0010 |
578 | |
579 | /* |
580 | * R250 (0xFA) - DCDC3 Force PWM |
581 | */ |
582 | #define WM8350_DCDC3_FORCE_PWM_ENA 0x0010 |
583 | |
584 | /* |
585 | * R251 (0xFB) - DCDC4 Force PWM |
586 | */ |
587 | #define WM8350_DCDC4_FORCE_PWM_ENA 0x0010 |
588 | |
589 | /* |
590 | * R253 (0xFD) - DCDC1 Force PWM |
591 | */ |
592 | #define WM8350_DCDC6_FORCE_PWM_ENA 0x0010 |
593 | |
594 | /* |
595 | * DCDC's |
596 | */ |
597 | #define WM8350_DCDC_1 0 |
598 | #define WM8350_DCDC_2 1 |
599 | #define WM8350_DCDC_3 2 |
600 | #define WM8350_DCDC_4 3 |
601 | #define WM8350_DCDC_5 4 |
602 | #define WM8350_DCDC_6 5 |
603 | |
604 | /* DCDC modes */ |
605 | #define WM8350_DCDC_ACTIVE_STANDBY 0 |
606 | #define WM8350_DCDC_ACTIVE_PULSE 1 |
607 | #define WM8350_DCDC_SLEEP_NORMAL 0 |
608 | #define WM8350_DCDC_SLEEP_LOW 1 |
609 | |
610 | /* DCDC Low power (Hibernate) mode */ |
611 | #define WM8350_DCDC_HIB_MODE_CUR (0 << 12) |
612 | #define WM8350_DCDC_HIB_MODE_IMAGE (1 << 12) |
613 | #define WM8350_DCDC_HIB_MODE_STANDBY (2 << 12) |
614 | #define WM8350_DCDC_HIB_MODE_LDO (4 << 12) |
615 | #define WM8350_DCDC_HIB_MODE_LDO_IM (5 << 12) |
616 | #define WM8350_DCDC_HIB_MODE_DIS (7 << 12) |
617 | #define WM8350_DCDC_HIB_MODE_MASK (7 << 12) |
618 | |
619 | /* DCDC Low Power (Hibernate) signal */ |
620 | #define WM8350_DCDC_HIB_SIG_REG (0 << 8) |
621 | #define WM8350_DCDC_HIB_SIG_LPWR1 (1 << 8) |
622 | #define WM8350_DCDC_HIB_SIG_LPWR2 (2 << 8) |
623 | #define WM8350_DCDC_HIB_SIG_LPWR3 (3 << 8) |
624 | |
625 | /* LDO Low power (Hibernate) mode */ |
626 | #define WM8350_LDO_HIB_MODE_IMAGE (0 << 0) |
627 | #define WM8350_LDO_HIB_MODE_DIS (1 << 0) |
628 | |
629 | /* LDO Low Power (Hibernate) signal */ |
630 | #define WM8350_LDO_HIB_SIG_REG (0 << 8) |
631 | #define WM8350_LDO_HIB_SIG_LPWR1 (1 << 8) |
632 | #define WM8350_LDO_HIB_SIG_LPWR2 (2 << 8) |
633 | #define WM8350_LDO_HIB_SIG_LPWR3 (3 << 8) |
634 | |
635 | /* |
636 | * LDOs |
637 | */ |
638 | #define WM8350_LDO_1 6 |
639 | #define WM8350_LDO_2 7 |
640 | #define WM8350_LDO_3 8 |
641 | #define WM8350_LDO_4 9 |
642 | |
643 | /* |
644 | * ISINKs |
645 | */ |
646 | #define WM8350_ISINK_A 10 |
647 | #define WM8350_ISINK_B 11 |
648 | |
649 | #define WM8350_ISINK_MODE_BOOST 0 |
650 | #define WM8350_ISINK_MODE_SWITCH 1 |
651 | #define WM8350_ISINK_ILIM_NORMAL 0 |
652 | #define WM8350_ISINK_ILIM_LOW 1 |
653 | |
654 | #define WM8350_ISINK_FLASH_DISABLE 0 |
655 | #define WM8350_ISINK_FLASH_ENABLE 1 |
656 | #define WM8350_ISINK_FLASH_TRIG_BIT 0 |
657 | #define WM8350_ISINK_FLASH_TRIG_GPIO 1 |
658 | #define WM8350_ISINK_FLASH_MODE_EN (1 << 13) |
659 | #define WM8350_ISINK_FLASH_MODE_DIS (0 << 13) |
660 | #define WM8350_ISINK_FLASH_DUR_32MS (0 << 8) |
661 | #define WM8350_ISINK_FLASH_DUR_64MS (1 << 8) |
662 | #define WM8350_ISINK_FLASH_DUR_96MS (2 << 8) |
663 | #define WM8350_ISINK_FLASH_DUR_1024MS (3 << 8) |
664 | #define WM8350_ISINK_FLASH_ON_INSTANT (0 << 0) |
665 | #define WM8350_ISINK_FLASH_ON_0_25S (1 << 0) |
666 | #define WM8350_ISINK_FLASH_ON_0_50S (2 << 0) |
667 | #define WM8350_ISINK_FLASH_ON_1_00S (3 << 0) |
668 | #define WM8350_ISINK_FLASH_ON_1_95S (1 << 0) |
669 | #define WM8350_ISINK_FLASH_ON_3_91S (2 << 0) |
670 | #define WM8350_ISINK_FLASH_ON_7_80S (3 << 0) |
671 | #define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 4) |
672 | #define WM8350_ISINK_FLASH_OFF_0_25S (1 << 4) |
673 | #define WM8350_ISINK_FLASH_OFF_0_50S (2 << 4) |
674 | #define WM8350_ISINK_FLASH_OFF_1_00S (3 << 4) |
675 | #define WM8350_ISINK_FLASH_OFF_1_95S (1 << 4) |
676 | #define WM8350_ISINK_FLASH_OFF_3_91S (2 << 4) |
677 | #define WM8350_ISINK_FLASH_OFF_7_80S (3 << 4) |
678 | |
679 | /* |
680 | * Regulator Interrupts. |
681 | */ |
682 | #define WM8350_IRQ_CS1 13 |
683 | #define WM8350_IRQ_CS2 14 |
684 | #define WM8350_IRQ_UV_LDO4 25 |
685 | #define WM8350_IRQ_UV_LDO3 26 |
686 | #define WM8350_IRQ_UV_LDO2 27 |
687 | #define WM8350_IRQ_UV_LDO1 28 |
688 | #define WM8350_IRQ_UV_DC6 29 |
689 | #define WM8350_IRQ_UV_DC5 30 |
690 | #define WM8350_IRQ_UV_DC4 31 |
691 | #define WM8350_IRQ_UV_DC3 32 |
692 | #define WM8350_IRQ_UV_DC2 33 |
693 | #define WM8350_IRQ_UV_DC1 34 |
694 | #define WM8350_IRQ_OC_LS 35 |
695 | |
696 | #define NUM_WM8350_REGULATORS 12 |
697 | |
698 | struct wm8350; |
699 | struct platform_device; |
700 | struct regulator_init_data; |
701 | |
702 | /* |
703 | * WM8350 LED platform data |
704 | */ |
705 | struct wm8350_led_platform_data { |
706 | const char *name; |
707 | const char *default_trigger; |
708 | int max_uA; |
709 | }; |
710 | |
711 | struct wm8350_led { |
712 | struct platform_device *pdev; |
713 | struct work_struct work; |
714 | spinlock_t value_lock; |
715 | enum led_brightness value; |
716 | struct led_classdev cdev; |
717 | int max_uA_index; |
718 | int enabled; |
719 | |
720 | struct regulator *isink; |
721 | struct regulator_consumer_supply isink_consumer; |
722 | struct regulator_init_data isink_init; |
723 | struct regulator *dcdc; |
724 | struct regulator_consumer_supply dcdc_consumer; |
725 | struct regulator_init_data dcdc_init; |
726 | }; |
727 | |
728 | struct wm8350_pmic { |
729 | /* Number of regulators of each type on this device */ |
730 | int max_dcdc; |
731 | int max_isink; |
732 | |
733 | /* ISINK to DCDC mapping */ |
734 | int isink_A_dcdc; |
735 | int isink_B_dcdc; |
736 | |
737 | /* hibernate configs */ |
738 | u16 dcdc1_hib_mode; |
739 | u16 dcdc3_hib_mode; |
740 | u16 dcdc4_hib_mode; |
741 | u16 dcdc6_hib_mode; |
742 | |
743 | /* regulator devices */ |
744 | struct platform_device *pdev[NUM_WM8350_REGULATORS]; |
745 | |
746 | /* LED devices */ |
747 | struct wm8350_led led[2]; |
748 | }; |
749 | |
750 | int wm8350_register_regulator(struct wm8350 *wm8350, int reg, |
751 | struct regulator_init_data *initdata); |
752 | int wm8350_register_led(struct wm8350 *wm8350, int lednum, int dcdc, int isink, |
753 | struct wm8350_led_platform_data *pdata); |
754 | |
755 | /* |
756 | * Additional DCDC control not supported via regulator API |
757 | */ |
758 | int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start, |
759 | u16 stop, u16 fault); |
760 | int wm8350_dcdc25_set_mode(struct wm8350 *wm8350, int dcdc, u16 mode, |
761 | u16 ilim, u16 ramp, u16 feedback); |
762 | |
763 | /* |
764 | * Additional LDO control not supported via regulator API |
765 | */ |
766 | int wm8350_ldo_set_slot(struct wm8350 *wm8350, int ldo, u16 start, u16 stop); |
767 | |
768 | /* |
769 | * Additional ISINK control not supported via regulator API |
770 | */ |
771 | int wm8350_isink_set_flash(struct wm8350 *wm8350, int isink, u16 mode, |
772 | u16 trigger, u16 duration, u16 on_ramp, |
773 | u16 off_ramp, u16 drive); |
774 | |
775 | #endif |
776 | |