blob: d4f33ebaf6376861ebca1c87742505b8c02d332a [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>
Sundar Iyer4f724be2010-09-15 10:50:59 +01008 *
9 * MOP500 board specific initialization for regulators
10 */
11#include <linux/kernel.h>
12#include <linux/regulator/machine.h>
Bengt Jonssona1e516e2010-12-10 11:08:48 +010013#include <linux/regulator/ab8500.h>
Linus Walleijd1de85a2010-12-02 17:10:14 +010014#include "board-mop500-regulators.h"
15
16static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
17 /* External displays, connector on board 2v5 power supply */
18 REGULATOR_SUPPLY("vaux12v5", "mcde.0"),
19 /* SFH7741 proximity sensor */
20 REGULATOR_SUPPLY("vcc", "gpio-keys.0"),
21 /* BH1780GLS ambient light sensor */
22 REGULATOR_SUPPLY("vcc", "2-0029"),
23 /* lsm303dlh accelerometer */
24 REGULATOR_SUPPLY("vdd", "3-0018"),
25 /* lsm303dlh magnetometer */
26 REGULATOR_SUPPLY("vdd", "3-001e"),
27 /* Rohm BU21013 Touchscreen devices */
28 REGULATOR_SUPPLY("avdd", "3-005c"),
29 REGULATOR_SUPPLY("avdd", "3-005d"),
30 /* Synaptics RMI4 Touchscreen device */
31 REGULATOR_SUPPLY("vdd", "3-004b"),
32};
33
34static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
35 /* On-board eMMC power */
36 REGULATOR_SUPPLY("vmmc", "sdi4"),
37 /* AB8500 audio codec */
38 REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"),
39};
40
41static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
42 /* External MMC slot power */
43 REGULATOR_SUPPLY("vmmc", "sdi0"),
44};
45
46static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
47 /* TV-out DENC supply */
48 REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),
49 /* Internal general-purpose ADC */
50 REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"),
51};
52
53static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
54 /* SoC core supply, no device */
55 REGULATOR_SUPPLY("v-intcore", NULL),
56 /* USB Transciever */
57 REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"),
58};
59
60static struct regulator_consumer_supply ab8500_vana_consumers[] = {
61 /* External displays, connector on board, 1v8 power supply */
62 REGULATOR_SUPPLY("vsmps2", "mcde.0"),
63};
Sundar Iyer4f724be2010-09-15 10:50:59 +010064
Bengt Jonssondfa3a822011-03-09 13:34:17 +010065/* ab8500 regulator register initialization */
66struct ab8500_regulator_reg_init
67ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {
68 /*
69 * VanaRequestCtrl = HP/LP depending on VxRequest
70 * VextSupply1RequestCtrl = HP/LP depending on VxRequest
71 */
72 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0x00),
73 /*
74 * VextSupply2RequestCtrl = HP/LP depending on VxRequest
75 * VextSupply3RequestCtrl = HP/LP depending on VxRequest
76 * Vaux1RequestCtrl = HP/LP depending on VxRequest
77 * Vaux2RequestCtrl = HP/LP depending on VxRequest
78 */
79 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0x00),
80 /*
81 * Vaux3RequestCtrl = HP/LP depending on VxRequest
82 * SwHPReq = Control through SWValid disabled
83 */
84 INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x00),
85 /*
86 * VanaSysClkReq1HPValid = disabled
87 * Vaux1SysClkReq1HPValid = disabled
88 * Vaux2SysClkReq1HPValid = disabled
89 * Vaux3SysClkReq1HPValid = disabled
90 */
91 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0x00),
92 /*
93 * VextSupply1SysClkReq1HPValid = disabled
94 * VextSupply2SysClkReq1HPValid = disabled
95 * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled
96 */
97 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x40),
98 /*
99 * VanaHwHPReq1Valid = disabled
100 * Vaux1HwHPreq1Valid = disabled
101 * Vaux2HwHPReq1Valid = disabled
102 * Vaux3HwHPReqValid = disabled
103 */
104 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0x00),
105 /*
106 * VextSupply1HwHPReq1Valid = disabled
107 * VextSupply2HwHPReq1Valid = disabled
108 * VextSupply3HwHPReq1Valid = disabled
109 */
110 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x00),
111 /*
112 * VanaHwHPReq2Valid = disabled
113 * Vaux1HwHPReq2Valid = disabled
114 * Vaux2HwHPReq2Valid = disabled
115 * Vaux3HwHPReq2Valid = disabled
116 */
117 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0x00),
118 /*
119 * VextSupply1HwHPReq2Valid = disabled
120 * VextSupply2HwHPReq2Valid = disabled
121 * VextSupply3HwHPReq2Valid = HWReq2 controlled
122 */
123 INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x04),
124 /*
125 * VanaSwHPReqValid = disabled
126 * Vaux1SwHPReqValid = disabled
127 */
128 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0x00),
129 /*
130 * Vaux2SwHPReqValid = disabled
131 * Vaux3SwHPReqValid = disabled
132 * VextSupply1SwHPReqValid = disabled
133 * VextSupply2SwHPReqValid = disabled
134 * VextSupply3SwHPReqValid = disabled
135 */
136 INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x00),
137 /*
138 * SysClkReq2Valid1 = SysClkReq2 controlled
139 * SysClkReq3Valid1 = disabled
140 * SysClkReq4Valid1 = SysClkReq4 controlled
141 * SysClkReq5Valid1 = disabled
142 * SysClkReq6Valid1 = SysClkReq6 controlled
143 * SysClkReq7Valid1 = disabled
144 * SysClkReq8Valid1 = disabled
145 */
146 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0x2a),
147 /*
148 * SysClkReq2Valid2 = disabled
149 * SysClkReq3Valid2 = disabled
150 * SysClkReq4Valid2 = disabled
151 * SysClkReq5Valid2 = disabled
152 * SysClkReq6Valid2 = SysClkReq6 controlled
153 * SysClkReq7Valid2 = disabled
154 * SysClkReq8Valid2 = disabled
155 */
156 INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0x20),
157 /*
158 * VTVoutEna = disabled
159 * Vintcore12Ena = disabled
160 * Vintcore12Sel = 1.25 V
161 * Vintcore12LP = inactive (HP)
162 * VTVoutLP = inactive (HP)
163 */
164 INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0x10),
165 /*
166 * VaudioEna = disabled
167 * VdmicEna = disabled
168 * Vamic1Ena = disabled
169 * Vamic2Ena = disabled
170 */
171 INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x00),
172 /*
173 * Vamic1_dzout = high-Z when Vamic1 is disabled
174 * Vamic2_dzout = high-Z when Vamic2 is disabled
175 */
176 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x00),
177 /*
178 * VPll = Hw controlled
179 * VanaRegu = force off
180 */
181 INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x02),
182 /*
183 * VrefDDREna = disabled
184 * VrefDDRSleepMode = inactive (no pulldown)
185 */
186 INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x00),
187 /*
188 * VextSupply1Regu = HW control
189 * VextSupply2Regu = HW control
190 * VextSupply3Regu = HW control
191 * ExtSupply2Bypass = ExtSupply12LPn ball is 0 when Ena is 0
192 * ExtSupply3Bypass = ExtSupply3LPn ball is 0 when Ena is 0
193 */
194 INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0x2a),
195 /*
196 * Vaux1Regu = force HP
197 * Vaux2Regu = force off
198 */
199 INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x01),
200 /*
201 * Vaux3regu = force off
202 */
203 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x00),
204 /*
205 * Vsmps1 = 1.15V
206 */
207 INIT_REGULATOR_REGISTER(AB8500_VSMPS1SEL1, 0x24),
208 /*
209 * Vaux1Sel = 2.5 V
210 */
211 INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x08),
212 /*
213 * Vaux2Sel = 2.9 V
214 */
215 INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0d),
216 /*
217 * Vaux3Sel = 2.91 V
218 */
219 INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07),
220 /*
221 * VextSupply12LP = disabled (no LP)
222 */
223 INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x00),
224 /*
225 * Vaux1Disch = short discharge time
226 * Vaux2Disch = short discharge time
227 * Vaux3Disch = short discharge time
228 * Vintcore12Disch = short discharge time
229 * VTVoutDisch = short discharge time
230 * VaudioDisch = short discharge time
231 */
232 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0x00),
233 /*
234 * VanaDisch = short discharge time
235 * VdmicPullDownEna = pulldown disabled when Vdmic is disabled
236 * VdmicDisch = short discharge time
237 */
238 INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x00),
239};
240
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100241/* AB8500 regulators */
242struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {
243 /* supplies to the display/camera */
244 [AB8500_LDO_AUX1] = {
245 .constraints = {
246 .name = "V-DISPLAY",
247 .min_uV = 2500000,
248 .max_uV = 2900000,
249 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
250 REGULATOR_CHANGE_STATUS,
Bengt Jonssondfa3a822011-03-09 13:34:17 +0100251 .boot_on = 1, /* must be on for display */
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100252 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100253 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
254 .consumer_supplies = ab8500_vaux1_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100255 },
256 /* supplies to the on-board eMMC */
257 [AB8500_LDO_AUX2] = {
258 .constraints = {
259 .name = "V-eMMC1",
260 .min_uV = 1100000,
261 .max_uV = 3300000,
262 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
263 REGULATOR_CHANGE_STATUS,
264 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100265 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
266 .consumer_supplies = ab8500_vaux2_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100267 },
268 /* supply for VAUX3, supplies to SDcard slots */
269 [AB8500_LDO_AUX3] = {
270 .constraints = {
271 .name = "V-MMC-SD",
272 .min_uV = 1100000,
273 .max_uV = 3300000,
274 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
275 REGULATOR_CHANGE_STATUS,
276 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100277 .num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
278 .consumer_supplies = ab8500_vaux3_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100279 },
280 /* supply for tvout, gpadc, TVOUT LDO */
281 [AB8500_LDO_TVOUT] = {
282 .constraints = {
283 .name = "V-TVOUT",
284 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
285 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100286 .num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
287 .consumer_supplies = ab8500_vtvout_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100288 },
289 /* supply for ab8500-vaudio, VAUDIO LDO */
290 [AB8500_LDO_AUDIO] = {
291 .constraints = {
292 .name = "V-AUD",
293 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
294 },
295 },
296 /* supply for v-anamic1 VAMic1-LDO */
297 [AB8500_LDO_ANAMIC1] = {
298 .constraints = {
299 .name = "V-AMIC1",
300 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
301 },
302 },
303 /* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
304 [AB8500_LDO_ANAMIC2] = {
305 .constraints = {
306 .name = "V-AMIC2",
307 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
308 },
309 },
310 /* supply for v-dmic, VDMIC LDO */
311 [AB8500_LDO_DMIC] = {
312 .constraints = {
313 .name = "V-DMIC",
314 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
315 },
316 },
317 /* supply for v-intcore12, VINTCORE12 LDO */
318 [AB8500_LDO_INTCORE] = {
319 .constraints = {
320 .name = "V-INTCORE",
321 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
322 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100323 .num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
324 .consumer_supplies = ab8500_vintcore_consumers,
Bengt Jonssona1e516e2010-12-10 11:08:48 +0100325 },
326 /* supply for U8500 CSI/DSI, VANA LDO */
327 [AB8500_LDO_ANA] = {
328 .constraints = {
329 .name = "V-CSI/DSI",
330 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
331 },
Linus Walleijd1de85a2010-12-02 17:10:14 +0100332 .num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),
333 .consumer_supplies = ab8500_vana_consumers,
Sundar Iyer4f724be2010-09-15 10:50:59 +0100334 },
335};