blob: ff3c9f016591ba3ae96b7e209bf0cd52e7055880 [file] [log] [blame]
Sundar Iyer4f724be2010-09-15 10:50:59 +01001/*
2 * Copyright (C) ST-Ericsson SA 2010
3 *
4 * License Terms: GNU General Public License v2
5 *
Bengt Jonssona1e516e2010-12-10 11:08:48 +01006 * Authors: Sundar Iyer <sundar.iyer@stericsson.com>
7 * Bengt Jonsson <bengt.g.jonsson@stericsson.com>
Lee Jones547f3842013-03-28 16:11:14 +00008 * Daniel Willerud <daniel.willerud@stericsson.com>
Sundar Iyer4f724be2010-09-15 10:50:59 +01009 *
10 * MOP500 board specific initialization for regulators
11 */
12#include <linux/kernel.h>
13#include <linux/regulator/machine.h>
Bengt Jonssona1e516e2010-12-10 11:08:48 +010014#include <linux/regulator/ab8500.h>
Linus Walleijd1de85a2010-12-02 17:10:14 +010015#include "board-mop500-regulators.h"
Lee Jones0fbc8002013-04-02 13:24:04 +010016#include "id.h"
Linus Walleijd1de85a2010-12-02 17:10:14 +010017
Lee Jones0b5ea1e2012-09-03 14:33:39 +010018static struct regulator_consumer_supply gpio_en_3v3_consumers[] = {
19 REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
20};
21
22struct 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
Linus Walleijfe67dfc2011-03-07 11:48:15 +010033/*
34 * TPS61052 regulator
35 */
36static 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
46struct 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
Linus Walleijd1de85a2010-12-02 17:10:14 +010057static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
Lee Jones27f26de2013-03-21 15:59:05 +000058 /* 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"),
Linus Walleijd1de85a2010-12-02 17:10:14 +010064 /* SFH7741 proximity sensor */
65 REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
66 /* BH1780GLS ambient light sensor */
67 REGULATOR_SUPPLY("vcc", "2-0029"),
68 /* lsm303dlh accelerometer */
Lee Jonesa652f3d2013-04-02 13:24:21 +010069 REGULATOR_SUPPLY("vdd", "2-0018"),
Lee Jonescb6795a2013-03-21 15:59:21 +000070 /* lsm303dlhc accelerometer */
71 REGULATOR_SUPPLY("vdd", "2-0019"),
Linus Walleijd1de85a2010-12-02 17:10:14 +010072 /* lsm303dlh magnetometer */
Lee Jonescb6795a2013-03-21 15:59:21 +000073 REGULATOR_SUPPLY("vdd", "2-001e"),
Linus Walleijd1de85a2010-12-02 17:10:14 +010074 /* 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"),
Lee Jonesefb34d22013-03-21 15:59:10 +000079 /* L3G4200D Gyroscope device */
80 REGULATOR_SUPPLY("vdd", "2-0068"),
Lee Jones2d0266a2013-03-21 15:59:11 +000081 /* Ambient light sensor device */
82 REGULATOR_SUPPLY("vdd", "3-0029"),
Lee Jones4336c1d2013-03-21 15:59:12 +000083 /* Pressure sensor device */
84 REGULATOR_SUPPLY("vdd", "2-005c"),
Lee Jones5379f022013-03-21 15:59:13 +000085 /* Cypress TrueTouch Touchscreen device */
86 REGULATOR_SUPPLY("vcpin", "spi8.0"),
Lee Jonesfa679522013-03-21 15:59:14 +000087 /* Camera device */
88 REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),
Linus Walleijd1de85a2010-12-02 17:10:14 +010089};
90
91static 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"),
Lee Jonesa652f3d2013-04-02 13:24:21 +010096 /* 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"),
Linus Walleijd1de85a2010-12-02 17:10:14 +0100102};
103
104static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
Lee Jonesa652f3d2013-04-02 13:24:21 +0100105 REGULATOR_SUPPLY("v-SD-STM", "stm"),
Linus Walleijd1de85a2010-12-02 17:10:14 +0100106 /* External MMC slot power */
107 REGULATOR_SUPPLY("vmmc", "sdi0"),
108};
109
Lee Jones547f3842013-03-28 16:11:14 +0000110static struct regulator_consumer_supply ab8505_vaux4_consumers[] = {
111};
112
113static struct regulator_consumer_supply ab8505_vaux5_consumers[] = {
114};
115
116static struct regulator_consumer_supply ab8505_vaux6_consumers[] = {
117};
118
119static struct regulator_consumer_supply ab8505_vaux8_consumers[] = {
120 /* AB8500 audio codec device */
121 REGULATOR_SUPPLY("v-aux8", NULL),
122};
123
124static 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
Linus Walleijd1de85a2010-12-02 17:10:14 +0100131static 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"),
Lee Jonesa652f3d2013-04-02 13:24:21 +0100136 /* ADC for charger */
137 REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"),
138 /* AB8500 Tv-out device */
139 REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),
Linus Walleijd1de85a2010-12-02 17:10:14 +0100140};
141
Ola Lilja29bd2ab2012-02-01 14:18:10 +0100142static struct regulator_consumer_supply ab8500_vaud_consumers[] = {
143 /* AB8500 audio-codec main supply */
144 REGULATOR_SUPPLY("vaud", "ab8500-codec.0"),
145};
146
147static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
148 /* AB8500 audio-codec Mic1 supply */
149 REGULATOR_SUPPLY("vamic1", "ab8500-codec.0"),
150};
151
152static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
153 /* AB8500 audio-codec Mic2 supply */
154 REGULATOR_SUPPLY("vamic2", "ab8500-codec.0"),
155};
156
157static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
158 /* AB8500 audio-codec DMic supply */
159 REGULATOR_SUPPLY("vdmic", "ab8500-codec.0"),
160};
161
Linus Walleijd1de85a2010-12-02 17:10:14 +0100162static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
163 /* SoC core supply, no device */
164 REGULATOR_SUPPLY("v-intcore", NULL),
Joe Perches7c9d4402011-06-23 11:39:20 -0700165 /* USB Transceiver */
Linus Walleijd1de85a2010-12-02 17:10:14 +0100166 REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
Lee Jonesa652f3d2013-04-02 13:24:21 +0100167 /* Handled by abx500 clk driver */
168 REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"),
Linus Walleijd1de85a2010-12-02 17:10:14 +0100169};
170
Lee Jones547f3842013-03-28 16:11:14 +0000171static struct regulator_consumer_supply ab8505_usb_consumers[] = {
172 /* HS USB OTG physical interface */
173 REGULATOR_SUPPLY("v-ape", NULL),
174};
175
Linus Walleijd1de85a2010-12-02 17:10:14 +0100176static struct regulator_consumer_supply ab8500_vana_consumers[] = {
Lee Jonesa652f3d2013-04-02 13:24:21 +0100177 /* 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"),
Linus Walleijd1de85a2010-12-02 17:10:14 +0100186};
Sundar Iyer4f724be2010-09-15 10:50:59 +0100187
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100188/* ab8500 regulator register initialization */
Bengt Jonsson732805a2013-03-21 15:59:03 +0000189static struct ab8500_regulator_reg_init ab8500_reg_init[] = {
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100190 /*
191 * VanaRequestCtrl = HP/LP depending on VxRequest
192 * VextSupply1RequestCtrl = HP/LP depending on VxRequest
193 */
Lee Jones43a59112013-03-21 15:59:15 +0000194 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0xf0, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100195 /*
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 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000201 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0xff, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100202 /*
203 * Vaux3RequestCtrl = HP/LP depending on VxRequest
204 * SwHPReq = Control through SWValid disabled
205 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000206 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x07, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100207 /*
208 * VanaSysClkReq1HPValid = disabled
209 * Vaux1SysClkReq1HPValid = disabled
210 * Vaux2SysClkReq1HPValid = disabled
211 * Vaux3SysClkReq1HPValid = disabled
212 */
Lee Jones43a59112013-03-21 15:59:15 +0000213 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100214 /*
215 * VextSupply1SysClkReq1HPValid = disabled
216 * VextSupply2SysClkReq1HPValid = disabled
217 * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
218 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000219 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100220 /*
221 * VanaHwHPReq1Valid = disabled
222 * Vaux1HwHPreq1Valid = disabled
223 * Vaux2HwHPReq1Valid = disabled
224 * Vaux3HwHPReqValid = disabled
225 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000226 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0xe8, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100227 /*
228 * VextSupply1HwHPReq1Valid = disabled
229 * VextSupply2HwHPReq1Valid = disabled
230 * VextSupply3HwHPReq1Valid = disabled
231 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000232 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x07, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100233 /*
234 * VanaHwHPReq2Valid = disabled
235 * Vaux1HwHPReq2Valid = disabled
236 * Vaux2HwHPReq2Valid = disabled
237 * Vaux3HwHPReq2Valid = disabled
238 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000239 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0xe8, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100240 /*
241 * VextSupply1HwHPReq2Valid = disabled
242 * VextSupply2HwHPReq2Valid = disabled
243 * VextSupply3HwHPReq2Valid = HWReq2 controlled
244 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000245 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x07, 0x04),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100246 /*
247 * VanaSwHPReqValid = disabled
248 * Vaux1SwHPReqValid = disabled
249 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000250 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0xa0, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100251 /*
252 * Vaux2SwHPReqValid = disabled
253 * Vaux3SwHPReqValid = disabled
254 * VextSupply1SwHPReqValid = disabled
255 * VextSupply2SwHPReqValid = disabled
256 * VextSupply3SwHPReqValid = disabled
257 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000258 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x1f, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100259 /*
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 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000268 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0xfe, 0x2a),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100269 /*
270 * SysClkReq2Valid2 = disabled
271 * SysClkReq3Valid2 = disabled
272 * SysClkReq4Valid2 = disabled
273 * SysClkReq5Valid2 = disabled
274 * SysClkReq6Valid2 = SysClkReq6 controlled
275 * SysClkReq7Valid2 = disabled
276 * SysClkReq8Valid2 = disabled
277 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000278 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0xfe, 0x20),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100279 /*
280 * VTVoutEna = disabled
281 * Vintcore12Ena = disabled
282 * Vintcore12Sel = 1.25 V
283 * Vintcore12LP = inactive (HP)
284 * VTVoutLP = inactive (HP)
285 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000286 INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0xfe, 0x10),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100287 /*
288 * VaudioEna = disabled
289 * VdmicEna = disabled
290 * Vamic1Ena = disabled
291 * Vamic2Ena = disabled
292 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000293 INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x1e, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100294 /*
295 * Vamic1_dzout = high-Z when Vamic1 is disabled
296 * Vamic2_dzout = high-Z when Vamic2 is disabled
297 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000298 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x03, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100299 /*
Lee Jones43a59112013-03-21 15:59:15 +0000300 * VPll = Hw controlled (NOTE! PRCMU bits)
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100301 * VanaRegu = force off
302 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000303 INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x0f, 0x02),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100304 /*
305 * VrefDDREna = disabled
306 * VrefDDRSleepMode = inactive (no pulldown)
307 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000308 INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x03, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100309 /*
Lee Jonesa387ac52013-03-28 16:11:02 +0000310 * VextSupply1Regu = force LP
311 * VextSupply2Regu = force OFF
312 * VextSupply3Regu = force HP (-> STBB2=LP and TPS=LP)
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100313 * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
314 * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
315 */
Lee Jonesa387ac52013-03-28 16:11:02 +0000316 INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0xff, 0x13),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100317 /*
318 * Vaux1Regu = force HP
319 * Vaux2Regu = force off
320 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000321 INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x0f, 0x01),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100322 /*
Lee Jonesd79df322013-03-21 15:58:58 +0000323 * Vaux3Regu = force off
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100324 */
Lee Jones43a59112013-03-21 15:59:15 +0000325 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x03, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100326 /*
Lee Jonesa652f3d2013-04-02 13:24:21 +0100327 * Vaux1Sel = 2.8 V
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100328 */
Lee Jonesa652f3d2013-04-02 13:24:21 +0100329 INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x0f, 0x0C),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100330 /*
331 * Vaux2Sel = 2.9 V
332 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000333 INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0f, 0x0d),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100334 /*
335 * Vaux3Sel = 2.91 V
336 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000337 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07, 0x07),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100338 /*
339 * VextSupply12LP = disabled (no LP)
340 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000341 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x01, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100342 /*
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 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000350 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0xfc, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100351 /*
352 * VanaDisch = short discharge time
353 * VdmicPullDownEna = pulldown disabled when Vdmic is disabled
354 * VdmicDisch = short discharge time
355 */
Lee Jones3c1b8432013-03-21 15:59:01 +0000356 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x16, 0x00),
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100357};
358
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100359/* AB8500 regulators */
Bengt Jonsson732805a2013-03-21 15:59:03 +0000360static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100361 /* supplies to the display/camera */
362 [AB8500_LDO_AUX1] = {
363 .constraints = {
364 .name = "V-DISPLAY",
Lee Jonesa652f3d2013-04-02 13:24:21 +0100365 .min_uV = 2800000,
366 .max_uV = 3300000,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100367 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
368 REGULATOR_CHANGE_STATUS,
Linus Walleijdb245202011-04-04 10:44:51 +0200369 .boot_on = 1, /* display is on at boot */
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100370 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100371 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
372 .consumer_supplies = ab8500_vaux1_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100373 },
374 /* supplies to the on-board eMMC */
375 [AB8500_LDO_AUX2] = {
376 .constraints = {
377 .name = "V-eMMC1",
378 .min_uV = 1100000,
379 .max_uV = 3300000,
380 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
Lee Jonesa652f3d2013-04-02 13:24:21 +0100381 REGULATOR_CHANGE_STATUS |
382 REGULATOR_CHANGE_MODE,
383 .valid_modes_mask = REGULATOR_MODE_NORMAL |
384 REGULATOR_MODE_IDLE,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100385 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100386 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
387 .consumer_supplies = ab8500_vaux2_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100388 },
389 /* supply for VAUX3, supplies to SDcard slots */
390 [AB8500_LDO_AUX3] = {
391 .constraints = {
392 .name = "V-MMC-SD",
393 .min_uV = 1100000,
394 .max_uV = 3300000,
395 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
Lee Jonesa652f3d2013-04-02 13:24:21 +0100396 REGULATOR_CHANGE_STATUS |
397 REGULATOR_CHANGE_MODE,
398 .valid_modes_mask = REGULATOR_MODE_NORMAL |
399 REGULATOR_MODE_IDLE,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100400 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100401 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
402 .consumer_supplies = ab8500_vaux3_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100403 },
404 /* supply for tvout, gpadc, TVOUT LDO */
405 [AB8500_LDO_TVOUT] = {
406 .constraints = {
407 .name = "V-TVOUT",
408 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
409 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100410 .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
411 .consumer_supplies = ab8500_vtvout_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100412 },
413 /* supply for ab8500-vaudio, VAUDIO LDO */
414 [AB8500_LDO_AUDIO] = {
415 .constraints = {
416 .name = "V-AUD",
417 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
418 },
Ola Lilja29bd2ab2012-02-01 14:18:10 +0100419 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
420 .consumer_supplies = ab8500_vaud_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100421 },
422 /* supply for v-anamic1 VAMic1-LDO */
423 [AB8500_LDO_ANAMIC1] = {
424 .constraints = {
425 .name = "V-AMIC1",
426 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
427 },
Ola Lilja29bd2ab2012-02-01 14:18:10 +0100428 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
429 .consumer_supplies = ab8500_vamic1_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100430 },
431 /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
432 [AB8500_LDO_ANAMIC2] = {
433 .constraints = {
434 .name = "V-AMIC2",
435 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
436 },
Ola Lilja29bd2ab2012-02-01 14:18:10 +0100437 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
438 .consumer_supplies = ab8500_vamic2_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100439 },
440 /* supply for v-dmic, VDMIC LDO */
441 [AB8500_LDO_DMIC] = {
442 .constraints = {
443 .name = "V-DMIC",
444 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
445 },
Ola Lilja29bd2ab2012-02-01 14:18:10 +0100446 .num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers),
447 .consumer_supplies = ab8500_vdmic_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100448 },
449 /* supply for v-intcore12, VINTCORE12 LDO */
450 [AB8500_LDO_INTCORE] = {
451 .constraints = {
452 .name = "V-INTCORE",
Lee Jonesa652f3d2013-04-02 13:24:21 +0100453 .min_uV = 1250000,
454 .max_uV = 1350000,
455 .input_uV = 1800000,
456 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
457 REGULATOR_CHANGE_STATUS |
458 REGULATOR_CHANGE_MODE |
459 REGULATOR_CHANGE_DRMS,
460 .valid_modes_mask = REGULATOR_MODE_NORMAL |
461 REGULATOR_MODE_IDLE,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100462 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100463 .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
464 .consumer_supplies = ab8500_vintcore_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100465 },
Lee Jonesa652f3d2013-04-02 13:24:21 +0100466 /* supply for U8500 CSI-DSI, VANA LDO */
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100467 [AB8500_LDO_ANA] = {
468 .constraints = {
Lee Jonesa652f3d2013-04-02 13:24:21 +0100469 .name = "V-CSI-DSI",
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100470 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
471 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100472 .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
473 .consumer_supplies = ab8500_vana_consumers,
Sundar Iyer4f724be2010-09-15 10:50:59 +0100474 },
475};
Bengt Jonsson732805a2013-03-21 15:59:03 +0000476
Lee Jonesa387ac52013-03-28 16:11:02 +0000477/* supply for VextSupply3 */
478static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = {
479 /* SIM supply for 3 V SIM cards */
480 REGULATOR_SUPPLY("vinvsim", "sim-detect.0"),
481};
482
483/* extended configuration for VextSupply2, only used for HREFP_V20 boards */
484static struct ab8500_ext_regulator_cfg ab8500_ext_supply2 = {
485 .hwreq = true,
486};
487
488/*
489 * AB8500 external regulators
490 */
491static struct regulator_init_data ab8500_ext_regulators[] = {
492 /* fixed Vbat supplies VSMPS1_EXT_1V8 */
493 [AB8500_EXT_SUPPLY1] = {
494 .constraints = {
495 .name = "ab8500-ext-supply1",
496 .min_uV = 1800000,
497 .max_uV = 1800000,
498 .initial_mode = REGULATOR_MODE_IDLE,
499 .boot_on = 1,
500 .always_on = 1,
501 },
502 },
503 /* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */
504 [AB8500_EXT_SUPPLY2] = {
505 .constraints = {
506 .name = "ab8500-ext-supply2",
507 .min_uV = 1360000,
508 .max_uV = 1360000,
509 },
510 },
511 /* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */
512 [AB8500_EXT_SUPPLY3] = {
513 .constraints = {
514 .name = "ab8500-ext-supply3",
515 .min_uV = 3400000,
516 .max_uV = 3400000,
517 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
518 .boot_on = 1,
519 },
520 .num_consumer_supplies =
521 ARRAY_SIZE(ab8500_ext_supply3_consumers),
522 .consumer_supplies = ab8500_ext_supply3_consumers,
523 },
524};
525
Lee Jones547f3842013-03-28 16:11:14 +0000526/* ab8505 regulator register initialization */
527static struct ab8500_regulator_reg_init ab8505_reg_init[] = {
528 /*
529 * VarmRequestCtrl
530 * VsmpsCRequestCtrl
531 * VsmpsARequestCtrl
532 * VsmpsBRequestCtrl
533 */
534 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1, 0x00, 0x00),
535 /*
536 * VsafeRequestCtrl
537 * VpllRequestCtrl
538 * VanaRequestCtrl = HP/LP depending on VxRequest
539 */
540 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2, 0x30, 0x00),
541 /*
542 * Vaux1RequestCtrl = HP/LP depending on VxRequest
543 * Vaux2RequestCtrl = HP/LP depending on VxRequest
544 */
545 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3, 0xf0, 0x00),
546 /*
547 * Vaux3RequestCtrl = HP/LP depending on VxRequest
548 * SwHPReq = Control through SWValid disabled
549 */
550 INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4, 0x07, 0x00),
551 /*
552 * VsmpsASysClkReq1HPValid
553 * VsmpsBSysClkReq1HPValid
554 * VsafeSysClkReq1HPValid
555 * VanaSysClkReq1HPValid = disabled
556 * VpllSysClkReq1HPValid
557 * Vaux1SysClkReq1HPValid = disabled
558 * Vaux2SysClkReq1HPValid = disabled
559 * Vaux3SysClkReq1HPValid = disabled
560 */
561 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),
562 /*
563 * VsmpsCSysClkReq1HPValid
564 * VarmSysClkReq1HPValid
565 * VbbSysClkReq1HPValid
566 * VsmpsMSysClkReq1HPValid
567 */
568 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2, 0x00, 0x00),
569 /*
570 * VsmpsAHwHPReq1Valid
571 * VsmpsBHwHPReq1Valid
572 * VsafeHwHPReq1Valid
573 * VanaHwHPReq1Valid = disabled
574 * VpllHwHPReq1Valid
575 * Vaux1HwHPreq1Valid = disabled
576 * Vaux2HwHPReq1Valid = disabled
577 * Vaux3HwHPReqValid = disabled
578 */
579 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1, 0xe8, 0x00),
580 /*
581 * VsmpsMHwHPReq1Valid
582 */
583 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2, 0x00, 0x00),
584 /*
585 * VsmpsAHwHPReq2Valid
586 * VsmpsBHwHPReq2Valid
587 * VsafeHwHPReq2Valid
588 * VanaHwHPReq2Valid = disabled
589 * VpllHwHPReq2Valid
590 * Vaux1HwHPReq2Valid = disabled
591 * Vaux2HwHPReq2Valid = disabled
592 * Vaux3HwHPReq2Valid = disabled
593 */
594 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1, 0xe8, 0x00),
595 /*
596 * VsmpsMHwHPReq2Valid
597 */
598 INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2, 0x00, 0x00),
599 /**
600 * VsmpsCSwHPReqValid
601 * VarmSwHPReqValid
602 * VsmpsASwHPReqValid
603 * VsmpsBSwHPReqValid
604 * VsafeSwHPReqValid
605 * VanaSwHPReqValid
606 * VanaSwHPReqValid = disabled
607 * VpllSwHPReqValid
608 * Vaux1SwHPReqValid = disabled
609 */
610 INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1, 0xa0, 0x00),
611 /*
612 * Vaux2SwHPReqValid = disabled
613 * Vaux3SwHPReqValid = disabled
614 * VsmpsMSwHPReqValid
615 */
616 INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2, 0x03, 0x00),
617 /*
618 * SysClkReq2Valid1 = SysClkReq2 controlled
619 * SysClkReq3Valid1 = disabled
620 * SysClkReq4Valid1 = SysClkReq4 controlled
621 */
622 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1, 0x0e, 0x0a),
623 /*
624 * SysClkReq2Valid2 = disabled
625 * SysClkReq3Valid2 = disabled
626 * SysClkReq4Valid2 = disabled
627 */
628 INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2, 0x0e, 0x00),
629 /*
630 * Vaux4SwHPReqValid
631 * Vaux4HwHPReq2Valid
632 * Vaux4HwHPReq1Valid
633 * Vaux4SysClkReq1HPValid
634 */
635 INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID, 0x00, 0x00),
636 /*
637 * VadcEna = disabled
638 * VintCore12Ena = disabled
639 * VintCore12Sel = 1.25 V
640 * VintCore12LP = inactive (HP)
641 * VadcLP = inactive (HP)
642 */
643 INIT_REGULATOR_REGISTER(AB8505_REGUMISC1, 0xfe, 0x10),
644 /*
645 * VaudioEna = disabled
646 * Vaux8Ena = disabled
647 * Vamic1Ena = disabled
648 * Vamic2Ena = disabled
649 */
650 INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY, 0x1e, 0x00),
651 /*
652 * Vamic1_dzout = high-Z when Vamic1 is disabled
653 * Vamic2_dzout = high-Z when Vamic2 is disabled
654 */
655 INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC, 0x03, 0x00),
656 /*
657 * VsmpsARegu
658 * VsmpsASelCtrl
659 * VsmpsAAutoMode
660 * VsmpsAPWMMode
661 */
662 INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU, 0x00, 0x00),
663 /*
664 * VsmpsBRegu
665 * VsmpsBSelCtrl
666 * VsmpsBAutoMode
667 * VsmpsBPWMMode
668 */
669 INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU, 0x00, 0x00),
670 /*
671 * VsafeRegu
672 * VsafeSelCtrl
673 * VsafeAutoMode
674 * VsafePWMMode
675 */
676 INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU, 0x00, 0x00),
677 /*
678 * VPll = Hw controlled (NOTE! PRCMU bits)
679 * VanaRegu = force off
680 */
681 INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU, 0x0f, 0x02),
682 /*
683 * VextSupply1Regu = force OFF (OTP_ExtSupply12LPnPolarity 1)
684 * VextSupply2Regu = force OFF (OTP_ExtSupply12LPnPolarity 1)
685 * VextSupply3Regu = force OFF (OTP_ExtSupply3LPnPolarity 0)
686 * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
687 * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
688 */
689 INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU, 0xff, 0x30),
690 /*
691 * Vaux1Regu = force HP
692 * Vaux2Regu = force off
693 */
694 INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU, 0x0f, 0x01),
695 /*
696 * Vaux3Regu = force off
697 */
698 INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU, 0x03, 0x00),
699 /*
700 * VsmpsASel1
701 */
702 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1, 0x00, 0x00),
703 /*
704 * VsmpsASel2
705 */
706 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2, 0x00, 0x00),
707 /*
708 * VsmpsASel3
709 */
710 INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3, 0x00, 0x00),
711 /*
712 * VsmpsBSel1
713 */
714 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1, 0x00, 0x00),
715 /*
716 * VsmpsBSel2
717 */
718 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2, 0x00, 0x00),
719 /*
720 * VsmpsBSel3
721 */
722 INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3, 0x00, 0x00),
723 /*
724 * VsafeSel1
725 */
726 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1, 0x00, 0x00),
727 /*
728 * VsafeSel2
729 */
730 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2, 0x00, 0x00),
731 /*
732 * VsafeSel3
733 */
734 INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3, 0x00, 0x00),
735 /*
736 * Vaux1Sel = 2.8 V
737 */
738 INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL, 0x0f, 0x0C),
739 /*
740 * Vaux2Sel = 2.9 V
741 */
742 INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL, 0x0f, 0x0d),
743 /*
744 * Vaux3Sel = 2.91 V
745 */
746 INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL, 0x07, 0x07),
747 /*
748 * Vaux4RequestCtrl
749 */
750 INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL, 0x00, 0x00),
751 /*
752 * Vaux4Regu
753 */
754 INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU, 0x00, 0x00),
755 /*
756 * Vaux4Sel
757 */
758 INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL, 0x00, 0x00),
759 /*
760 * Vaux1Disch = short discharge time
761 * Vaux2Disch = short discharge time
762 * Vaux3Disch = short discharge time
763 * Vintcore12Disch = short discharge time
764 * VTVoutDisch = short discharge time
765 * VaudioDisch = short discharge time
766 */
767 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH, 0xfc, 0x00),
768 /*
769 * VanaDisch = short discharge time
770 * Vaux8PullDownEna = pulldown disabled when Vaux8 is disabled
771 * Vaux8Disch = short discharge time
772 */
773 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2, 0x16, 0x00),
774 /*
775 * Vaux4Disch = short discharge time
776 */
777 INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3, 0x01, 0x00),
778 /*
779 * Vaux5Sel
780 * Vaux5LP
781 * Vaux5Ena
782 * Vaux5Disch
783 * Vaux5DisSfst
784 * Vaux5DisPulld
785 */
786 INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5, 0x00, 0x00),
787 /*
788 * Vaux6Sel
789 * Vaux6LP
790 * Vaux6Ena
791 * Vaux6DisPulld
792 */
793 INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6, 0x00, 0x00),
794};
795
796struct regulator_init_data ab8505_regulators[AB8505_NUM_REGULATORS] = {
797 /* supplies to the display/camera */
798 [AB8505_LDO_AUX1] = {
799 .constraints = {
800 .name = "V-DISPLAY",
801 .min_uV = 2800000,
802 .max_uV = 3300000,
803 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
804 REGULATOR_CHANGE_STATUS,
805 .boot_on = 1, /* display is on at boot */
806 },
807 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
808 .consumer_supplies = ab8500_vaux1_consumers,
809 },
810 /* supplies to the on-board eMMC */
811 [AB8505_LDO_AUX2] = {
812 .constraints = {
813 .name = "V-eMMC1",
814 .min_uV = 1100000,
815 .max_uV = 3300000,
816 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
817 REGULATOR_CHANGE_STATUS |
818 REGULATOR_CHANGE_MODE,
819 .valid_modes_mask = REGULATOR_MODE_NORMAL |
820 REGULATOR_MODE_IDLE,
821 },
822 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
823 .consumer_supplies = ab8500_vaux2_consumers,
824 },
825 /* supply for VAUX3, supplies to SDcard slots */
826 [AB8505_LDO_AUX3] = {
827 .constraints = {
828 .name = "V-MMC-SD",
829 .min_uV = 1100000,
830 .max_uV = 3300000,
831 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
832 REGULATOR_CHANGE_STATUS |
833 REGULATOR_CHANGE_MODE,
834 .valid_modes_mask = REGULATOR_MODE_NORMAL |
835 REGULATOR_MODE_IDLE,
836 },
837 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
838 .consumer_supplies = ab8500_vaux3_consumers,
839 },
840 /* supply for VAUX4, supplies to NFC and standalone secure element */
841 [AB8505_LDO_AUX4] = {
842 .constraints = {
843 .name = "V-NFC-SE",
844 .min_uV = 1100000,
845 .max_uV = 3300000,
846 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
847 REGULATOR_CHANGE_STATUS |
848 REGULATOR_CHANGE_MODE,
849 .valid_modes_mask = REGULATOR_MODE_NORMAL |
850 REGULATOR_MODE_IDLE,
851 },
852 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux4_consumers),
853 .consumer_supplies = ab8505_vaux4_consumers,
854 },
855 /* supply for VAUX5, supplies to TBD */
856 [AB8505_LDO_AUX5] = {
857 .constraints = {
858 .name = "V-AUX5",
859 .min_uV = 1050000,
860 .max_uV = 2790000,
861 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
862 REGULATOR_CHANGE_STATUS |
863 REGULATOR_CHANGE_MODE,
864 .valid_modes_mask = REGULATOR_MODE_NORMAL |
865 REGULATOR_MODE_IDLE,
866 },
867 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux5_consumers),
868 .consumer_supplies = ab8505_vaux5_consumers,
869 },
870 /* supply for VAUX6, supplies to TBD */
871 [AB8505_LDO_AUX6] = {
872 .constraints = {
873 .name = "V-AUX6",
874 .min_uV = 1050000,
875 .max_uV = 2790000,
876 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
877 REGULATOR_CHANGE_STATUS |
878 REGULATOR_CHANGE_MODE,
879 .valid_modes_mask = REGULATOR_MODE_NORMAL |
880 REGULATOR_MODE_IDLE,
881 },
882 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux6_consumers),
883 .consumer_supplies = ab8505_vaux6_consumers,
884 },
885 /* supply for gpadc, ADC LDO */
886 [AB8505_LDO_ADC] = {
887 .constraints = {
888 .name = "V-ADC",
889 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
890 },
891 .num_consumer_supplies = ARRAY_SIZE(ab8505_vadc_consumers),
892 .consumer_supplies = ab8505_vadc_consumers,
893 },
894 /* supply for ab8500-vaudio, VAUDIO LDO */
895 [AB8505_LDO_AUDIO] = {
896 .constraints = {
897 .name = "V-AUD",
898 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
899 },
900 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers),
901 .consumer_supplies = ab8500_vaud_consumers,
902 },
903 /* supply for v-anamic1 VAMic1-LDO */
904 [AB8505_LDO_ANAMIC1] = {
905 .constraints = {
906 .name = "V-AMIC1",
Lee Jones3fe52282013-04-02 13:24:12 +0100907 .valid_ops_mask = REGULATOR_CHANGE_STATUS |
908 REGULATOR_CHANGE_MODE,
909 .valid_modes_mask = REGULATOR_MODE_NORMAL |
910 REGULATOR_MODE_IDLE,
Lee Jones547f3842013-03-28 16:11:14 +0000911 },
912 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
913 .consumer_supplies = ab8500_vamic1_consumers,
914 },
915 /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
916 [AB8505_LDO_ANAMIC2] = {
917 .constraints = {
918 .name = "V-AMIC2",
Lee Jones3fe52282013-04-02 13:24:12 +0100919 .valid_ops_mask = REGULATOR_CHANGE_STATUS |
920 REGULATOR_CHANGE_MODE,
921 .valid_modes_mask = REGULATOR_MODE_NORMAL |
922 REGULATOR_MODE_IDLE,
Lee Jones547f3842013-03-28 16:11:14 +0000923 },
924 .num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
925 .consumer_supplies = ab8500_vamic2_consumers,
926 },
927 /* supply for v-aux8, VAUX8 LDO */
928 [AB8505_LDO_AUX8] = {
929 .constraints = {
930 .name = "V-AUX8",
931 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
932 },
933 .num_consumer_supplies = ARRAY_SIZE(ab8505_vaux8_consumers),
934 .consumer_supplies = ab8505_vaux8_consumers,
935 },
936 /* supply for v-intcore12, VINTCORE12 LDO */
937 [AB8505_LDO_INTCORE] = {
938 .constraints = {
939 .name = "V-INTCORE",
940 .min_uV = 1250000,
941 .max_uV = 1350000,
942 .input_uV = 1800000,
943 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
944 REGULATOR_CHANGE_STATUS |
945 REGULATOR_CHANGE_MODE |
946 REGULATOR_CHANGE_DRMS,
947 .valid_modes_mask = REGULATOR_MODE_NORMAL |
948 REGULATOR_MODE_IDLE,
949 },
950 .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
951 .consumer_supplies = ab8500_vintcore_consumers,
952 },
953 /* supply for LDO USB */
954 [AB8505_LDO_USB] = {
955 .constraints = {
956 .name = "V-USB",
957 .valid_ops_mask = REGULATOR_CHANGE_STATUS |
958 REGULATOR_CHANGE_MODE,
959 .valid_modes_mask = REGULATOR_MODE_NORMAL |
960 REGULATOR_MODE_IDLE,
961 },
962 .num_consumer_supplies = ARRAY_SIZE(ab8505_usb_consumers),
963 .consumer_supplies = ab8505_usb_consumers,
964 },
965 /* supply for U8500 CSI-DSI, VANA LDO */
966 [AB8505_LDO_ANA] = {
967 .constraints = {
968 .name = "V-CSI-DSI",
969 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
970 },
971 .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
972 .consumer_supplies = ab8500_vana_consumers,
973 },
974};
975
Bengt Jonsson732805a2013-03-21 15:59:03 +0000976struct ab8500_regulator_platform_data ab8500_regulator_plat_data = {
977 .reg_init = ab8500_reg_init,
978 .num_reg_init = ARRAY_SIZE(ab8500_reg_init),
979 .regulator = ab8500_regulators,
980 .num_regulator = ARRAY_SIZE(ab8500_regulators),
Lee Jonesa387ac52013-03-28 16:11:02 +0000981 .ext_regulator = ab8500_ext_regulators,
982 .num_ext_regulator = ARRAY_SIZE(ab8500_ext_regulators),
Bengt Jonsson732805a2013-03-21 15:59:03 +0000983};
Lee Jonesa1d49482013-03-28 16:11:03 +0000984
Lee Jones547f3842013-03-28 16:11:14 +0000985/* Use the AB8500 init settings for AB8505 as they are the same right now */
986struct ab8500_regulator_platform_data ab8505_regulator_plat_data = {
987 .reg_init = ab8505_reg_init,
988 .num_reg_init = ARRAY_SIZE(ab8505_reg_init),
989 .regulator = ab8505_regulators,
990 .num_regulator = ARRAY_SIZE(ab8505_regulators),
991};
992
Lee Jonesa1d49482013-03-28 16:11:03 +0000993static void ab8500_modify_reg_init(int id, u8 mask, u8 value)
994{
995 int i;
996
Lee Jones547f3842013-03-28 16:11:14 +0000997 if (cpu_is_u8520()) {
998 for (i = ARRAY_SIZE(ab8505_reg_init) - 1; i >= 0; i--) {
999 if (ab8505_reg_init[i].id == id) {
1000 u8 initval = ab8505_reg_init[i].value;
1001 initval = (initval & ~mask) | (value & mask);
1002 ab8505_reg_init[i].value = initval;
Lee Jonesa1d49482013-03-28 16:11:03 +00001003
Lee Jones547f3842013-03-28 16:11:14 +00001004 BUG_ON(mask & ~ab8505_reg_init[i].mask);
1005 return;
1006 }
1007 }
1008 } else {
1009 for (i = ARRAY_SIZE(ab8500_reg_init) - 1; i >= 0; i--) {
1010 if (ab8500_reg_init[i].id == id) {
1011 u8 initval = ab8500_reg_init[i].value;
1012 initval = (initval & ~mask) | (value & mask);
1013 ab8500_reg_init[i].value = initval;
1014
1015 BUG_ON(mask & ~ab8500_reg_init[i].mask);
1016 return;
1017 }
Lee Jonesa1d49482013-03-28 16:11:03 +00001018 }
1019 }
1020
1021 BUG_ON(1);
1022}
Lee Jones422d7652013-03-28 16:11:04 +00001023
1024void mop500_regulator_init(void)
1025{
1026 struct regulator_init_data *regulator;
1027
1028 /*
Lee Jonesa652f3d2013-04-02 13:24:21 +01001029 * Temporarily turn on Vaux2 on 8520 machine
Lee Jones422d7652013-03-28 16:11:04 +00001030 */
Lee Jones547f3842013-03-28 16:11:14 +00001031 if (cpu_is_u8520()) {
1032 /* Vaux2 initialized to be on */
1033 ab8500_modify_reg_init(AB8505_VAUX12REGU, 0x0f, 0x05);
1034 }
1035
Lee Jonese0c44682013-03-28 16:11:05 +00001036 /*
1037 * Handle AB8500_EXT_SUPPLY2 on HREFP_V20_V50 boards (do it for
1038 * all HREFP_V20 boards)
1039 */
1040 if (cpu_is_u8500v20()) {
1041 /* VextSupply2RequestCtrl = HP/OFF depending on VxRequest */
1042 ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3, 0x01, 0x01);
1043
1044 /* VextSupply2SysClkReq1HPValid = SysClkReq1 controlled */
1045 ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2,
1046 0x20, 0x20);
1047
1048 /* VextSupply2 = force HP at initialization */
1049 ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU, 0x0c, 0x04);
1050
1051 /* enable VextSupply2 during platform active */
1052 regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
1053 regulator->constraints.always_on = 1;
1054
1055 /* disable VextSupply2 in suspend */
1056 regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2];
1057 regulator->constraints.state_mem.disabled = 1;
1058 regulator->constraints.state_standby.disabled = 1;
1059
1060 /* enable VextSupply2 HW control (used in suspend) */
1061 regulator->driver_data = (void *)&ab8500_ext_supply2;
1062 }
Lee Jones422d7652013-03-28 16:11:04 +00001063}