Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 1 | /* |
Duy Truong | 790f06d | 2013-02-13 16:38:12 -0800 | [diff] [blame] | 2 | * Copyright (c) 2011, The Linux Foundation. All rights reserved. |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 3 | * |
| 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 | |
| 92 | PCOM_VREG_CONSUMERS(smps0) = { |
| 93 | REGULATOR_SUPPLY("smps0", NULL), |
| 94 | REGULATOR_SUPPLY("msmc1", NULL), |
| 95 | }; |
| 96 | |
| 97 | PCOM_VREG_CONSUMERS(smps1) = { |
| 98 | REGULATOR_SUPPLY("smps1", NULL), |
| 99 | REGULATOR_SUPPLY("msmc2", NULL), |
| 100 | }; |
| 101 | |
| 102 | PCOM_VREG_CONSUMERS(smps2) = { |
| 103 | REGULATOR_SUPPLY("smps2", NULL), |
| 104 | REGULATOR_SUPPLY("s2", NULL), |
| 105 | }; |
| 106 | |
| 107 | PCOM_VREG_CONSUMERS(smps3) = { |
| 108 | REGULATOR_SUPPLY("smps3", NULL), |
| 109 | REGULATOR_SUPPLY("s3", NULL), |
| 110 | }; |
| 111 | |
| 112 | PCOM_VREG_CONSUMERS(smps4) = { |
| 113 | REGULATOR_SUPPLY("smps4", NULL), |
| 114 | REGULATOR_SUPPLY("s4", NULL), |
| 115 | }; |
| 116 | |
| 117 | PCOM_VREG_CONSUMERS(ldo00) = { |
| 118 | REGULATOR_SUPPLY("ldo00", NULL), |
| 119 | REGULATOR_SUPPLY("ldo0", NULL), |
| 120 | REGULATOR_SUPPLY("gp3", NULL), |
| 121 | }; |
| 122 | |
| 123 | PCOM_VREG_CONSUMERS(ldo02) = { |
| 124 | REGULATOR_SUPPLY("ldo02", NULL), |
| 125 | REGULATOR_SUPPLY("ldo2", NULL), |
| 126 | REGULATOR_SUPPLY("xo_out", NULL), |
| 127 | }; |
| 128 | |
| 129 | PCOM_VREG_CONSUMERS(ldo03) = { |
| 130 | REGULATOR_SUPPLY("ldo03", NULL), |
| 131 | REGULATOR_SUPPLY("ldo3", NULL), |
| 132 | REGULATOR_SUPPLY("ruim", NULL), |
| 133 | }; |
| 134 | |
| 135 | PCOM_VREG_CONSUMERS(ldo04) = { |
| 136 | REGULATOR_SUPPLY("ldo04", NULL), |
| 137 | REGULATOR_SUPPLY("ldo4", NULL), |
| 138 | REGULATOR_SUPPLY("tcxo", NULL), |
| 139 | }; |
| 140 | |
| 141 | PCOM_VREG_CONSUMERS(ldo05) = { |
| 142 | REGULATOR_SUPPLY("ldo05", NULL), |
| 143 | REGULATOR_SUPPLY("ldo5", NULL), |
| 144 | REGULATOR_SUPPLY("mmc", NULL), |
| 145 | }; |
| 146 | |
| 147 | PCOM_VREG_CONSUMERS(ldo06) = { |
| 148 | REGULATOR_SUPPLY("ldo06", NULL), |
| 149 | REGULATOR_SUPPLY("ldo6", NULL), |
| 150 | REGULATOR_SUPPLY("usb", NULL), |
| 151 | }; |
| 152 | |
| 153 | PCOM_VREG_CONSUMERS(ldo07) = { |
| 154 | REGULATOR_SUPPLY("ldo07", NULL), |
| 155 | REGULATOR_SUPPLY("ldo7", NULL), |
| 156 | REGULATOR_SUPPLY("usb2", NULL), |
| 157 | }; |
| 158 | |
| 159 | PCOM_VREG_CONSUMERS(ldo08) = { |
| 160 | REGULATOR_SUPPLY("ldo08", NULL), |
| 161 | REGULATOR_SUPPLY("ldo8", NULL), |
| 162 | REGULATOR_SUPPLY("gp7", NULL), |
| 163 | }; |
| 164 | |
| 165 | PCOM_VREG_CONSUMERS(ldo09) = { |
| 166 | REGULATOR_SUPPLY("ldo09", NULL), |
| 167 | REGULATOR_SUPPLY("ldo9", NULL), |
| 168 | REGULATOR_SUPPLY("gp1", NULL), |
| 169 | }; |
| 170 | |
| 171 | PCOM_VREG_CONSUMERS(ldo10) = { |
| 172 | REGULATOR_SUPPLY("ldo10", NULL), |
| 173 | REGULATOR_SUPPLY("gp4", NULL), |
| 174 | }; |
| 175 | |
| 176 | PCOM_VREG_CONSUMERS(ldo11) = { |
| 177 | REGULATOR_SUPPLY("ldo11", NULL), |
| 178 | REGULATOR_SUPPLY("gp2", NULL), |
| 179 | }; |
| 180 | |
| 181 | PCOM_VREG_CONSUMERS(ldo12) = { |
| 182 | REGULATOR_SUPPLY("ldo12", NULL), |
| 183 | REGULATOR_SUPPLY("gp9", NULL), |
| 184 | }; |
| 185 | |
| 186 | PCOM_VREG_CONSUMERS(ldo13) = { |
| 187 | REGULATOR_SUPPLY("ldo13", NULL), |
| 188 | REGULATOR_SUPPLY("wlan", NULL), |
| 189 | }; |
| 190 | |
| 191 | PCOM_VREG_CONSUMERS(ldo14) = { |
| 192 | REGULATOR_SUPPLY("ldo14", NULL), |
| 193 | REGULATOR_SUPPLY("rf", NULL), |
| 194 | }; |
| 195 | |
| 196 | PCOM_VREG_CONSUMERS(ldo15) = { |
| 197 | REGULATOR_SUPPLY("ldo15", NULL), |
| 198 | REGULATOR_SUPPLY("gp6", NULL), |
| 199 | }; |
| 200 | |
| 201 | PCOM_VREG_CONSUMERS(ldo16) = { |
| 202 | REGULATOR_SUPPLY("ldo16", NULL), |
| 203 | REGULATOR_SUPPLY("gp10", NULL), |
| 204 | }; |
| 205 | |
| 206 | PCOM_VREG_CONSUMERS(ldo17) = { |
| 207 | REGULATOR_SUPPLY("ldo17", NULL), |
| 208 | REGULATOR_SUPPLY("gp11", NULL), |
| 209 | }; |
| 210 | |
| 211 | PCOM_VREG_CONSUMERS(ldo18) = { |
| 212 | REGULATOR_SUPPLY("ldo18", NULL), |
| 213 | REGULATOR_SUPPLY("gp12", NULL), |
| 214 | }; |
| 215 | |
| 216 | PCOM_VREG_CONSUMERS(ldo19) = { |
| 217 | REGULATOR_SUPPLY("ldo19", NULL), |
| 218 | REGULATOR_SUPPLY("wlan2", NULL), |
| 219 | }; |
| 220 | |
| 221 | PCOM_VREG_CONSUMERS(ldo20) = { |
| 222 | REGULATOR_SUPPLY("ldo20", NULL), |
| 223 | REGULATOR_SUPPLY("gp13", NULL), |
| 224 | }; |
| 225 | |
| 226 | PCOM_VREG_CONSUMERS(ldo21) = { |
| 227 | REGULATOR_SUPPLY("ldo21", NULL), |
| 228 | REGULATOR_SUPPLY("gp14", NULL), |
| 229 | }; |
| 230 | |
| 231 | PCOM_VREG_CONSUMERS(ldo22) = { |
| 232 | REGULATOR_SUPPLY("ldo22", NULL), |
| 233 | REGULATOR_SUPPLY("gp15", NULL), |
| 234 | }; |
| 235 | |
| 236 | PCOM_VREG_CONSUMERS(ldo23) = { |
| 237 | REGULATOR_SUPPLY("ldo23", NULL), |
| 238 | REGULATOR_SUPPLY("gp5", NULL), |
| 239 | }; |
| 240 | |
| 241 | PCOM_VREG_CONSUMERS(ldo24) = { |
| 242 | REGULATOR_SUPPLY("ldo24", NULL), |
| 243 | REGULATOR_SUPPLY("gp16", NULL), |
| 244 | }; |
| 245 | |
| 246 | PCOM_VREG_CONSUMERS(ldo25) = { |
| 247 | REGULATOR_SUPPLY("ldo25", NULL), |
| 248 | REGULATOR_SUPPLY("gp17", NULL), |
| 249 | }; |
| 250 | |
| 251 | PCOM_VREG_CONSUMERS(lvsw0) = { |
| 252 | REGULATOR_SUPPLY("lvsw0", NULL), |
| 253 | REGULATOR_SUPPLY("lvs0", NULL), |
| 254 | }; |
| 255 | |
| 256 | PCOM_VREG_CONSUMERS(lvsw1) = { |
| 257 | REGULATOR_SUPPLY("lvsw1", NULL), |
| 258 | REGULATOR_SUPPLY("lvs1", NULL), |
| 259 | }; |
| 260 | |
| 261 | PCOM_VREG_CONSUMERS(ncp) = { |
| 262 | REGULATOR_SUPPLY("ncp", NULL), |
| 263 | }; |
| 264 | |
| 265 | /* This list needs to be verified against actual 7x30 hardware requirements. */ |
| 266 | static 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 Paupore | 3f40f34 | 2011-08-10 18:52:16 -0700 | [diff] [blame] | 277 | PCOM_VREG_SMP(smps2, 28, NULL, 1300000, 1300000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 278 | 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 Paupore | 3f40f34 | 2011-08-10 18:52:16 -0700 | [diff] [blame] | 285 | PCOM_VREG_LDO(ldo06, 16, NULL, 3075000, 3400000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 286 | 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 Kumar | 82e5719 | 2011-11-30 12:41:32 +0530 | [diff] [blame] | 292 | PCOM_VREG_LDO(ldo13, 15, NULL, 2900000, 3050000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 293 | PCOM_VREG_LDO(ldo14, 24, NULL, 2850000, 2850000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 3f40f34 | 2011-08-10 18:52:16 -0700 | [diff] [blame] | 294 | PCOM_VREG_LDO(ldo15, 23, NULL, 3050000, 3100000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 295 | 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 Kumar | 1e718ed | 2011-12-08 15:26:09 +0530 | [diff] [blame] | 298 | PCOM_VREG_LDO(ldo19, 45, NULL, 2400000, 2500000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 3f40f34 | 2011-08-10 18:52:16 -0700 | [diff] [blame] | 299 | PCOM_VREG_LDO(ldo20, 38, NULL, 1500000, 1800000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 300 | PCOM_VREG_LDO(ldo21, 39, NULL, 1100000, 1100000, 0, -1, 0, 0, 0, 0), |
Pankaj Kumar | 82e5719 | 2011-11-30 12:41:32 +0530 | [diff] [blame] | 301 | PCOM_VREG_LDO(ldo22, 40, NULL, 1200000, 1300000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 302 | PCOM_VREG_LDO(ldo23, 22, NULL, 1350000, 1350000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 3f40f34 | 2011-08-10 18:52:16 -0700 | [diff] [blame] | 303 | PCOM_VREG_LDO(ldo24, 41, NULL, 1200000, 1200000, 0, -1, 0, 0, 0, 0), |
Justin Paupore | 637a25d | 2011-07-14 17:11:04 -0700 | [diff] [blame] | 304 | 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 | |
| 313 | struct proccomm_regulator_platform_data msm7x30_proccomm_regulator_data = { |
| 314 | .regs = msm7x30_pcom_vreg_info, |
| 315 | .nregs = ARRAY_SIZE(msm7x30_pcom_vreg_info) |
| 316 | }; |