2 * Copyright (C) ST-Ericsson SA 2010
4 * License Terms: GNU General Public License v2
6 * Authors: Sundar Iyer <sundar.iyer@stericsson.com>
7 * Bengt Jonsson <bengt.g.jonsson@stericsson.com>
8 * Daniel Willerud <daniel.willerud@stericsson.com>
10 * MOP500 board specific initialization for regulators
12 #include <linux/kernel.h>
13 #include <linux/regulator/machine.h>
14 #include <linux/regulator/ab8500.h>
15 #include <mach/id.h> /* to identify older boards for fixes */
16 #include "board-mop500-regulators.h"
18 static struct regulator_consumer_supply gpio_en_3v3_consumers
[] = {
19 REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
22 struct regulator_init_data gpio_en_3v3_regulator
= {
27 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
29 .num_consumer_supplies
= ARRAY_SIZE(gpio_en_3v3_consumers
),
30 .consumer_supplies
= gpio_en_3v3_consumers
,
36 static struct regulator_consumer_supply tps61052_vaudio_consumers
[] = {
38 * Boost converter supply to raise voltage on audio speaker, this
39 * is actually connected to three pins, VInVhfL (left amplifier)
40 * VInVhfR (right amplifier) and VIntDClassInt - all three must
41 * be connected to the same voltage.
43 REGULATOR_SUPPLY("vintdclassint", "ab8500-codec.0"),
46 struct regulator_init_data tps61052_regulator
= {
51 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
53 .num_consumer_supplies
= ARRAY_SIZE(tps61052_vaudio_consumers
),
54 .consumer_supplies
= tps61052_vaudio_consumers
,
57 static struct regulator_consumer_supply ab8500_vaux1_consumers
[] = {
58 /* Main display, u8500 R3 uib */
59 REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"),
60 /* Main display, u8500 uib and ST uib */
61 REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"),
62 /* Secondary display, ST uib */
63 REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),
64 /* SFH7741 proximity sensor */
65 REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
66 /* BH1780GLS ambient light sensor */
67 REGULATOR_SUPPLY("vcc", "2-0029"),
68 /* lsm303dlh accelerometer */
69 REGULATOR_SUPPLY("vdd", "3-0018"),
70 /* lsm303dlhc accelerometer */
71 REGULATOR_SUPPLY("vdd", "2-0019"),
72 /* lsm303dlh magnetometer */
73 REGULATOR_SUPPLY("vdd", "2-001e"),
74 /* Rohm BU21013 Touchscreen devices */
75 REGULATOR_SUPPLY("avdd", "3-005c"),
76 REGULATOR_SUPPLY("avdd", "3-005d"),
77 /* Synaptics RMI4 Touchscreen device */
78 REGULATOR_SUPPLY("vdd", "3-004b"),
79 /* L3G4200D Gyroscope device */
80 REGULATOR_SUPPLY("vdd", "2-0068"),
81 /* Ambient light sensor device */
82 REGULATOR_SUPPLY("vdd", "3-0029"),
83 /* Pressure sensor device */
84 REGULATOR_SUPPLY("vdd", "2-005c"),
85 /* Cypress TrueTouch Touchscreen device */
86 REGULATOR_SUPPLY("vcpin", "spi8.0"),
88 REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
91 static struct regulator_consumer_supply ab8500_vaux2_consumers
[] = {
92 /* On-board eMMC power */
93 REGULATOR_SUPPLY("vmmc", "sdi4"),
94 /* AB8500 audio codec */
95 REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
98 static struct regulator_consumer_supply ab8500_vaux3_consumers
[] = {
99 /* External MMC slot power */
100 REGULATOR_SUPPLY("vmmc", "sdi0"),
103 static struct regulator_consumer_supply ab8505_vaux4_consumers
[] = {
106 static struct regulator_consumer_supply ab8505_vaux5_consumers
[] = {
109 static struct regulator_consumer_supply ab8505_vaux6_consumers
[] = {
112 static struct regulator_consumer_supply ab8505_vaux8_consumers
[] = {
113 /* AB8500 audio codec device */
114 REGULATOR_SUPPLY("v-aux8", NULL
),
117 static struct regulator_consumer_supply ab8505_vadc_consumers
[] = {
118 /* Internal general-purpose ADC */
119 REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
120 /* ADC for charger */
121 REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
124 static struct regulator_consumer_supply ab8500_vtvout_consumers
[] = {
125 /* TV-out DENC supply */
126 REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
127 /* Internal general-purpose ADC */
128 REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
131 static struct regulator_consumer_supply ab8500_vaud_consumers
[] = {
132 /* AB8500 audio-codec main supply */
133 REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
136 static struct regulator_consumer_supply ab8500_vamic1_consumers
[] = {
137 /* AB8500 audio-codec Mic1 supply */
138 REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
141 static struct regulator_consumer_supply ab8500_vamic2_consumers
[] = {
142 /* AB8500 audio-codec Mic2 supply */
143 REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
146 static struct regulator_consumer_supply ab8500_vdmic_consumers
[] = {
147 /* AB8500 audio-codec DMic supply */
148 REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
151 static struct regulator_consumer_supply ab8500_vintcore_consumers
[] = {
152 /* SoC core supply, no device */
153 REGULATOR_SUPPLY("v-intcore", NULL
),
154 /* USB Transceiver */
155 REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
158 static struct regulator_consumer_supply ab8505_usb_consumers
[] = {
159 /* HS USB OTG physical interface */
160 REGULATOR_SUPPLY("v-ape", NULL
),
163 static struct regulator_consumer_supply ab8500_vana_consumers
[] = {
164 /* External displays, connector on board, 1v8 power supply */
165 REGULATOR_SUPPLY("vsmps2", "mcde.0"),
168 /* ab8500 regulator register initialization */
169 static struct ab8500_regulator_reg_init ab8500_reg_init
[] = {
171 * VanaRequestCtrl = HP/LP depending on VxRequest
172 * VextSupply1RequestCtrl = HP/LP depending on VxRequest
174 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2
, 0xf0, 0x00),
176 * VextSupply2RequestCtrl = HP/LP depending on VxRequest
177 * VextSupply3RequestCtrl = HP/LP depending on VxRequest
178 * Vaux1RequestCtrl = HP/LP depending on VxRequest
179 * Vaux2RequestCtrl = HP/LP depending on VxRequest
181 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3
, 0xff, 0x00),
183 * Vaux3RequestCtrl = HP/LP depending on VxRequest
184 * SwHPReq = Control through SWValid disabled
186 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4
, 0x07, 0x00),
188 * VanaSysClkReq1HPValid = disabled
189 * Vaux1SysClkReq1HPValid = disabled
190 * Vaux2SysClkReq1HPValid = disabled
191 * Vaux3SysClkReq1HPValid = disabled
193 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1
, 0xe8, 0x00),
195 * VextSupply1SysClkReq1HPValid = disabled
196 * VextSupply2SysClkReq1HPValid = disabled
197 * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
199 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2
, 0x70, 0x40),
201 * VanaHwHPReq1Valid = disabled
202 * Vaux1HwHPreq1Valid = disabled
203 * Vaux2HwHPReq1Valid = disabled
204 * Vaux3HwHPReqValid = disabled
206 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1
, 0xe8, 0x00),
208 * VextSupply1HwHPReq1Valid = disabled
209 * VextSupply2HwHPReq1Valid = disabled
210 * VextSupply3HwHPReq1Valid = disabled
212 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2
, 0x07, 0x00),
214 * VanaHwHPReq2Valid = disabled
215 * Vaux1HwHPReq2Valid = disabled
216 * Vaux2HwHPReq2Valid = disabled
217 * Vaux3HwHPReq2Valid = disabled
219 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1
, 0xe8, 0x00),
221 * VextSupply1HwHPReq2Valid = disabled
222 * VextSupply2HwHPReq2Valid = disabled
223 * VextSupply3HwHPReq2Valid = HWReq2 controlled
225 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2
, 0x07, 0x04),
227 * VanaSwHPReqValid = disabled
228 * Vaux1SwHPReqValid = disabled
230 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1
, 0xa0, 0x00),
232 * Vaux2SwHPReqValid = disabled
233 * Vaux3SwHPReqValid = disabled
234 * VextSupply1SwHPReqValid = disabled
235 * VextSupply2SwHPReqValid = disabled
236 * VextSupply3SwHPReqValid = disabled
238 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2
, 0x1f, 0x00),
240 * SysClkReq2Valid1 = SysClkReq2 controlled
241 * SysClkReq3Valid1 = disabled
242 * SysClkReq4Valid1 = SysClkReq4 controlled
243 * SysClkReq5Valid1 = disabled
244 * SysClkReq6Valid1 = SysClkReq6 controlled
245 * SysClkReq7Valid1 = disabled
246 * SysClkReq8Valid1 = disabled
248 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1
, 0xfe, 0x2a),
250 * SysClkReq2Valid2 = disabled
251 * SysClkReq3Valid2 = disabled
252 * SysClkReq4Valid2 = disabled
253 * SysClkReq5Valid2 = disabled
254 * SysClkReq6Valid2 = SysClkReq6 controlled
255 * SysClkReq7Valid2 = disabled
256 * SysClkReq8Valid2 = disabled
258 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2
, 0xfe, 0x20),
260 * VTVoutEna = disabled
261 * Vintcore12Ena = disabled
262 * Vintcore12Sel = 1.25 V
263 * Vintcore12LP = inactive (HP)
264 * VTVoutLP = inactive (HP)
266 INIT_REGULATOR_REGISTER(AB8500_REGUMISC1
, 0xfe, 0x10),
268 * VaudioEna = disabled
269 * VdmicEna = disabled
270 * Vamic1Ena = disabled
271 * Vamic2Ena = disabled
273 INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY
, 0x1e, 0x00),
275 * Vamic1_dzout = high-Z when Vamic1 is disabled
276 * Vamic2_dzout = high-Z when Vamic2 is disabled
278 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC
, 0x03, 0x00),
280 * VPll = Hw controlled (NOTE! PRCMU bits)
281 * VanaRegu = force off
283 INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU
, 0x0f, 0x02),
285 * VrefDDREna = disabled
286 * VrefDDRSleepMode = inactive (no pulldown)
288 INIT_REGULATOR_REGISTER(AB8500_VREFDDR
, 0x03, 0x00),
290 * VextSupply1Regu = force LP
291 * VextSupply2Regu = force OFF
292 * VextSupply3Regu = force HP (-> STBB2=LP and TPS=LP)
293 * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
294 * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
296 INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU
, 0xff, 0x13),
298 * Vaux1Regu = force HP
299 * Vaux2Regu = force off
301 INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU
, 0x0f, 0x01),
303 * Vaux3Regu = force off
305 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU
, 0x03, 0x00),
309 INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL
, 0x0f, 0x08),
313 INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL
, 0x0f, 0x0d),
317 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL
, 0x07, 0x07),
319 * VextSupply12LP = disabled (no LP)
321 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE
, 0x01, 0x00),
323 * Vaux1Disch = short discharge time
324 * Vaux2Disch = short discharge time
325 * Vaux3Disch = short discharge time
326 * Vintcore12Disch = short discharge time
327 * VTVoutDisch = short discharge time
328 * VaudioDisch = short discharge time
330 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH
, 0xfc, 0x00),
332 * VanaDisch = short discharge time
333 * VdmicPullDownEna = pulldown disabled when Vdmic is disabled
334 * VdmicDisch = short discharge time
336 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2
, 0x16, 0x00),
339 /* AB8500 regulators */
340 static struct regulator_init_data ab8500_regulators
[AB8500_NUM_REGULATORS
] = {
341 /* supplies to the display/camera */
342 [AB8500_LDO_AUX1
] = {
347 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
348 REGULATOR_CHANGE_STATUS
,
349 .boot_on
= 1, /* display is on at boot */
351 * This voltage cannot be disabled right now because
352 * it is somehow affecting the external MMC
353 * functionality, though that typically will use
358 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaux1_consumers
),
359 .consumer_supplies
= ab8500_vaux1_consumers
,
361 /* supplies to the on-board eMMC */
362 [AB8500_LDO_AUX2
] = {
367 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
368 REGULATOR_CHANGE_STATUS
,
370 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaux2_consumers
),
371 .consumer_supplies
= ab8500_vaux2_consumers
,
373 /* supply for VAUX3, supplies to SDcard slots */
374 [AB8500_LDO_AUX3
] = {
379 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
380 REGULATOR_CHANGE_STATUS
,
382 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaux3_consumers
),
383 .consumer_supplies
= ab8500_vaux3_consumers
,
385 /* supply for tvout, gpadc, TVOUT LDO */
386 [AB8500_LDO_TVOUT
] = {
389 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
391 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vtvout_consumers
),
392 .consumer_supplies
= ab8500_vtvout_consumers
,
394 /* supply for ab8500-vaudio, VAUDIO LDO */
395 [AB8500_LDO_AUDIO
] = {
398 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
400 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaud_consumers
),
401 .consumer_supplies
= ab8500_vaud_consumers
,
403 /* supply for v-anamic1 VAMic1-LDO */
404 [AB8500_LDO_ANAMIC1
] = {
407 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
409 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vamic1_consumers
),
410 .consumer_supplies
= ab8500_vamic1_consumers
,
412 /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
413 [AB8500_LDO_ANAMIC2
] = {
416 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
418 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vamic2_consumers
),
419 .consumer_supplies
= ab8500_vamic2_consumers
,
421 /* supply for v-dmic, VDMIC LDO */
422 [AB8500_LDO_DMIC
] = {
425 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
427 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vdmic_consumers
),
428 .consumer_supplies
= ab8500_vdmic_consumers
,
430 /* supply for v-intcore12, VINTCORE12 LDO */
431 [AB8500_LDO_INTCORE
] = {
434 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
436 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vintcore_consumers
),
437 .consumer_supplies
= ab8500_vintcore_consumers
,
439 /* supply for U8500 CSI/DSI, VANA LDO */
443 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
445 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vana_consumers
),
446 .consumer_supplies
= ab8500_vana_consumers
,
450 /* supply for VextSupply3 */
451 static struct regulator_consumer_supply ab8500_ext_supply3_consumers
[] = {
452 /* SIM supply for 3 V SIM cards */
453 REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
456 /* extended configuration for VextSupply2, only used for HREFP_V20 boards */
457 static struct ab8500_ext_regulator_cfg ab8500_ext_supply2
= {
462 * AB8500 external regulators
464 static struct regulator_init_data ab8500_ext_regulators
[] = {
465 /* fixed Vbat supplies VSMPS1_EXT_1V8 */
466 [AB8500_EXT_SUPPLY1
] = {
468 .name
= "ab8500-ext-supply1",
471 .initial_mode
= REGULATOR_MODE_IDLE
,
476 /* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */
477 [AB8500_EXT_SUPPLY2
] = {
479 .name
= "ab8500-ext-supply2",
484 /* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */
485 [AB8500_EXT_SUPPLY3
] = {
487 .name
= "ab8500-ext-supply3",
490 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
493 .num_consumer_supplies
=
494 ARRAY_SIZE(ab8500_ext_supply3_consumers
),
495 .consumer_supplies
= ab8500_ext_supply3_consumers
,
499 /* ab8505 regulator register initialization */
500 static struct ab8500_regulator_reg_init ab8505_reg_init
[] = {
507 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1
, 0x00, 0x00),
511 * VanaRequestCtrl = HP/LP depending on VxRequest
513 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2
, 0x30, 0x00),
515 * Vaux1RequestCtrl = HP/LP depending on VxRequest
516 * Vaux2RequestCtrl = HP/LP depending on VxRequest
518 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3
, 0xf0, 0x00),
520 * Vaux3RequestCtrl = HP/LP depending on VxRequest
521 * SwHPReq = Control through SWValid disabled
523 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4
, 0x07, 0x00),
525 * VsmpsASysClkReq1HPValid
526 * VsmpsBSysClkReq1HPValid
527 * VsafeSysClkReq1HPValid
528 * VanaSysClkReq1HPValid = disabled
529 * VpllSysClkReq1HPValid
530 * Vaux1SysClkReq1HPValid = disabled
531 * Vaux2SysClkReq1HPValid = disabled
532 * Vaux3SysClkReq1HPValid = disabled
534 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1
, 0xe8, 0x00),
536 * VsmpsCSysClkReq1HPValid
537 * VarmSysClkReq1HPValid
538 * VbbSysClkReq1HPValid
539 * VsmpsMSysClkReq1HPValid
541 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2
, 0x00, 0x00),
543 * VsmpsAHwHPReq1Valid
544 * VsmpsBHwHPReq1Valid
546 * VanaHwHPReq1Valid = disabled
548 * Vaux1HwHPreq1Valid = disabled
549 * Vaux2HwHPReq1Valid = disabled
550 * Vaux3HwHPReqValid = disabled
552 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1
, 0xe8, 0x00),
554 * VsmpsMHwHPReq1Valid
556 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2
, 0x00, 0x00),
558 * VsmpsAHwHPReq2Valid
559 * VsmpsBHwHPReq2Valid
561 * VanaHwHPReq2Valid = disabled
563 * Vaux1HwHPReq2Valid = disabled
564 * Vaux2HwHPReq2Valid = disabled
565 * Vaux3HwHPReq2Valid = disabled
567 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1
, 0xe8, 0x00),
569 * VsmpsMHwHPReq2Valid
571 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2
, 0x00, 0x00),
579 * VanaSwHPReqValid = disabled
581 * Vaux1SwHPReqValid = disabled
583 INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1
, 0xa0, 0x00),
585 * Vaux2SwHPReqValid = disabled
586 * Vaux3SwHPReqValid = disabled
589 INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2
, 0x03, 0x00),
591 * SysClkReq2Valid1 = SysClkReq2 controlled
592 * SysClkReq3Valid1 = disabled
593 * SysClkReq4Valid1 = SysClkReq4 controlled
595 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1
, 0x0e, 0x0a),
597 * SysClkReq2Valid2 = disabled
598 * SysClkReq3Valid2 = disabled
599 * SysClkReq4Valid2 = disabled
601 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2
, 0x0e, 0x00),
606 * Vaux4SysClkReq1HPValid
608 INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID
, 0x00, 0x00),
611 * VintCore12Ena = disabled
612 * VintCore12Sel = 1.25 V
613 * VintCore12LP = inactive (HP)
614 * VadcLP = inactive (HP)
616 INIT_REGULATOR_REGISTER(AB8505_REGUMISC1
, 0xfe, 0x10),
618 * VaudioEna = disabled
619 * Vaux8Ena = disabled
620 * Vamic1Ena = disabled
621 * Vamic2Ena = disabled
623 INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY
, 0x1e, 0x00),
625 * Vamic1_dzout = high-Z when Vamic1 is disabled
626 * Vamic2_dzout = high-Z when Vamic2 is disabled
628 INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC
, 0x03, 0x00),
635 INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU
, 0x00, 0x00),
642 INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU
, 0x00, 0x00),
649 INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU
, 0x00, 0x00),
651 * VPll = Hw controlled (NOTE! PRCMU bits)
652 * VanaRegu = force off
654 INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU
, 0x0f, 0x02),
656 * VextSupply1Regu = force OFF (OTP_ExtSupply12LPnPolarity 1)
657 * VextSupply2Regu = force OFF (OTP_ExtSupply12LPnPolarity 1)
658 * VextSupply3Regu = force OFF (OTP_ExtSupply3LPnPolarity 0)
659 * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
660 * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
662 INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU
, 0xff, 0x30),
664 * Vaux1Regu = force HP
665 * Vaux2Regu = force off
667 INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU
, 0x0f, 0x01),
669 * Vaux3Regu = force off
671 INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU
, 0x03, 0x00),
675 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1
, 0x00, 0x00),
679 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2
, 0x00, 0x00),
683 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3
, 0x00, 0x00),
687 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1
, 0x00, 0x00),
691 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2
, 0x00, 0x00),
695 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3
, 0x00, 0x00),
699 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1
, 0x00, 0x00),
703 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2
, 0x00, 0x00),
707 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3
, 0x00, 0x00),
711 INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL
, 0x0f, 0x0C),
715 INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL
, 0x0f, 0x0d),
719 INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL
, 0x07, 0x07),
723 INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL
, 0x00, 0x00),
727 INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU
, 0x00, 0x00),
731 INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL
, 0x00, 0x00),
733 * Vaux1Disch = short discharge time
734 * Vaux2Disch = short discharge time
735 * Vaux3Disch = short discharge time
736 * Vintcore12Disch = short discharge time
737 * VTVoutDisch = short discharge time
738 * VaudioDisch = short discharge time
740 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH
, 0xfc, 0x00),
742 * VanaDisch = short discharge time
743 * Vaux8PullDownEna = pulldown disabled when Vaux8 is disabled
744 * Vaux8Disch = short discharge time
746 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2
, 0x16, 0x00),
748 * Vaux4Disch = short discharge time
750 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3
, 0x01, 0x00),
759 INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5
, 0x00, 0x00),
766 INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6
, 0x00, 0x00),
769 struct regulator_init_data ab8505_regulators
[AB8505_NUM_REGULATORS
] = {
770 /* supplies to the display/camera */
771 [AB8505_LDO_AUX1
] = {
776 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
777 REGULATOR_CHANGE_STATUS
,
778 .boot_on
= 1, /* display is on at boot */
780 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaux1_consumers
),
781 .consumer_supplies
= ab8500_vaux1_consumers
,
783 /* supplies to the on-board eMMC */
784 [AB8505_LDO_AUX2
] = {
789 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
790 REGULATOR_CHANGE_STATUS
|
791 REGULATOR_CHANGE_MODE
,
792 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
795 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaux2_consumers
),
796 .consumer_supplies
= ab8500_vaux2_consumers
,
798 /* supply for VAUX3, supplies to SDcard slots */
799 [AB8505_LDO_AUX3
] = {
804 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
805 REGULATOR_CHANGE_STATUS
|
806 REGULATOR_CHANGE_MODE
,
807 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
810 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaux3_consumers
),
811 .consumer_supplies
= ab8500_vaux3_consumers
,
813 /* supply for VAUX4, supplies to NFC and standalone secure element */
814 [AB8505_LDO_AUX4
] = {
819 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
820 REGULATOR_CHANGE_STATUS
|
821 REGULATOR_CHANGE_MODE
,
822 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
825 .num_consumer_supplies
= ARRAY_SIZE(ab8505_vaux4_consumers
),
826 .consumer_supplies
= ab8505_vaux4_consumers
,
828 /* supply for VAUX5, supplies to TBD */
829 [AB8505_LDO_AUX5
] = {
834 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
835 REGULATOR_CHANGE_STATUS
|
836 REGULATOR_CHANGE_MODE
,
837 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
840 .num_consumer_supplies
= ARRAY_SIZE(ab8505_vaux5_consumers
),
841 .consumer_supplies
= ab8505_vaux5_consumers
,
843 /* supply for VAUX6, supplies to TBD */
844 [AB8505_LDO_AUX6
] = {
849 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
850 REGULATOR_CHANGE_STATUS
|
851 REGULATOR_CHANGE_MODE
,
852 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
855 .num_consumer_supplies
= ARRAY_SIZE(ab8505_vaux6_consumers
),
856 .consumer_supplies
= ab8505_vaux6_consumers
,
858 /* supply for gpadc, ADC LDO */
862 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
864 .num_consumer_supplies
= ARRAY_SIZE(ab8505_vadc_consumers
),
865 .consumer_supplies
= ab8505_vadc_consumers
,
867 /* supply for ab8500-vaudio, VAUDIO LDO */
868 [AB8505_LDO_AUDIO
] = {
871 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
873 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vaud_consumers
),
874 .consumer_supplies
= ab8500_vaud_consumers
,
876 /* supply for v-anamic1 VAMic1-LDO */
877 [AB8505_LDO_ANAMIC1
] = {
880 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
882 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vamic1_consumers
),
883 .consumer_supplies
= ab8500_vamic1_consumers
,
885 /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
886 [AB8505_LDO_ANAMIC2
] = {
889 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
891 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vamic2_consumers
),
892 .consumer_supplies
= ab8500_vamic2_consumers
,
894 /* supply for v-aux8, VAUX8 LDO */
895 [AB8505_LDO_AUX8
] = {
898 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
900 .num_consumer_supplies
= ARRAY_SIZE(ab8505_vaux8_consumers
),
901 .consumer_supplies
= ab8505_vaux8_consumers
,
903 /* supply for v-intcore12, VINTCORE12 LDO */
904 [AB8505_LDO_INTCORE
] = {
910 .valid_ops_mask
= REGULATOR_CHANGE_VOLTAGE
|
911 REGULATOR_CHANGE_STATUS
|
912 REGULATOR_CHANGE_MODE
|
913 REGULATOR_CHANGE_DRMS
,
914 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
917 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vintcore_consumers
),
918 .consumer_supplies
= ab8500_vintcore_consumers
,
920 /* supply for LDO USB */
924 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
|
925 REGULATOR_CHANGE_MODE
,
926 .valid_modes_mask
= REGULATOR_MODE_NORMAL
|
929 .num_consumer_supplies
= ARRAY_SIZE(ab8505_usb_consumers
),
930 .consumer_supplies
= ab8505_usb_consumers
,
932 /* supply for U8500 CSI-DSI, VANA LDO */
936 .valid_ops_mask
= REGULATOR_CHANGE_STATUS
,
938 .num_consumer_supplies
= ARRAY_SIZE(ab8500_vana_consumers
),
939 .consumer_supplies
= ab8500_vana_consumers
,
943 struct ab8500_regulator_platform_data ab8500_regulator_plat_data
= {
944 .reg_init
= ab8500_reg_init
,
945 .num_reg_init
= ARRAY_SIZE(ab8500_reg_init
),
946 .regulator
= ab8500_regulators
,
947 .num_regulator
= ARRAY_SIZE(ab8500_regulators
),
948 .ext_regulator
= ab8500_ext_regulators
,
949 .num_ext_regulator
= ARRAY_SIZE(ab8500_ext_regulators
),
952 /* Use the AB8500 init settings for AB8505 as they are the same right now */
953 struct ab8500_regulator_platform_data ab8505_regulator_plat_data
= {
954 .reg_init
= ab8505_reg_init
,
955 .num_reg_init
= ARRAY_SIZE(ab8505_reg_init
),
956 .regulator
= ab8505_regulators
,
957 .num_regulator
= ARRAY_SIZE(ab8505_regulators
),
960 static void ab8500_modify_reg_init(int id
, u8 mask
, u8 value
)
964 if (cpu_is_u8520()) {
965 for (i
= ARRAY_SIZE(ab8505_reg_init
) - 1; i
>= 0; i
--) {
966 if (ab8505_reg_init
[i
].id
== id
) {
967 u8 initval
= ab8505_reg_init
[i
].value
;
968 initval
= (initval
& ~mask
) | (value
& mask
);
969 ab8505_reg_init
[i
].value
= initval
;
971 BUG_ON(mask
& ~ab8505_reg_init
[i
].mask
);
976 for (i
= ARRAY_SIZE(ab8500_reg_init
) - 1; i
>= 0; i
--) {
977 if (ab8500_reg_init
[i
].id
== id
) {
978 u8 initval
= ab8500_reg_init
[i
].value
;
979 initval
= (initval
& ~mask
) | (value
& mask
);
980 ab8500_reg_init
[i
].value
= initval
;
982 BUG_ON(mask
& ~ab8500_reg_init
[i
].mask
);
991 void mop500_regulator_init(void)
993 struct regulator_init_data
*regulator
;
996 * Handle VextSupply1 on older boards than HREFP_V22_V1x
997 * (turn off in suspend)
999 if (cpu_is_u8500v20() || cpu_is_u8500v21()) {
1000 /* disable VextSupply1 in suspend */
1001 regulator
= &ab8500_ext_regulators
[AB8500_EXT_SUPPLY1
];
1002 regulator
->constraints
.state_mem
.disabled
= 1;
1003 regulator
->constraints
.state_standby
.disabled
= 1;
1006 if (cpu_is_u8520()) {
1007 /* Vaux2 initialized to be on */
1008 ab8500_modify_reg_init(AB8505_VAUX12REGU
, 0x0f, 0x05);
1012 * Handle AB8500_EXT_SUPPLY2 on HREFP_V20_V50 boards (do it for
1013 * all HREFP_V20 boards)
1015 if (cpu_is_u8500v20()) {
1016 /* VextSupply2RequestCtrl = HP/OFF depending on VxRequest */
1017 ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3
, 0x01, 0x01);
1019 /* VextSupply2SysClkReq1HPValid = SysClkReq1 controlled */
1020 ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2
,
1023 /* VextSupply2 = force HP at initialization */
1024 ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU
, 0x0c, 0x04);
1026 /* enable VextSupply2 during platform active */
1027 regulator
= &ab8500_ext_regulators
[AB8500_EXT_SUPPLY2
];
1028 regulator
->constraints
.always_on
= 1;
1030 /* disable VextSupply2 in suspend */
1031 regulator
= &ab8500_ext_regulators
[AB8500_EXT_SUPPLY2
];
1032 regulator
->constraints
.state_mem
.disabled
= 1;
1033 regulator
->constraints
.state_standby
.disabled
= 1;
1035 /* enable VextSupply2 HW control (used in suspend) */
1036 regulator
->driver_data
= (void *)&ab8500_ext_supply2
;