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