blob: 3ef748d4cd4cfc92537eb8a9970cdbab74030068 [file] [log] [blame]
Pankaj Kumar75c86fd2011-10-01 18:51:09 +05301/*
Duy Truong790f06d2013-02-13 16:38:12 -08002 * Copyright (c) 2011, The Linux Foundation. All rights reserved.
Pankaj Kumar75c86fd2011-10-01 18:51:09 +05303 *
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-msm7627-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
69PCOM_VREG_CONSUMERS(smps0) = {
70 REGULATOR_SUPPLY("smps0", NULL),
71 REGULATOR_SUPPLY("msmc1", NULL),
72};
73
74PCOM_VREG_CONSUMERS(smps1) = {
75 REGULATOR_SUPPLY("smps1", NULL),
76 REGULATOR_SUPPLY("msmc2", NULL),
77};
78
79PCOM_VREG_CONSUMERS(smps2) = {
80 REGULATOR_SUPPLY("smps2", NULL),
81 REGULATOR_SUPPLY("pa", NULL),
82};
83
84PCOM_VREG_CONSUMERS(smps3) = {
85 REGULATOR_SUPPLY("smps3", NULL),
86 REGULATOR_SUPPLY("msme1", NULL),
87};
88
89PCOM_VREG_CONSUMERS(ldo00) = {
90 REGULATOR_SUPPLY("ldo00", NULL),
91 REGULATOR_SUPPLY("gp3", NULL),
92};
93
94PCOM_VREG_CONSUMERS(ldo01) = {
95 REGULATOR_SUPPLY("ldo01", NULL),
96 REGULATOR_SUPPLY("msma", NULL),
97};
98
99PCOM_VREG_CONSUMERS(ldo02) = {
100 REGULATOR_SUPPLY("ldo02", NULL),
101 REGULATOR_SUPPLY("msmp", NULL),
102};
103
104PCOM_VREG_CONSUMERS(ldo03) = {
105 REGULATOR_SUPPLY("ldo03", NULL),
106 REGULATOR_SUPPLY("ruim", NULL),
107};
108
109PCOM_VREG_CONSUMERS(ldo04) = {
110 REGULATOR_SUPPLY("ldo04", NULL),
111 REGULATOR_SUPPLY("tcxo", NULL),
112};
113
114PCOM_VREG_CONSUMERS(ldo05) = {
115 REGULATOR_SUPPLY("ldo05", NULL),
116 REGULATOR_SUPPLY("mmc", NULL),
117};
118
119PCOM_VREG_CONSUMERS(ldo06) = {
120 REGULATOR_SUPPLY("ldo06", NULL),
121 REGULATOR_SUPPLY("usb", NULL),
122};
123
124PCOM_VREG_CONSUMERS(ldo07) = {
125 REGULATOR_SUPPLY("ldo07", NULL),
126 REGULATOR_SUPPLY("rfrx1", NULL),
127};
128
129PCOM_VREG_CONSUMERS(ldo08) = {
130 REGULATOR_SUPPLY("ldo08", NULL),
131 REGULATOR_SUPPLY("synt", NULL),
132};
133
134PCOM_VREG_CONSUMERS(ldo09) = {
135 REGULATOR_SUPPLY("ldo09", NULL),
136 REGULATOR_SUPPLY("gp1", NULL),
137};
138
139PCOM_VREG_CONSUMERS(ldo10) = {
140 REGULATOR_SUPPLY("ldo10", NULL),
141 REGULATOR_SUPPLY("gp4", NULL),
142};
143
144PCOM_VREG_CONSUMERS(ldo11) = {
145 REGULATOR_SUPPLY("ldo11", NULL),
146 REGULATOR_SUPPLY("gp2", NULL),
147};
148
149PCOM_VREG_CONSUMERS(ldo12) = {
150 REGULATOR_SUPPLY("ldo12", NULL),
151 REGULATOR_SUPPLY("rftx", NULL),
152};
153
154PCOM_VREG_CONSUMERS(ldo13) = {
155 REGULATOR_SUPPLY("ldo13", NULL),
156 REGULATOR_SUPPLY("wlan", NULL),
157};
158
159PCOM_VREG_CONSUMERS(ldo14) = {
160 REGULATOR_SUPPLY("ldo14", NULL),
161 REGULATOR_SUPPLY("rf", NULL),
162};
163
164PCOM_VREG_CONSUMERS(ldo15) = {
165 REGULATOR_SUPPLY("ldo15", NULL),
166 REGULATOR_SUPPLY("gp6", NULL),
167};
168
169PCOM_VREG_CONSUMERS(ldo16) = {
170 REGULATOR_SUPPLY("ldo16", NULL),
171 REGULATOR_SUPPLY("gp5", NULL),
172};
173
174PCOM_VREG_CONSUMERS(ldo17) = {
175 REGULATOR_SUPPLY("ldo17", NULL),
176 REGULATOR_SUPPLY("msme2", NULL),
177};
178
179/**
180 * Minimum and Maximum range for the regulators is as per the
181 * device Datasheet. Actual value used by consumer is between
182 * the provided range.
183 */
184static struct proccomm_regulator_info msm7627_pcom_vreg_info[] = {
185 /* Standard regulators (SMPS and LDO)
186 * R = rise time (us)
187 * P = pulldown (1 = pull down, 0 = float, -1 = don't care)
188 * A = always on
189 * B = boot on
190 * V = automatic voltage set (meaningful for single-voltage regs only)
191 * S = supply voltage (uV)
192 * name id supp min uV max uV R P A B V S */
193 PCOM_VREG_SMP(smps0, 3, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
194 PCOM_VREG_SMP(smps1, 4, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
195 PCOM_VREG_SMP(smps2, 10, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
196 PCOM_VREG_SMP(smps3, 2, NULL, 750000, 3050000, 0, -1, 0, 0, 0, 0),
197 PCOM_VREG_LDO(ldo00, 5, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
198 PCOM_VREG_LDO(ldo01, 0, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
199 PCOM_VREG_LDO(ldo02, 1, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
200 PCOM_VREG_LDO(ldo03, 19, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
201 PCOM_VREG_LDO(ldo04, 9, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
202 PCOM_VREG_LDO(ldo05, 18, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0),
203 PCOM_VREG_LDO(ldo06, 16, NULL, 3300000, 3300000, 0, -1, 0, 0, 0, 0),
204 PCOM_VREG_LDO(ldo07, 12, NULL, 2700000, 2700000, 0, -1, 0, 0, 0, 0),
205 PCOM_VREG_LDO(ldo08, 14, NULL, 2700000, 2700000, 0, -1, 0, 0, 0, 0),
206 PCOM_VREG_LDO(ldo09, 8, NULL, 2900000, 2900000, 0, -1, 0, 0, 0, 0),
207 PCOM_VREG_LDO(ldo10, 7, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
208 PCOM_VREG_LDO(ldo11, 21, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
209 PCOM_VREG_LDO(ldo12, 11, NULL, 1800000, 1800000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar82e57192011-11-30 12:41:32 +0530210 PCOM_VREG_LDO(ldo13, 15, NULL, 1800000, 2850000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar75c86fd2011-10-01 18:51:09 +0530211 PCOM_VREG_LDO(ldo14, 24, NULL, 2700000, 2700000, 0, -1, 0, 0, 0, 0),
212 PCOM_VREG_LDO(ldo15, 23, NULL, 2600000, 2600000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar0f77ca82011-10-03 10:20:30 +0530213 PCOM_VREG_LDO(ldo16, 22, NULL, 2850000, 3000000, 0, -1, 0, 0, 0, 0),
Pankaj Kumar75c86fd2011-10-01 18:51:09 +0530214 PCOM_VREG_LDO(ldo17, 6, NULL, 1300000, 1300000, 0, -1, 0, 0, 0, 0),
215
216};
217
218struct proccomm_regulator_platform_data msm7627_proccomm_regulator_data = {
219 .regs = msm7627_pcom_vreg_info,
220 .nregs = ARRAY_SIZE(msm7627_pcom_vreg_info)
221};