Merge branch 'bcache-for-upstream' of git://evilpiepirate.org/~kent/linux-bcache...
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-ux500 / board-mop500-regulators.c
1 /*
2  * Copyright (C) ST-Ericsson SA 2010
3  *
4  * License Terms: GNU General Public License v2
5  *
6  * Authors: Sundar Iyer <sundar.iyer@stericsson.com>
7  *          Bengt Jonsson <bengt.g.jonsson@stericsson.com>
8  *          Daniel Willerud <daniel.willerud@stericsson.com>
9  *
10  * MOP500 board specific initialization for regulators
11  */
12 #include <linux/kernel.h>
13 #include <linux/regulator/machine.h>
14 #include <linux/regulator/ab8500.h>
15 #include "board-mop500-regulators.h"
16 #include "id.h"
17
18 static struct regulator_consumer_supply gpio_en_3v3_consumers[] = {
19        REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
20 };
21
22 struct regulator_init_data gpio_en_3v3_regulator = {
23        .constraints = {
24                .name = "EN-3V3",
25                .min_uV = 3300000,
26                .max_uV = 3300000,
27                .valid_ops_mask = REGULATOR_CHANGE_STATUS,
28        },
29        .num_consumer_supplies = ARRAY_SIZE(gpio_en_3v3_consumers),
30        .consumer_supplies = gpio_en_3v3_consumers,
31 };
32
33 static struct regulator_consumer_supply sdi0_reg_consumers[] = {
34         REGULATOR_SUPPLY("vqmmc", "sdi0"),
35 };
36
37 struct regulator_init_data sdi0_reg_init_data = {
38         .constraints = {
39                 .min_uV         = 1800000,
40                 .max_uV         = 2900000,
41                 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|REGULATOR_CHANGE_STATUS,
42         },
43         .num_consumer_supplies  = ARRAY_SIZE(sdi0_reg_consumers),
44         .consumer_supplies      = sdi0_reg_consumers,
45 };
46
47 /*
48  * TPS61052 regulator
49  */
50 static struct regulator_consumer_supply tps61052_vaudio_consumers[] = {
51         /*
52          * Boost converter supply to raise voltage on audio speaker, this
53          * is actually connected to three pins, VInVhfL (left amplifier)
54          * VInVhfR (right amplifier) and VIntDClassInt - all three must
55          * be connected to the same voltage.
56          */
57         REGULATOR_SUPPLY("vintdclassint", "ab8500-codec.0"),
58 };
59
60 struct regulator_init_data tps61052_regulator = {
61         .constraints = {
62                 .name = "vaudio-hf",
63                 .min_uV = 4500000,
64                 .max_uV = 4500000,
65                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
66         },
67         .num_consumer_supplies = ARRAY_SIZE(tps61052_vaudio_consumers),
68         .consumer_supplies = tps61052_vaudio_consumers,
69 };
70
71 static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
72         /* Main display, u8500 R3 uib */
73         REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"),
74         /* Main display, u8500 uib and ST uib */
75         REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"),
76         /* Secondary display, ST uib */
77         REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),
78         /* SFH7741 proximity sensor */
79         REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
80         /* BH1780GLS ambient light sensor */
81         REGULATOR_SUPPLY("vcc", "2-0029"),
82         /* lsm303dlh accelerometer */
83         REGULATOR_SUPPLY("vdd", "2-0018"),
84         /* lsm303dlhc accelerometer */
85         REGULATOR_SUPPLY("vdd", "2-0019"),
86         /* lsm303dlh magnetometer */
87         REGULATOR_SUPPLY("vdd", "2-001e"),
88         /* Rohm BU21013 Touchscreen devices */
89         REGULATOR_SUPPLY("avdd", "3-005c"),
90         REGULATOR_SUPPLY("avdd", "3-005d"),
91         /* Synaptics RMI4 Touchscreen device */
92         REGULATOR_SUPPLY("vdd", "3-004b"),
93         /* L3G4200D Gyroscope device */
94         REGULATOR_SUPPLY("vdd", "2-0068"),
95         /* Ambient light sensor device */
96         REGULATOR_SUPPLY("vdd", "3-0029"),
97         /* Pressure sensor device */
98         REGULATOR_SUPPLY("vdd", "2-005c"),
99         /* Cypress TrueTouch Touchscreen device */
100         REGULATOR_SUPPLY("vcpin", "spi8.0"),
101         /* Camera device */
102         REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
103 };
104
105 static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
106         /* On-board eMMC power */
107         REGULATOR_SUPPLY("vmmc", "sdi4"),
108         /* AB8500 audio codec */
109         REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
110         /* AB8500 accessory detect 1 */
111         REGULATOR_SUPPLY("vcc-N2158", "ab8500-acc-det.0"),
112         /* AB8500 Tv-out device */
113         REGULATOR_SUPPLY("vcc-N2158", "mcde_tv_ab8500.4"),
114         /* AV8100 HDMI device */
115         REGULATOR_SUPPLY("vcc-N2158", "av8100_hdmi.3"),
116 };
117
118 static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
119         REGULATOR_SUPPLY("v-SD-STM", "stm"),
120         /* External MMC slot power */
121         REGULATOR_SUPPLY("vmmc", "sdi0"),
122 };
123
124 static struct regulator_consumer_supply ab8505_vaux4_consumers[] = {
125 };
126
127 static struct regulator_consumer_supply ab8505_vaux5_consumers[] = {
128 };
129
130 static struct regulator_consumer_supply ab8505_vaux6_consumers[] = {
131 };
132
133 static struct regulator_consumer_supply ab8505_vaux8_consumers[] = {
134         /* AB8500 audio codec device */
135         REGULATOR_SUPPLY("v-aux8", NULL),
136 };
137
138 static struct regulator_consumer_supply ab8505_vadc_consumers[] = {
139         /* Internal general-purpose ADC */
140         REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
141         /* ADC for charger */
142         REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
143 };
144
145 static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
146         /* TV-out DENC supply */
147         REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
148         /* Internal general-purpose ADC */
149         REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
150         /* ADC for charger */
151         REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
152         /* AB8500 Tv-out device */
153         REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),
154 };
155
156 static struct regulator_consumer_supply ab8500_vaud_consumers[] = {
157         /* AB8500 audio-codec main supply */
158         REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
159 };
160
161 static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
162         /* AB8500 audio-codec Mic1 supply */
163         REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
164 };
165
166 static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
167         /* AB8500 audio-codec Mic2 supply */
168         REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
169 };
170
171 static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
172         /* AB8500 audio-codec DMic supply */
173         REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
174 };
175
176 static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
177         /* SoC core supply, no device */
178         REGULATOR_SUPPLY("v-intcore", NULL),
179         /* USB Transceiver */
180         REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
181         /* Handled by abx500 clk driver */
182         REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"),
183 };
184
185 static struct regulator_consumer_supply ab8505_usb_consumers[] = {
186         /* HS USB OTG physical interface */
187         REGULATOR_SUPPLY("v-ape", NULL),
188 };
189
190 static struct regulator_consumer_supply ab8500_vana_consumers[] = {
191         /* DB8500 DSI */
192         REGULATOR_SUPPLY("vdddsi1v2", "mcde"),
193         REGULATOR_SUPPLY("vdddsi1v2", "b2r2_core"),
194         REGULATOR_SUPPLY("vdddsi1v2", "b2r2_1_core"),
195         REGULATOR_SUPPLY("vdddsi1v2", "dsilink.0"),
196         REGULATOR_SUPPLY("vdddsi1v2", "dsilink.1"),
197         REGULATOR_SUPPLY("vdddsi1v2", "dsilink.2"),
198         /* DB8500 CSI */
199         REGULATOR_SUPPLY("vddcsi1v2", "mmio_camera"),
200 };
201
202 /* ab8500 regulator register initialization */
203 static struct ab8500_regulator_reg_init ab8500_reg_init[] = {
204         /*
205          * VanaRequestCtrl          = HP/LP depending on VxRequest
206          * VextSupply1RequestCtrl   = HP/LP depending on VxRequest
207          */
208         INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2,       0xf0, 0x00),
209         /*
210          * VextSupply2RequestCtrl   = HP/LP depending on VxRequest
211          * VextSupply3RequestCtrl   = HP/LP depending on VxRequest
212          * Vaux1RequestCtrl         = HP/LP depending on VxRequest
213          * Vaux2RequestCtrl         = HP/LP depending on VxRequest
214          */
215         INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3,       0xff, 0x00),
216         /*
217          * Vaux3RequestCtrl         = HP/LP depending on VxRequest
218          * SwHPReq                  = Control through SWValid disabled
219          */
220         INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4,       0x07, 0x00),
221         /*
222          * VanaSysClkReq1HPValid    = disabled
223          * Vaux1SysClkReq1HPValid   = disabled
224          * Vaux2SysClkReq1HPValid   = disabled
225          * Vaux3SysClkReq1HPValid   = disabled
226          */
227         INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
228         /*
229          * VextSupply1SysClkReq1HPValid = disabled
230          * VextSupply2SysClkReq1HPValid = disabled
231          * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
232          */
233         INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),
234         /*
235          * VanaHwHPReq1Valid        = disabled
236          * Vaux1HwHPreq1Valid       = disabled
237          * Vaux2HwHPReq1Valid       = disabled
238          * Vaux3HwHPReqValid        = disabled
239          */
240         INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1,     0xe8, 0x00),
241         /*
242          * VextSupply1HwHPReq1Valid = disabled
243          * VextSupply2HwHPReq1Valid = disabled
244          * VextSupply3HwHPReq1Valid = disabled
245          */
246         INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2,     0x07, 0x00),
247         /*
248          * VanaHwHPReq2Valid        = disabled
249          * Vaux1HwHPReq2Valid       = disabled
250          * Vaux2HwHPReq2Valid       = disabled
251          * Vaux3HwHPReq2Valid       = disabled
252          */
253         INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1,     0xe8, 0x00),
254         /*
255          * VextSupply1HwHPReq2Valid = disabled
256          * VextSupply2HwHPReq2Valid = disabled
257          * VextSupply3HwHPReq2Valid = HWReq2 controlled
258          */
259         INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2,     0x07, 0x04),
260         /*
261          * VanaSwHPReqValid         = disabled
262          * Vaux1SwHPReqValid        = disabled
263          */
264         INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1,      0xa0, 0x00),
265         /*
266          * Vaux2SwHPReqValid        = disabled
267          * Vaux3SwHPReqValid        = disabled
268          * VextSupply1SwHPReqValid  = disabled
269          * VextSupply2SwHPReqValid  = disabled
270          * VextSupply3SwHPReqValid  = disabled
271          */
272         INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2,      0x1f, 0x00),
273         /*
274          * SysClkReq2Valid1         = SysClkReq2 controlled
275          * SysClkReq3Valid1         = disabled
276          * SysClkReq4Valid1         = SysClkReq4 controlled
277          * SysClkReq5Valid1         = disabled
278          * SysClkReq6Valid1         = SysClkReq6 controlled
279          * SysClkReq7Valid1         = disabled
280          * SysClkReq8Valid1         = disabled
281          */
282         INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1,    0xfe, 0x2a),
283         /*
284          * SysClkReq2Valid2         = disabled
285          * SysClkReq3Valid2         = disabled
286          * SysClkReq4Valid2         = disabled
287          * SysClkReq5Valid2         = disabled
288          * SysClkReq6Valid2         = SysClkReq6 controlled
289          * SysClkReq7Valid2         = disabled
290          * SysClkReq8Valid2         = disabled
291          */
292         INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2,    0xfe, 0x20),
293         /*
294          * VTVoutEna                = disabled
295          * Vintcore12Ena            = disabled
296          * Vintcore12Sel            = 1.25 V
297          * Vintcore12LP             = inactive (HP)
298          * VTVoutLP                 = inactive (HP)
299          */
300         INIT_REGULATOR_REGISTER(AB8500_REGUMISC1,              0xfe, 0x10),
301         /*
302          * VaudioEna                = disabled
303          * VdmicEna                 = disabled
304          * Vamic1Ena                = disabled
305          * Vamic2Ena                = disabled
306          */
307         INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY,           0x1e, 0x00),
308         /*
309          * Vamic1_dzout             = high-Z when Vamic1 is disabled
310          * Vamic2_dzout             = high-Z when Vamic2 is disabled
311          */
312         INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC,         0x03, 0x00),
313         /*
314          * VPll                     = Hw controlled (NOTE! PRCMU bits)
315          * VanaRegu                 = force off
316          */
317         INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU,           0x0f, 0x02),
318         /*
319          * VrefDDREna               = disabled
320          * VrefDDRSleepMode         = inactive (no pulldown)
321          */
322         INIT_REGULATOR_REGISTER(AB8500_VREFDDR,                0x03, 0x00),
323         /*
324          * VextSupply1Regu          = force LP
325          * VextSupply2Regu          = force OFF
326          * VextSupply3Regu          = force HP (-> STBB2=LP and TPS=LP)
327          * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0
328          * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0
329          */
330         INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU,          0xff, 0x13),
331         /*
332          * Vaux1Regu                = force HP
333          * Vaux2Regu                = force off
334          */
335         INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU,             0x0f, 0x01),
336         /*
337          * Vaux3Regu                = force off
338          */
339         INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU,          0x03, 0x00),
340         /*
341          * Vaux1Sel                 = 2.8 V
342          */
343         INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL,               0x0f, 0x0C),
344         /*
345          * Vaux2Sel                 = 2.9 V
346          */
347         INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL,               0x0f, 0x0d),
348         /*
349          * Vaux3Sel                 = 2.91 V
350          */
351         INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL,           0x07, 0x07),
352         /*
353          * VextSupply12LP           = disabled (no LP)
354          */
355         INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE,         0x01, 0x00),
356         /*
357          * Vaux1Disch               = short discharge time
358          * Vaux2Disch               = short discharge time
359          * Vaux3Disch               = short discharge time
360          * Vintcore12Disch          = short discharge time
361          * VTVoutDisch              = short discharge time
362          * VaudioDisch              = short discharge time
363          */
364         INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH,          0xfc, 0x00),
365         /*
366          * VanaDisch                = short discharge time
367          * VdmicPullDownEna         = pulldown disabled when Vdmic is disabled
368          * VdmicDisch               = short discharge time
369          */
370         INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2,         0x16, 0x00),
371 };
372
373 /* AB8500 regulators */
374 static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
375         /* supplies to the display/camera */
376         [AB8500_LDO_AUX1] = {
377                 .constraints = {
378                         .name = "V-DISPLAY",
379                         .min_uV = 2800000,
380                         .max_uV = 3300000,
381                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
382                                           REGULATOR_CHANGE_STATUS,
383                         .boot_on = 1, /* display is on at boot */
384                 },
385                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
386                 .consumer_supplies = ab8500_vaux1_consumers,
387         },
388         /* supplies to the on-board eMMC */
389         [AB8500_LDO_AUX2] = {
390                 .constraints = {
391                         .name = "V-eMMC1",
392                         .min_uV = 1100000,
393                         .max_uV = 3300000,
394                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
395                                           REGULATOR_CHANGE_STATUS |
396                                           REGULATOR_CHANGE_MODE,
397                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
398                                             REGULATOR_MODE_IDLE,
399                 },
400                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
401                 .consumer_supplies = ab8500_vaux2_consumers,
402         },
403         /* supply for VAUX3, supplies to SDcard slots */
404         [AB8500_LDO_AUX3] = {
405                 .constraints = {
406                         .name = "V-MMC-SD",
407                         .min_uV = 1100000,
408                         .max_uV = 3300000,
409                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
410                                           REGULATOR_CHANGE_STATUS |
411                                           REGULATOR_CHANGE_MODE,
412                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
413                                             REGULATOR_MODE_IDLE,
414                 },
415                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
416                 .consumer_supplies = ab8500_vaux3_consumers,
417         },
418         /* supply for tvout, gpadc, TVOUT LDO */
419         [AB8500_LDO_TVOUT] = {
420                 .constraints = {
421                         .name = "V-TVOUT",
422                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
423                 },
424                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
425                 .consumer_supplies = ab8500_vtvout_consumers,
426         },
427         /* supply for ab8500-vaudio, VAUDIO LDO */
428         [AB8500_LDO_AUDIO] = {
429                 .constraints = {
430                         .name = "V-AUD",
431                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
432                 },
433                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
434                 .consumer_supplies = ab8500_vaud_consumers,
435         },
436         /* supply for v-anamic1 VAMic1-LDO */
437         [AB8500_LDO_ANAMIC1] = {
438                 .constraints = {
439                         .name = "V-AMIC1",
440                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
441                 },
442                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
443                 .consumer_supplies = ab8500_vamic1_consumers,
444         },
445         /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
446         [AB8500_LDO_ANAMIC2] = {
447                 .constraints = {
448                         .name = "V-AMIC2",
449                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
450                 },
451                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
452                 .consumer_supplies = ab8500_vamic2_consumers,
453         },
454         /* supply for v-dmic, VDMIC LDO */
455         [AB8500_LDO_DMIC] = {
456                 .constraints = {
457                         .name = "V-DMIC",
458                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
459                 },
460                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers),
461                 .consumer_supplies = ab8500_vdmic_consumers,
462         },
463         /* supply for v-intcore12, VINTCORE12 LDO */
464         [AB8500_LDO_INTCORE] = {
465                 .constraints = {
466                         .name = "V-INTCORE",
467                         .min_uV = 1250000,
468                         .max_uV = 1350000,
469                         .input_uV = 1800000,
470                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
471                                           REGULATOR_CHANGE_STATUS |
472                                           REGULATOR_CHANGE_MODE |
473                                           REGULATOR_CHANGE_DRMS,
474                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
475                                             REGULATOR_MODE_IDLE,
476                 },
477                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
478                 .consumer_supplies = ab8500_vintcore_consumers,
479         },
480         /* supply for U8500 CSI-DSI, VANA LDO */
481         [AB8500_LDO_ANA] = {
482                 .constraints = {
483                         .name = "V-CSI-DSI",
484                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
485                 },
486                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
487                 .consumer_supplies = ab8500_vana_consumers,
488         },
489 };
490
491 /* supply for VextSupply3 */
492 static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = {
493         /* SIM supply for 3 V SIM cards */
494         REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
495 };
496
497 /* extended configuration for VextSupply2, only used for HREFP_V20 boards */
498 static struct ab8500_ext_regulator_cfg ab8500_ext_supply2 = {
499         .hwreq = true,
500 };
501
502 /*
503  * AB8500 external regulators
504  */
505 static struct regulator_init_data ab8500_ext_regulators[] = {
506         /* fixed Vbat supplies VSMPS1_EXT_1V8 */
507         [AB8500_EXT_SUPPLY1] = {
508                 .constraints = {
509                         .name = "ab8500-ext-supply1",
510                         .min_uV = 1800000,
511                         .max_uV = 1800000,
512                         .initial_mode = REGULATOR_MODE_IDLE,
513                         .boot_on = 1,
514                         .always_on = 1,
515                 },
516         },
517         /* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */
518         [AB8500_EXT_SUPPLY2] = {
519                 .constraints = {
520                         .name = "ab8500-ext-supply2",
521                         .min_uV = 1360000,
522                         .max_uV = 1360000,
523                 },
524         },
525         /* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */
526         [AB8500_EXT_SUPPLY3] = {
527                 .constraints = {
528                         .name = "ab8500-ext-supply3",
529                         .min_uV = 3400000,
530                         .max_uV = 3400000,
531                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
532                         .boot_on = 1,
533                 },
534                 .num_consumer_supplies =
535                         ARRAY_SIZE(ab8500_ext_supply3_consumers),
536                 .consumer_supplies = ab8500_ext_supply3_consumers,
537         },
538 };
539
540 /* ab8505 regulator register initialization */
541 static struct ab8500_regulator_reg_init ab8505_reg_init[] = {
542         /*
543          * VarmRequestCtrl
544          * VsmpsCRequestCtrl
545          * VsmpsARequestCtrl
546          * VsmpsBRequestCtrl
547          */
548         INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1,       0x00, 0x00),
549         /*
550          * VsafeRequestCtrl
551          * VpllRequestCtrl
552          * VanaRequestCtrl          = HP/LP depending on VxRequest
553          */
554         INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2,       0x30, 0x00),
555         /*
556          * Vaux1RequestCtrl         = HP/LP depending on VxRequest
557          * Vaux2RequestCtrl         = HP/LP depending on VxRequest
558          */
559         INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3,       0xf0, 0x00),
560         /*
561          * Vaux3RequestCtrl         = HP/LP depending on VxRequest
562          * SwHPReq                  = Control through SWValid disabled
563          */
564         INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4,       0x07, 0x00),
565         /*
566          * VsmpsASysClkReq1HPValid
567          * VsmpsBSysClkReq1HPValid
568          * VsafeSysClkReq1HPValid
569          * VanaSysClkReq1HPValid    = disabled
570          * VpllSysClkReq1HPValid
571          * Vaux1SysClkReq1HPValid   = disabled
572          * Vaux2SysClkReq1HPValid   = disabled
573          * Vaux3SysClkReq1HPValid   = disabled
574          */
575         INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
576         /*
577          * VsmpsCSysClkReq1HPValid
578          * VarmSysClkReq1HPValid
579          * VbbSysClkReq1HPValid
580          * VsmpsMSysClkReq1HPValid
581          */
582         INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2, 0x00, 0x00),
583         /*
584          * VsmpsAHwHPReq1Valid
585          * VsmpsBHwHPReq1Valid
586          * VsafeHwHPReq1Valid
587          * VanaHwHPReq1Valid        = disabled
588          * VpllHwHPReq1Valid
589          * Vaux1HwHPreq1Valid       = disabled
590          * Vaux2HwHPReq1Valid       = disabled
591          * Vaux3HwHPReqValid        = disabled
592          */
593         INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1,     0xe8, 0x00),
594         /*
595          * VsmpsMHwHPReq1Valid
596          */
597         INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2,     0x00, 0x00),
598         /*
599          * VsmpsAHwHPReq2Valid
600          * VsmpsBHwHPReq2Valid
601          * VsafeHwHPReq2Valid
602          * VanaHwHPReq2Valid        = disabled
603          * VpllHwHPReq2Valid
604          * Vaux1HwHPReq2Valid       = disabled
605          * Vaux2HwHPReq2Valid       = disabled
606          * Vaux3HwHPReq2Valid       = disabled
607          */
608         INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1,     0xe8, 0x00),
609         /*
610          * VsmpsMHwHPReq2Valid
611          */
612         INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2,     0x00, 0x00),
613         /**
614          * VsmpsCSwHPReqValid
615          * VarmSwHPReqValid
616          * VsmpsASwHPReqValid
617          * VsmpsBSwHPReqValid
618          * VsafeSwHPReqValid
619          * VanaSwHPReqValid
620          * VanaSwHPReqValid         = disabled
621          * VpllSwHPReqValid
622          * Vaux1SwHPReqValid        = disabled
623          */
624         INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1,      0xa0, 0x00),
625         /*
626          * Vaux2SwHPReqValid        = disabled
627          * Vaux3SwHPReqValid        = disabled
628          * VsmpsMSwHPReqValid
629          */
630         INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2,      0x03, 0x00),
631         /*
632          * SysClkReq2Valid1         = SysClkReq2 controlled
633          * SysClkReq3Valid1         = disabled
634          * SysClkReq4Valid1         = SysClkReq4 controlled
635          */
636         INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1,    0x0e, 0x0a),
637         /*
638          * SysClkReq2Valid2         = disabled
639          * SysClkReq3Valid2         = disabled
640          * SysClkReq4Valid2         = disabled
641          */
642         INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2,    0x0e, 0x00),
643         /*
644          * Vaux4SwHPReqValid
645          * Vaux4HwHPReq2Valid
646          * Vaux4HwHPReq1Valid
647          * Vaux4SysClkReq1HPValid
648          */
649         INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID,    0x00, 0x00),
650         /*
651          * VadcEna                  = disabled
652          * VintCore12Ena            = disabled
653          * VintCore12Sel            = 1.25 V
654          * VintCore12LP             = inactive (HP)
655          * VadcLP                   = inactive (HP)
656          */
657         INIT_REGULATOR_REGISTER(AB8505_REGUMISC1,              0xfe, 0x10),
658         /*
659          * VaudioEna                = disabled
660          * Vaux8Ena                 = disabled
661          * Vamic1Ena                = disabled
662          * Vamic2Ena                = disabled
663          */
664         INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY,           0x1e, 0x00),
665         /*
666          * Vamic1_dzout             = high-Z when Vamic1 is disabled
667          * Vamic2_dzout             = high-Z when Vamic2 is disabled
668          */
669         INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC,         0x03, 0x00),
670         /*
671          * VsmpsARegu
672          * VsmpsASelCtrl
673          * VsmpsAAutoMode
674          * VsmpsAPWMMode
675          */
676         INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU,    0x00, 0x00),
677         /*
678          * VsmpsBRegu
679          * VsmpsBSelCtrl
680          * VsmpsBAutoMode
681          * VsmpsBPWMMode
682          */
683         INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU,    0x00, 0x00),
684         /*
685          * VsafeRegu
686          * VsafeSelCtrl
687          * VsafeAutoMode
688          * VsafePWMMode
689          */
690         INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU,    0x00, 0x00),
691         /*
692          * VPll                     = Hw controlled (NOTE! PRCMU bits)
693          * VanaRegu                 = force off
694          */
695         INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU,           0x0f, 0x02),
696         /*
697          * VextSupply1Regu          = force OFF (OTP_ExtSupply12LPnPolarity 1)
698          * VextSupply2Regu          = force OFF (OTP_ExtSupply12LPnPolarity 1)
699          * VextSupply3Regu          = force OFF (OTP_ExtSupply3LPnPolarity 0)
700          * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0
701          * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0
702          */
703         INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU,          0xff, 0x30),
704         /*
705          * Vaux1Regu                = force HP
706          * Vaux2Regu                = force off
707          */
708         INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU,             0x0f, 0x01),
709         /*
710          * Vaux3Regu                = force off
711          */
712         INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU,          0x03, 0x00),
713         /*
714          * VsmpsASel1
715          */
716         INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1,    0x00, 0x00),
717         /*
718          * VsmpsASel2
719          */
720         INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2,    0x00, 0x00),
721         /*
722          * VsmpsASel3
723          */
724         INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3,    0x00, 0x00),
725         /*
726          * VsmpsBSel1
727          */
728         INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1,    0x00, 0x00),
729         /*
730          * VsmpsBSel2
731          */
732         INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2,    0x00, 0x00),
733         /*
734          * VsmpsBSel3
735          */
736         INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3,    0x00, 0x00),
737         /*
738          * VsafeSel1
739          */
740         INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1,    0x00, 0x00),
741         /*
742          * VsafeSel2
743          */
744         INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2,    0x00, 0x00),
745         /*
746          * VsafeSel3
747          */
748         INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3,    0x00, 0x00),
749         /*
750          * Vaux1Sel                 = 2.8 V
751          */
752         INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL,               0x0f, 0x0C),
753         /*
754          * Vaux2Sel                 = 2.9 V
755          */
756         INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL,               0x0f, 0x0d),
757         /*
758          * Vaux3Sel                 = 2.91 V
759          */
760         INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL,           0x07, 0x07),
761         /*
762          * Vaux4RequestCtrl
763          */
764         INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL,    0x00, 0x00),
765         /*
766          * Vaux4Regu
767          */
768         INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU,    0x00, 0x00),
769         /*
770          * Vaux4Sel
771          */
772         INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL,    0x00, 0x00),
773         /*
774          * Vaux1Disch               = short discharge time
775          * Vaux2Disch               = short discharge time
776          * Vaux3Disch               = short discharge time
777          * Vintcore12Disch          = short discharge time
778          * VTVoutDisch              = short discharge time
779          * VaudioDisch              = short discharge time
780          */
781         INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH,          0xfc, 0x00),
782         /*
783          * VanaDisch                = short discharge time
784          * Vaux8PullDownEna         = pulldown disabled when Vaux8 is disabled
785          * Vaux8Disch               = short discharge time
786          */
787         INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2,         0x16, 0x00),
788         /*
789          * Vaux4Disch               = short discharge time
790          */
791         INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3,         0x01, 0x00),
792         /*
793          * Vaux5Sel
794          * Vaux5LP
795          * Vaux5Ena
796          * Vaux5Disch
797          * Vaux5DisSfst
798          * Vaux5DisPulld
799          */
800         INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5,              0x00, 0x00),
801         /*
802          * Vaux6Sel
803          * Vaux6LP
804          * Vaux6Ena
805          * Vaux6DisPulld
806          */
807         INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6,              0x00, 0x00),
808 };
809
810 struct regulator_init_data ab8505_regulators[AB8505_NUM_REGULATORS] = {
811         /* supplies to the display/camera */
812         [AB8505_LDO_AUX1] = {
813                 .constraints = {
814                         .name = "V-DISPLAY",
815                         .min_uV = 2800000,
816                         .max_uV = 3300000,
817                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
818                                           REGULATOR_CHANGE_STATUS,
819                         .boot_on = 1, /* display is on at boot */
820                 },
821                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
822                 .consumer_supplies = ab8500_vaux1_consumers,
823         },
824         /* supplies to the on-board eMMC */
825         [AB8505_LDO_AUX2] = {
826                 .constraints = {
827                         .name = "V-eMMC1",
828                         .min_uV = 1100000,
829                         .max_uV = 3300000,
830                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
831                                           REGULATOR_CHANGE_STATUS |
832                                           REGULATOR_CHANGE_MODE,
833                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
834                                             REGULATOR_MODE_IDLE,
835                 },
836                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
837                 .consumer_supplies = ab8500_vaux2_consumers,
838         },
839         /* supply for VAUX3, supplies to SDcard slots */
840         [AB8505_LDO_AUX3] = {
841                 .constraints = {
842                         .name = "V-MMC-SD",
843                         .min_uV = 1100000,
844                         .max_uV = 3300000,
845                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
846                                           REGULATOR_CHANGE_STATUS |
847                                           REGULATOR_CHANGE_MODE,
848                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
849                                             REGULATOR_MODE_IDLE,
850                 },
851                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
852                 .consumer_supplies = ab8500_vaux3_consumers,
853         },
854         /* supply for VAUX4, supplies to NFC and standalone secure element */
855         [AB8505_LDO_AUX4] = {
856                 .constraints = {
857                         .name = "V-NFC-SE",
858                         .min_uV = 1100000,
859                         .max_uV = 3300000,
860                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
861                                           REGULATOR_CHANGE_STATUS |
862                                           REGULATOR_CHANGE_MODE,
863                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
864                                             REGULATOR_MODE_IDLE,
865                 },
866                 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux4_consumers),
867                 .consumer_supplies = ab8505_vaux4_consumers,
868         },
869         /* supply for VAUX5, supplies to TBD */
870         [AB8505_LDO_AUX5] = {
871                 .constraints = {
872                         .name = "V-AUX5",
873                         .min_uV = 1050000,
874                         .max_uV = 2790000,
875                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
876                                           REGULATOR_CHANGE_STATUS |
877                                           REGULATOR_CHANGE_MODE,
878                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
879                                             REGULATOR_MODE_IDLE,
880                 },
881                 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux5_consumers),
882                 .consumer_supplies = ab8505_vaux5_consumers,
883         },
884         /* supply for VAUX6, supplies to TBD */
885         [AB8505_LDO_AUX6] = {
886                 .constraints = {
887                         .name = "V-AUX6",
888                         .min_uV = 1050000,
889                         .max_uV = 2790000,
890                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
891                                           REGULATOR_CHANGE_STATUS |
892                                           REGULATOR_CHANGE_MODE,
893                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
894                                             REGULATOR_MODE_IDLE,
895                 },
896                 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux6_consumers),
897                 .consumer_supplies = ab8505_vaux6_consumers,
898         },
899         /* supply for gpadc, ADC LDO */
900         [AB8505_LDO_ADC] = {
901                 .constraints = {
902                         .name = "V-ADC",
903                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
904                 },
905                 .num_consumer_supplies = ARRAY_SIZE(ab8505_vadc_consumers),
906                 .consumer_supplies = ab8505_vadc_consumers,
907         },
908         /* supply for ab8500-vaudio, VAUDIO LDO */
909         [AB8505_LDO_AUDIO] = {
910                 .constraints = {
911                         .name = "V-AUD",
912                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
913                 },
914                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
915                 .consumer_supplies = ab8500_vaud_consumers,
916         },
917         /* supply for v-anamic1 VAMic1-LDO */
918         [AB8505_LDO_ANAMIC1] = {
919                 .constraints = {
920                         .name = "V-AMIC1",
921                         .valid_ops_mask = REGULATOR_CHANGE_STATUS |
922                                           REGULATOR_CHANGE_MODE,
923                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
924                                             REGULATOR_MODE_IDLE,
925                 },
926                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
927                 .consumer_supplies = ab8500_vamic1_consumers,
928         },
929         /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
930         [AB8505_LDO_ANAMIC2] = {
931                 .constraints = {
932                         .name = "V-AMIC2",
933                         .valid_ops_mask = REGULATOR_CHANGE_STATUS |
934                                           REGULATOR_CHANGE_MODE,
935                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
936                                             REGULATOR_MODE_IDLE,
937                 },
938                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
939                 .consumer_supplies = ab8500_vamic2_consumers,
940         },
941         /* supply for v-aux8, VAUX8 LDO */
942         [AB8505_LDO_AUX8] = {
943                 .constraints = {
944                         .name = "V-AUX8",
945                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
946                 },
947                 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux8_consumers),
948                 .consumer_supplies = ab8505_vaux8_consumers,
949         },
950         /* supply for v-intcore12, VINTCORE12 LDO */
951         [AB8505_LDO_INTCORE] = {
952                 .constraints = {
953                         .name = "V-INTCORE",
954                         .min_uV = 1250000,
955                         .max_uV = 1350000,
956                         .input_uV = 1800000,
957                         .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
958                                           REGULATOR_CHANGE_STATUS |
959                                           REGULATOR_CHANGE_MODE |
960                                           REGULATOR_CHANGE_DRMS,
961                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
962                                             REGULATOR_MODE_IDLE,
963                 },
964                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
965                 .consumer_supplies = ab8500_vintcore_consumers,
966         },
967         /* supply for LDO USB */
968         [AB8505_LDO_USB] = {
969                 .constraints = {
970                         .name = "V-USB",
971                         .valid_ops_mask = REGULATOR_CHANGE_STATUS |
972                                           REGULATOR_CHANGE_MODE,
973                         .valid_modes_mask = REGULATOR_MODE_NORMAL |
974                                             REGULATOR_MODE_IDLE,
975                 },
976                 .num_consumer_supplies = ARRAY_SIZE(ab8505_usb_consumers),
977                 .consumer_supplies = ab8505_usb_consumers,
978         },
979         /* supply for U8500 CSI-DSI, VANA LDO */
980         [AB8505_LDO_ANA] = {
981                 .constraints = {
982                         .name = "V-CSI-DSI",
983                         .valid_ops_mask = REGULATOR_CHANGE_STATUS,
984                 },
985                 .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
986                 .consumer_supplies = ab8500_vana_consumers,
987         },
988 };
989
990 struct ab8500_regulator_platform_data ab8500_regulator_plat_data = {
991         .reg_init               = ab8500_reg_init,
992         .num_reg_init           = ARRAY_SIZE(ab8500_reg_init),
993         .regulator              = ab8500_regulators,
994         .num_regulator          = ARRAY_SIZE(ab8500_regulators),
995         .ext_regulator          = ab8500_ext_regulators,
996         .num_ext_regulator      = ARRAY_SIZE(ab8500_ext_regulators),
997 };
998
999 /* Use the AB8500 init settings for AB8505 as they are the same right now */
1000 struct ab8500_regulator_platform_data ab8505_regulator_plat_data = {
1001         .reg_init               = ab8505_reg_init,
1002         .num_reg_init           = ARRAY_SIZE(ab8505_reg_init),
1003         .regulator              = ab8505_regulators,
1004         .num_regulator          = ARRAY_SIZE(ab8505_regulators),
1005 };
1006
1007 static void ab8500_modify_reg_init(int id, u8 mask, u8 value)
1008 {
1009         int i;
1010
1011         if (cpu_is_u8520()) {
1012                 for (i = ARRAY_SIZE(ab8505_reg_init) - 1; i >= 0; i--) {
1013                         if (ab8505_reg_init[i].id == id) {
1014                                 u8 initval = ab8505_reg_init[i].value;
1015                                 initval = (initval & ~mask) | (value & mask);
1016                                 ab8505_reg_init[i].value = initval;
1017
1018                                 BUG_ON(mask & ~ab8505_reg_init[i].mask);
1019                                 return;
1020                         }
1021                 }
1022         } else {
1023                 for (i = ARRAY_SIZE(ab8500_reg_init) - 1; i >= 0; i--) {
1024                         if (ab8500_reg_init[i].id == id) {
1025                                 u8 initval = ab8500_reg_init[i].value;
1026                                 initval = (initval & ~mask) | (value & mask);
1027                                 ab8500_reg_init[i].value = initval;
1028
1029                                 BUG_ON(mask & ~ab8500_reg_init[i].mask);
1030                                 return;
1031                         }
1032                 }
1033         }
1034
1035         BUG_ON(1);
1036 }
1037
1038 void mop500_regulator_init(void)
1039 {
1040         struct regulator_init_data *regulator;
1041
1042         /*
1043          * Temporarily turn on Vaux2 on 8520 machine
1044          */
1045         if (cpu_is_u8520()) {
1046                 /* Vaux2 initialized to be on */
1047                 ab8500_modify_reg_init(AB8505_VAUX12REGU, 0x0f, 0x05);
1048         }
1049
1050         /*
1051          * Handle AB8500_EXT_SUPPLY2 on HREFP_V20_V50 boards (do it for
1052          * all HREFP_V20 boards)
1053          */
1054         if (cpu_is_u8500v20()) {
1055                 /* VextSupply2RequestCtrl =  HP/OFF depending on VxRequest */
1056                 ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3, 0x01, 0x01);
1057
1058                 /* VextSupply2SysClkReq1HPValid = SysClkReq1 controlled */
1059                 ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2,
1060                         0x20, 0x20);
1061
1062                 /* VextSupply2 = force HP at initialization */
1063                 ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU, 0x0c, 0x04);
1064
1065                 /* enable VextSupply2 during platform active */
1066                 regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
1067                 regulator->constraints.always_on = 1;
1068
1069                 /* disable VextSupply2 in suspend */
1070                 regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
1071                 regulator->constraints.state_mem.disabled = 1;
1072                 regulator->constraints.state_standby.disabled = 1;
1073
1074                 /* enable VextSupply2 HW control (used in suspend) */
1075                 regulator->driver_data = (void *)&ab8500_ext_supply2;
1076         }
1077 }