blob: 193da15544a24ab0f8877a4b34bc601ca307bfbf [file] [log] [blame]
Justin Paupore637a25d2011-07-14 17:11:04 -07001/*
Duy Truong790f06d2013-02-13 16:38:12 -08002 * Copyright (c) 2011, The Linux Foundation. All rights reserved.
Justin Paupore637a25d2011-07-14 17:11:04 -07003 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include "board-msm7x30-regulator.h"
15
16#define PCOM_VREG_CONSUMERS(name) \
17 static struct regulator_consumer_supply __pcom_vreg_supply_##name[]
18
19#define PCOM_VREG_CONSTRAINT_LVSW(_name, _always_on, _boot_on, _supply_uV) \
20{ \
21 .name = #_name, \
22 .min_uV = 0, \
23 .max_uV = 0, \
24 .input_uV = _supply_uV, \
25 .valid_modes_mask = REGULATOR_MODE_NORMAL, \
26 .valid_ops_mask = REGULATOR_CHANGE_STATUS, \
27 .apply_uV = 0, \
28 .boot_on = _boot_on, \
29 .always_on = _always_on \
30}
31
32#define PCOM_VREG_CONSTRAINT_DYN(_name, _min_uV, _max_uV, _always_on, \
33 _boot_on, _apply_uV, _supply_uV) \
34{ \
35 .name = #_name, \
36 .min_uV = _min_uV, \
37 .max_uV = _max_uV, \
38 .valid_modes_mask = REGULATOR_MODE_NORMAL, \
39 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, \
40 .input_uV = _supply_uV, \
41 .apply_uV = _apply_uV, \
42 .boot_on = _boot_on, \
43 .always_on = _always_on \
44}
45
46
47#define PCOM_VREG_INIT(_name, _supply, _constraints)\
48{ \
49 .supply_regulator = _supply, \
50 .consumer_supplies = __pcom_vreg_supply_##_name, \
51 .num_consumer_supplies = ARRAY_SIZE(__pcom_vreg_supply_##_name), \
52 .constraints = _constraints \
53}
54
55#define PCOM_VREG_SMP(_name, _id, _supply, _min_uV, _max_uV, _rise_time, \
56 _pulldown, _always_on, _boot_on, _apply_uV, _supply_uV) \
57{ \
58 .init_data = PCOM_VREG_INIT(_name, _supply, \
59 PCOM_VREG_CONSTRAINT_DYN(_name, _min_uV, _max_uV, _always_on, \
60 _boot_on, _apply_uV, _supply_uV)), \
61 .id = _id, \
62 .rise_time = _rise_time, \
63 .pulldown = _pulldown, \
64 .negative = 0, \
65}
66
67#define PCOM_VREG_LDO PCOM_VREG_SMP
68
69#define PCOM_VREG_LVS(_name, _id, _supply, _rise_time, _pulldown, _always_on, \
70 _boot_on) \
71{ \
72 .init_data = PCOM_VREG_INIT(_name, _supply, \
73 PCOM_VREG_CONSTRAINT_LVSW(_name, _always_on, _boot_on, 0)), \
74 .id = _id, \
75 .rise_time = _rise_time, \
76 .pulldown = _pulldown, \
77 .negative = 0, \
78}
79
80#define PCOM_VREG_NCP(_name, _id, _supply, _min_uV, _max_uV, _rise_time, \
81 _always_on, _boot_on, _apply_uV, _supply_uV) \
82{ \
83 .init_data = PCOM_VREG_INIT(_name, _supply, \
84 PCOM_VREG_CONSTRAINT_DYN(_name, -(_min_uV), -(_max_uV), \
85 _always_on, _boot_on, _apply_uV, _supply_uV)), \
86 .id = _id, \
87 .rise_time = _rise_time, \
88 .pulldown = -1, \
89 .negative = 1, \
90}
91
92PCOM_VREG_CONSUMERS(smps0) = {
93 REGULATOR_SUPPLY("smps0", NULL),
94 REGULATOR_SUPPLY("msmc1", NULL),
95};
96
97PCOM_VREG_CONSUMERS(smps1) = {
98 REGULATOR_SUPPLY("smps1", NULL),
99 REGULATOR_SUPPLY("msmc2", NULL),
100};
101
102PCOM_VREG_CONSUMERS(smps2) = {
103 REGULATOR_SUPPLY("smps2", NULL),
104 REGULATOR_SUPPLY("s2", NULL),
105};
106
107PCOM_VREG_CONSUMERS(smps3) = {
108 REGULATOR_SUPPLY("smps3", NULL),
109 REGULATOR_SUPPLY("s3", NULL),
110};
111
112PCOM_VREG_CONSUMERS(smps4) = {
113 REGULATOR_SUPPLY("smps4", NULL),
114 REGULATOR_SUPPLY("s4", NULL),
115};
116
117PCOM_VREG_CONSUMERS(ldo00) = {
118 REGULATOR_SUPPLY("ldo00", NULL),
119 REGULATOR_SUPPLY("ldo0", NULL),
120 REGULATOR_SUPPLY("gp3", NULL),
121};
122
123PCOM_VREG_CONSUMERS(ldo02) = {
124 REGULATOR_SUPPLY("ldo02", NULL),
125 REGULATOR_SUPPLY("ldo2", NULL),
126 REGULATOR_SUPPLY("xo_out", NULL),
127};
128
129PCOM_VREG_CONSUMERS(ldo03) = {
130 REGULATOR_SUPPLY("ldo03", NULL),
131 REGULATOR_SUPPLY("ldo3", NULL),
132 REGULATOR_SUPPLY("ruim", NULL),
133};
134
135PCOM_VREG_CONSUMERS(ldo04) = {
136 REGULATOR_SUPPLY("ldo04", NULL),
137 REGULATOR_SUPPLY("ldo4", NULL),
138 REGULATOR_SUPPLY("tcxo", NULL),
139};
140
141PCOM_VREG_CONSUMERS(ldo05) = {
142 REGULATOR_SUPPLY("ldo05", NULL),
143 REGULATOR_SUPPLY("ldo5", NULL),
144 REGULATOR_SUPPLY("mmc", NULL),
145};
146
147PCOM_VREG_CONSUMERS(ldo06) = {
148 REGULATOR_SUPPLY("ldo06", NULL),
149 REGULATOR_SUPPLY("ldo6", NULL),
150 REGULATOR_SUPPLY("usb", NULL),
151};
152
153PCOM_VREG_CONSUMERS(ldo07) = {
154 REGULATOR_SUPPLY("ldo07", NULL),
155 REGULATOR_SUPPLY("ldo7", NULL),
156 REGULATOR_SUPPLY("usb2", NULL),
157};
158
159PCOM_VREG_CONSUMERS(ldo08) = {
160 REGULATOR_SUPPLY("ldo08", NULL),
161 REGULATOR_SUPPLY("ldo8", NULL),
162 REGULATOR_SUPPLY("gp7", NULL),
163};
164
165PCOM_VREG_CONSUMERS(ldo09) = {
166 REGULATOR_SUPPLY("ldo09", NULL),
167 REGULATOR_SUPPLY("ldo9", NULL),
168 REGULATOR_SUPPLY("gp1", NULL),
169};
170
171PCOM_VREG_CONSUMERS(ldo10) = {
172 REGULATOR_SUPPLY("ldo10", NULL),
173 REGULATOR_SUPPLY("gp4", NULL),
174};
175
176PCOM_VREG_CONSUMERS(ldo11) = {
177 REGULATOR_SUPPLY("ldo11", NULL),
178 REGULATOR_SUPPLY("gp2", NULL),
179};
180
181PCOM_VREG_CONSUMERS(ldo12) = {
182 REGULATOR_SUPPLY("ldo12", NULL),
183 REGULATOR_SUPPLY("gp9", NULL),
184};
185
186PCOM_VREG_CONSUMERS(ldo13) = {
187 REGULATOR_SUPPLY("ldo13", NULL),
188 REGULATOR_SUPPLY("wlan", NULL),
189};
190
191PCOM_VREG_CONSUMERS(ldo14) = {
192 REGULATOR_SUPPLY("ldo14", NULL),
193 REGULATOR_SUPPLY("rf", NULL),
194};
195
196PCOM_VREG_CONSUMERS(ldo15) = {
197 REGULATOR_SUPPLY("ldo15", NULL),
198 REGULATOR_SUPPLY("gp6", NULL),
199};
200
201PCOM_VREG_CONSUMERS(ldo16) = {
202 REGULATOR_SUPPLY("ldo16", NULL),
203 REGULATOR_SUPPLY("gp10", NULL),
204};
205
206PCOM_VREG_CONSUMERS(ldo17) = {
207 REGULATOR_SUPPLY("ldo17", NULL),
208 REGULATOR_SUPPLY("gp11", NULL),
209};
210
211PCOM_VREG_CONSUMERS(ldo18) = {
212 REGULATOR_SUPPLY("ldo18", NULL),
213 REGULATOR_SUPPLY("gp12", NULL),
214};
215
216PCOM_VREG_CONSUMERS(ldo19) = {
217 REGULATOR_SUPPLY("ldo19", NULL),
218 REGULATOR_SUPPLY("wlan2", NULL),
219};
220
221PCOM_VREG_CONSUMERS(ldo20) = {
222 REGULATOR_SUPPLY("ldo20", NULL),
223 REGULATOR_SUPPLY("gp13", NULL),
224};
225
226PCOM_VREG_CONSUMERS(ldo21) = {
227 REGULATOR_SUPPLY("ldo21", NULL),
228 REGULATOR_SUPPLY("gp14", NULL),
229};
230
231PCOM_VREG_CONSUMERS(ldo22) = {
232 REGULATOR_SUPPLY("ldo22", NULL),
233 REGULATOR_SUPPLY("gp15", NULL),
234};
235
236PCOM_VREG_CONSUMERS(ldo23) = {
237 REGULATOR_SUPPLY("ldo23", NULL),
238 REGULATOR_SUPPLY("gp5", NULL),
239};
240
241PCOM_VREG_CONSUMERS(ldo24) = {
242 REGULATOR_SUPPLY("ldo24", NULL),
243 REGULATOR_SUPPLY("gp16", NULL),
244};
245
246PCOM_VREG_CONSUMERS(ldo25) = {
247 REGULATOR_SUPPLY("ldo25", NULL),
248 REGULATOR_SUPPLY("gp17", NULL),
249};
250
251PCOM_VREG_CONSUMERS(lvsw0) = {
252 REGULATOR_SUPPLY("lvsw0", NULL),
253 REGULATOR_SUPPLY("lvs0", NULL),
254};
255
256PCOM_VREG_CONSUMERS(lvsw1) = {
257 REGULATOR_SUPPLY("lvsw1", NULL),
258 REGULATOR_SUPPLY("lvs1", NULL),
259};
260
261PCOM_VREG_CONSUMERS(ncp) = {
262 REGULATOR_SUPPLY("ncp", NULL),
263};
264
265/* This list needs to be verified against actual 7x30 hardware requirements. */
266static struct proccomm_regulator_info msm7x30_pcom_vreg_info[] = {
267 /* Standard regulators (SMPS and LDO)
268 * R = rise time (us)
269 * P = pulldown (1 = pull down, 0 = float, -1 = don't care)
270 * A = always on
271 * B = boot on
272 * V = automatic voltage set (meaningful for single-voltage regs only)
273 * S = supply voltage (uV)
274 * name id supp min uV max uV R P A B V S */
275 PCOM_VREG_SMP(smps0, 3, NULL, 500000, 1500000, 0, -1, 0, 0, 0, 0),
276 PCOM_VREG_SMP(smps1, 4, NULL, 500000, 1500000, 0, -1, 0, 0, 0, 0),
Justin Paupore3f40f342011-08-10 18:52:16 -0700277 PCOM_VREG_SMP(smps2, 28, NULL, 1300000, 1300000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700278 PCOM_VREG_SMP(smps3, 29, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
279 PCOM_VREG_SMP(smps4, 43, NULL, 2200000, 2200000, 0, -1, 0, 0, 0, 0),
280 PCOM_VREG_LDO(ldo00, 5, NULL, 1200000, 1200000, 0, -1, 0, 0, 0, 0),
281 PCOM_VREG_LDO(ldo02, 46, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
282 PCOM_VREG_LDO(ldo03, 19, NULL, 1800000, 3000000, 0, -1, 0, 0, 0, 0),
283 PCOM_VREG_LDO(ldo04, 9, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
284 PCOM_VREG_LDO(ldo05, 18, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
Justin Paupore3f40f342011-08-10 18:52:16 -0700285 PCOM_VREG_LDO(ldo06, 16, NULL, 3075000, 3400000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700286 PCOM_VREG_LDO(ldo07, 44, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
287 PCOM_VREG_LDO(ldo08, 32, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
288 PCOM_VREG_LDO(ldo09, 8, NULL, 2050000, 2050000, 0, -1, 0, 0, 0, 0),
289 PCOM_VREG_LDO(ldo10, 7, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
290 PCOM_VREG_LDO(ldo11, 21, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
291 PCOM_VREG_LDO(ldo12, 34, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar82e57192011-11-30 12:41:32 +0530292 PCOM_VREG_LDO(ldo13, 15, NULL, 2900000, 3050000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700293 PCOM_VREG_LDO(ldo14, 24, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
Justin Paupore3f40f342011-08-10 18:52:16 -0700294 PCOM_VREG_LDO(ldo15, 23, NULL, 3050000, 3100000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700295 PCOM_VREG_LDO(ldo16, 35, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
296 PCOM_VREG_LDO(ldo17, 36, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
297 PCOM_VREG_LDO(ldo18, 37, NULL, 2200000, 2200000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar1e718ed2011-12-08 15:26:09 +0530298 PCOM_VREG_LDO(ldo19, 45, NULL, 2400000, 2500000, 0, -1, 0, 0, 0, 0),
Justin Paupore3f40f342011-08-10 18:52:16 -0700299 PCOM_VREG_LDO(ldo20, 38, NULL, 1500000, 1800000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700300 PCOM_VREG_LDO(ldo21, 39, NULL, 1100000, 1100000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar82e57192011-11-30 12:41:32 +0530301 PCOM_VREG_LDO(ldo22, 40, NULL, 1200000, 1300000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700302 PCOM_VREG_LDO(ldo23, 22, NULL, 1350000, 1350000, 0, -1, 0, 0, 0, 0),
Justin Paupore3f40f342011-08-10 18:52:16 -0700303 PCOM_VREG_LDO(ldo24, 41, NULL, 1200000, 1200000, 0, -1, 0, 0, 0, 0),
Justin Paupore637a25d2011-07-14 17:11:04 -0700304 PCOM_VREG_LDO(ldo25, 42, NULL, 1200000, 1200000, 0, -1, 0, 0, 0, 0),
305
306 /* Low-voltage switches */
307 PCOM_VREG_LVS(lvsw0, 47, NULL, 0, -1, 0, 0),
308 PCOM_VREG_LVS(lvsw1, 48, NULL, 0, -1, 0, 0),
309
310 PCOM_VREG_NCP(ncp, 31, NULL, -1800000, -1800000, 0, 0, 0, 0, 0),
311};
312
313struct proccomm_regulator_platform_data msm7x30_proccomm_regulator_data = {
314 .regs = msm7x30_pcom_vreg_info,
315 .nregs = ARRAY_SIZE(msm7x30_pcom_vreg_info)
316};