.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (c) 2015, Sony Mobile Communications AB. |
---|
3 | 4 | * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. |
---|
4 | | - * |
---|
5 | | - * This program is free software; you can redistribute it and/or modify |
---|
6 | | - * it under the terms of the GNU General Public License version 2 and |
---|
7 | | - * only version 2 as published by the Free Software Foundation. |
---|
8 | | - * |
---|
9 | | - * This program is distributed in the hope that it will be useful, |
---|
10 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
11 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
12 | | - * GNU General Public License for more details. |
---|
13 | 5 | */ |
---|
14 | 6 | |
---|
15 | 7 | #include <linux/module.h> |
---|
.. | .. |
---|
32 | 24 | |
---|
33 | 25 | int is_enabled; |
---|
34 | 26 | int uV; |
---|
| 27 | + u32 load; |
---|
| 28 | + |
---|
| 29 | + unsigned int enabled_updated:1; |
---|
| 30 | + unsigned int uv_updated:1; |
---|
| 31 | + unsigned int load_updated:1; |
---|
35 | 32 | }; |
---|
36 | 33 | |
---|
37 | 34 | struct rpm_regulator_req { |
---|
.. | .. |
---|
44 | 41 | #define RPM_KEY_UV 0x00007675 /* "uv" */ |
---|
45 | 42 | #define RPM_KEY_MA 0x0000616d /* "ma" */ |
---|
46 | 43 | |
---|
47 | | -static int rpm_reg_write_active(struct qcom_rpm_reg *vreg, |
---|
48 | | - struct rpm_regulator_req *req, |
---|
49 | | - size_t size) |
---|
| 44 | +static int rpm_reg_write_active(struct qcom_rpm_reg *vreg) |
---|
50 | 45 | { |
---|
51 | | - return qcom_rpm_smd_write(vreg->rpm, |
---|
52 | | - QCOM_SMD_RPM_ACTIVE_STATE, |
---|
53 | | - vreg->type, |
---|
54 | | - vreg->id, |
---|
55 | | - req, size); |
---|
| 46 | + struct rpm_regulator_req req[3]; |
---|
| 47 | + int reqlen = 0; |
---|
| 48 | + int ret; |
---|
| 49 | + |
---|
| 50 | + if (vreg->enabled_updated) { |
---|
| 51 | + req[reqlen].key = cpu_to_le32(RPM_KEY_SWEN); |
---|
| 52 | + req[reqlen].nbytes = cpu_to_le32(sizeof(u32)); |
---|
| 53 | + req[reqlen].value = cpu_to_le32(vreg->is_enabled); |
---|
| 54 | + reqlen++; |
---|
| 55 | + } |
---|
| 56 | + |
---|
| 57 | + if (vreg->uv_updated && vreg->is_enabled) { |
---|
| 58 | + req[reqlen].key = cpu_to_le32(RPM_KEY_UV); |
---|
| 59 | + req[reqlen].nbytes = cpu_to_le32(sizeof(u32)); |
---|
| 60 | + req[reqlen].value = cpu_to_le32(vreg->uV); |
---|
| 61 | + reqlen++; |
---|
| 62 | + } |
---|
| 63 | + |
---|
| 64 | + if (vreg->load_updated && vreg->is_enabled) { |
---|
| 65 | + req[reqlen].key = cpu_to_le32(RPM_KEY_MA); |
---|
| 66 | + req[reqlen].nbytes = cpu_to_le32(sizeof(u32)); |
---|
| 67 | + req[reqlen].value = cpu_to_le32(vreg->load / 1000); |
---|
| 68 | + reqlen++; |
---|
| 69 | + } |
---|
| 70 | + |
---|
| 71 | + if (!reqlen) |
---|
| 72 | + return 0; |
---|
| 73 | + |
---|
| 74 | + ret = qcom_rpm_smd_write(vreg->rpm, QCOM_SMD_RPM_ACTIVE_STATE, |
---|
| 75 | + vreg->type, vreg->id, |
---|
| 76 | + req, sizeof(req[0]) * reqlen); |
---|
| 77 | + if (!ret) { |
---|
| 78 | + vreg->enabled_updated = 0; |
---|
| 79 | + vreg->uv_updated = 0; |
---|
| 80 | + vreg->load_updated = 0; |
---|
| 81 | + } |
---|
| 82 | + |
---|
| 83 | + return ret; |
---|
56 | 84 | } |
---|
57 | 85 | |
---|
58 | 86 | static int rpm_reg_enable(struct regulator_dev *rdev) |
---|
59 | 87 | { |
---|
60 | 88 | struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); |
---|
61 | | - struct rpm_regulator_req req; |
---|
62 | 89 | int ret; |
---|
63 | 90 | |
---|
64 | | - req.key = cpu_to_le32(RPM_KEY_SWEN); |
---|
65 | | - req.nbytes = cpu_to_le32(sizeof(u32)); |
---|
66 | | - req.value = cpu_to_le32(1); |
---|
| 91 | + vreg->is_enabled = 1; |
---|
| 92 | + vreg->enabled_updated = 1; |
---|
67 | 93 | |
---|
68 | | - ret = rpm_reg_write_active(vreg, &req, sizeof(req)); |
---|
69 | | - if (!ret) |
---|
70 | | - vreg->is_enabled = 1; |
---|
| 94 | + ret = rpm_reg_write_active(vreg); |
---|
| 95 | + if (ret) |
---|
| 96 | + vreg->is_enabled = 0; |
---|
71 | 97 | |
---|
72 | 98 | return ret; |
---|
73 | 99 | } |
---|
.. | .. |
---|
82 | 108 | static int rpm_reg_disable(struct regulator_dev *rdev) |
---|
83 | 109 | { |
---|
84 | 110 | struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); |
---|
85 | | - struct rpm_regulator_req req; |
---|
86 | 111 | int ret; |
---|
87 | 112 | |
---|
88 | | - req.key = cpu_to_le32(RPM_KEY_SWEN); |
---|
89 | | - req.nbytes = cpu_to_le32(sizeof(u32)); |
---|
90 | | - req.value = 0; |
---|
| 113 | + vreg->is_enabled = 0; |
---|
| 114 | + vreg->enabled_updated = 1; |
---|
91 | 115 | |
---|
92 | | - ret = rpm_reg_write_active(vreg, &req, sizeof(req)); |
---|
93 | | - if (!ret) |
---|
94 | | - vreg->is_enabled = 0; |
---|
| 116 | + ret = rpm_reg_write_active(vreg); |
---|
| 117 | + if (ret) |
---|
| 118 | + vreg->is_enabled = 1; |
---|
95 | 119 | |
---|
96 | 120 | return ret; |
---|
97 | 121 | } |
---|
.. | .. |
---|
109 | 133 | unsigned *selector) |
---|
110 | 134 | { |
---|
111 | 135 | struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); |
---|
112 | | - struct rpm_regulator_req req; |
---|
113 | | - int ret = 0; |
---|
| 136 | + int ret; |
---|
| 137 | + int old_uV = vreg->uV; |
---|
114 | 138 | |
---|
115 | | - req.key = cpu_to_le32(RPM_KEY_UV); |
---|
116 | | - req.nbytes = cpu_to_le32(sizeof(u32)); |
---|
117 | | - req.value = cpu_to_le32(min_uV); |
---|
| 139 | + vreg->uV = min_uV; |
---|
| 140 | + vreg->uv_updated = 1; |
---|
118 | 141 | |
---|
119 | | - ret = rpm_reg_write_active(vreg, &req, sizeof(req)); |
---|
120 | | - if (!ret) |
---|
121 | | - vreg->uV = min_uV; |
---|
| 142 | + ret = rpm_reg_write_active(vreg); |
---|
| 143 | + if (ret) |
---|
| 144 | + vreg->uV = old_uV; |
---|
122 | 145 | |
---|
123 | 146 | return ret; |
---|
124 | 147 | } |
---|
.. | .. |
---|
126 | 149 | static int rpm_reg_set_load(struct regulator_dev *rdev, int load_uA) |
---|
127 | 150 | { |
---|
128 | 151 | struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); |
---|
129 | | - struct rpm_regulator_req req; |
---|
| 152 | + u32 old_load = vreg->load; |
---|
| 153 | + int ret; |
---|
130 | 154 | |
---|
131 | | - req.key = cpu_to_le32(RPM_KEY_MA); |
---|
132 | | - req.nbytes = cpu_to_le32(sizeof(u32)); |
---|
133 | | - req.value = cpu_to_le32(load_uA / 1000); |
---|
| 155 | + vreg->load = load_uA; |
---|
| 156 | + vreg->load_updated = 1; |
---|
| 157 | + ret = rpm_reg_write_active(vreg); |
---|
| 158 | + if (ret) |
---|
| 159 | + vreg->load = old_load; |
---|
134 | 160 | |
---|
135 | | - return rpm_reg_write_active(vreg, &req, sizeof(req)); |
---|
| 161 | + return ret; |
---|
136 | 162 | } |
---|
137 | 163 | |
---|
138 | 164 | static const struct regulator_ops rpm_smps_ldo_ops = { |
---|
.. | .. |
---|
173 | 199 | .set_voltage = rpm_reg_set_voltage, |
---|
174 | 200 | }; |
---|
175 | 201 | |
---|
| 202 | +static const struct regulator_ops rpm_mp5496_ops = { |
---|
| 203 | + .enable = rpm_reg_enable, |
---|
| 204 | + .disable = rpm_reg_disable, |
---|
| 205 | + .is_enabled = rpm_reg_is_enabled, |
---|
| 206 | + .list_voltage = regulator_list_voltage_linear_range, |
---|
| 207 | + |
---|
| 208 | + .set_voltage = rpm_reg_set_voltage, |
---|
| 209 | +}; |
---|
| 210 | + |
---|
176 | 211 | static const struct regulator_desc pma8084_hfsmps = { |
---|
177 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 212 | + .linear_ranges = (struct linear_range[]) { |
---|
178 | 213 | REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), |
---|
179 | 214 | REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000), |
---|
180 | 215 | }, |
---|
.. | .. |
---|
184 | 219 | }; |
---|
185 | 220 | |
---|
186 | 221 | static const struct regulator_desc pma8084_ftsmps = { |
---|
187 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 222 | + .linear_ranges = (struct linear_range[]) { |
---|
188 | 223 | REGULATOR_LINEAR_RANGE(350000, 0, 184, 5000), |
---|
189 | 224 | REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000), |
---|
190 | 225 | }, |
---|
.. | .. |
---|
194 | 229 | }; |
---|
195 | 230 | |
---|
196 | 231 | static const struct regulator_desc pma8084_pldo = { |
---|
197 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 232 | + .linear_ranges = (struct linear_range[]) { |
---|
198 | 233 | REGULATOR_LINEAR_RANGE( 750000, 0, 63, 12500), |
---|
199 | 234 | REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000), |
---|
200 | 235 | REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000), |
---|
.. | .. |
---|
205 | 240 | }; |
---|
206 | 241 | |
---|
207 | 242 | static const struct regulator_desc pma8084_nldo = { |
---|
208 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 243 | + .linear_ranges = (struct linear_range[]) { |
---|
209 | 244 | REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500), |
---|
210 | 245 | }, |
---|
211 | 246 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
218 | 253 | }; |
---|
219 | 254 | |
---|
220 | 255 | static const struct regulator_desc pm8x41_hfsmps = { |
---|
221 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 256 | + .linear_ranges = (struct linear_range[]) { |
---|
222 | 257 | REGULATOR_LINEAR_RANGE( 375000, 0, 95, 12500), |
---|
223 | 258 | REGULATOR_LINEAR_RANGE(1575000, 96, 158, 25000), |
---|
224 | 259 | }, |
---|
.. | .. |
---|
228 | 263 | }; |
---|
229 | 264 | |
---|
230 | 265 | static const struct regulator_desc pm8841_ftsmps = { |
---|
231 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 266 | + .linear_ranges = (struct linear_range[]) { |
---|
232 | 267 | REGULATOR_LINEAR_RANGE(350000, 0, 184, 5000), |
---|
233 | 268 | REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000), |
---|
234 | 269 | }, |
---|
.. | .. |
---|
238 | 273 | }; |
---|
239 | 274 | |
---|
240 | 275 | static const struct regulator_desc pm8941_boost = { |
---|
241 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 276 | + .linear_ranges = (struct linear_range[]) { |
---|
242 | 277 | REGULATOR_LINEAR_RANGE(4000000, 0, 30, 50000), |
---|
243 | 278 | }, |
---|
244 | 279 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
247 | 282 | }; |
---|
248 | 283 | |
---|
249 | 284 | static const struct regulator_desc pm8941_pldo = { |
---|
250 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 285 | + .linear_ranges = (struct linear_range[]) { |
---|
251 | 286 | REGULATOR_LINEAR_RANGE( 750000, 0, 63, 12500), |
---|
252 | 287 | REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000), |
---|
253 | 288 | REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000), |
---|
.. | .. |
---|
258 | 293 | }; |
---|
259 | 294 | |
---|
260 | 295 | static const struct regulator_desc pm8941_nldo = { |
---|
261 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 296 | + .linear_ranges = (struct linear_range[]) { |
---|
262 | 297 | REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500), |
---|
263 | 298 | }, |
---|
264 | 299 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
277 | 312 | }; |
---|
278 | 313 | |
---|
279 | 314 | static const struct regulator_desc pm8916_pldo = { |
---|
280 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
281 | | - REGULATOR_LINEAR_RANGE(750000, 0, 208, 12500), |
---|
| 315 | + .linear_ranges = (struct linear_range[]) { |
---|
| 316 | + REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500), |
---|
282 | 317 | }, |
---|
283 | 318 | .n_linear_ranges = 1, |
---|
284 | | - .n_voltages = 209, |
---|
| 319 | + .n_voltages = 128, |
---|
285 | 320 | .ops = &rpm_smps_ldo_ops, |
---|
286 | 321 | }; |
---|
287 | 322 | |
---|
288 | 323 | static const struct regulator_desc pm8916_nldo = { |
---|
289 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 324 | + .linear_ranges = (struct linear_range[]) { |
---|
290 | 325 | REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500), |
---|
291 | 326 | }, |
---|
292 | 327 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
295 | 330 | }; |
---|
296 | 331 | |
---|
297 | 332 | static const struct regulator_desc pm8916_buck_lvo_smps = { |
---|
298 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 333 | + .linear_ranges = (struct linear_range[]) { |
---|
299 | 334 | REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), |
---|
300 | 335 | REGULATOR_LINEAR_RANGE(750000, 96, 127, 25000), |
---|
301 | 336 | }, |
---|
.. | .. |
---|
305 | 340 | }; |
---|
306 | 341 | |
---|
307 | 342 | static const struct regulator_desc pm8916_buck_hvo_smps = { |
---|
308 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 343 | + .linear_ranges = (struct linear_range[]) { |
---|
309 | 344 | REGULATOR_LINEAR_RANGE(1550000, 0, 31, 25000), |
---|
310 | 345 | }, |
---|
311 | 346 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
313 | 348 | .ops = &rpm_smps_ldo_ops, |
---|
314 | 349 | }; |
---|
315 | 350 | |
---|
| 351 | +static const struct regulator_desc pm8950_hfsmps = { |
---|
| 352 | + .linear_ranges = (struct linear_range[]) { |
---|
| 353 | + REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), |
---|
| 354 | + REGULATOR_LINEAR_RANGE(1550000, 96, 127, 25000), |
---|
| 355 | + }, |
---|
| 356 | + .n_linear_ranges = 2, |
---|
| 357 | + .n_voltages = 128, |
---|
| 358 | + .ops = &rpm_smps_ldo_ops, |
---|
| 359 | +}; |
---|
| 360 | + |
---|
| 361 | +static const struct regulator_desc pm8950_ftsmps2p5 = { |
---|
| 362 | + .linear_ranges = (struct linear_range[]) { |
---|
| 363 | + REGULATOR_LINEAR_RANGE(80000, 0, 255, 5000), |
---|
| 364 | + REGULATOR_LINEAR_RANGE(160000, 256, 460, 10000), |
---|
| 365 | + }, |
---|
| 366 | + .n_linear_ranges = 2, |
---|
| 367 | + .n_voltages = 461, |
---|
| 368 | + .ops = &rpm_smps_ldo_ops, |
---|
| 369 | +}; |
---|
| 370 | + |
---|
| 371 | +static const struct regulator_desc pm8950_ult_nldo = { |
---|
| 372 | + .linear_ranges = (struct linear_range[]) { |
---|
| 373 | + REGULATOR_LINEAR_RANGE(375000, 0, 202, 12500), |
---|
| 374 | + }, |
---|
| 375 | + .n_linear_ranges = 1, |
---|
| 376 | + .n_voltages = 203, |
---|
| 377 | + .ops = &rpm_smps_ldo_ops, |
---|
| 378 | +}; |
---|
| 379 | + |
---|
| 380 | +static const struct regulator_desc pm8950_ult_pldo = { |
---|
| 381 | + .linear_ranges = (struct linear_range[]) { |
---|
| 382 | + REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500), |
---|
| 383 | + }, |
---|
| 384 | + .n_linear_ranges = 1, |
---|
| 385 | + .n_voltages = 128, |
---|
| 386 | + .ops = &rpm_smps_ldo_ops, |
---|
| 387 | +}; |
---|
| 388 | + |
---|
| 389 | +static const struct regulator_desc pm8950_pldo_lv = { |
---|
| 390 | + .linear_ranges = (struct linear_range[]) { |
---|
| 391 | + REGULATOR_LINEAR_RANGE(1500000, 0, 16, 25000), |
---|
| 392 | + }, |
---|
| 393 | + .n_linear_ranges = 1, |
---|
| 394 | + .n_voltages = 17, |
---|
| 395 | + .ops = &rpm_smps_ldo_ops, |
---|
| 396 | +}; |
---|
| 397 | + |
---|
| 398 | +static const struct regulator_desc pm8950_pldo = { |
---|
| 399 | + .linear_ranges = (struct linear_range[]) { |
---|
| 400 | + REGULATOR_LINEAR_RANGE(975000, 0, 164, 12500), |
---|
| 401 | + }, |
---|
| 402 | + .n_linear_ranges = 1, |
---|
| 403 | + .n_voltages = 165, |
---|
| 404 | + .ops = &rpm_smps_ldo_ops, |
---|
| 405 | +}; |
---|
| 406 | + |
---|
| 407 | +static const struct regulator_desc pm8953_lnldo = { |
---|
| 408 | + .linear_ranges = (struct linear_range[]) { |
---|
| 409 | + REGULATOR_LINEAR_RANGE(1380000, 8, 15, 120000), |
---|
| 410 | + REGULATOR_LINEAR_RANGE(690000, 0, 7, 60000), |
---|
| 411 | + }, |
---|
| 412 | + .n_linear_ranges = 2, |
---|
| 413 | + .n_voltages = 16, |
---|
| 414 | + .ops = &rpm_smps_ldo_ops, |
---|
| 415 | +}; |
---|
| 416 | + |
---|
| 417 | +static const struct regulator_desc pm8953_ult_nldo = { |
---|
| 418 | + .linear_ranges = (struct linear_range[]) { |
---|
| 419 | + REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500), |
---|
| 420 | + }, |
---|
| 421 | + .n_linear_ranges = 1, |
---|
| 422 | + .n_voltages = 94, |
---|
| 423 | + .ops = &rpm_smps_ldo_ops, |
---|
| 424 | +}; |
---|
| 425 | + |
---|
316 | 426 | static const struct regulator_desc pm8994_hfsmps = { |
---|
317 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 427 | + .linear_ranges = (struct linear_range[]) { |
---|
318 | 428 | REGULATOR_LINEAR_RANGE( 375000, 0, 95, 12500), |
---|
319 | 429 | REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000), |
---|
320 | 430 | }, |
---|
.. | .. |
---|
324 | 434 | }; |
---|
325 | 435 | |
---|
326 | 436 | static const struct regulator_desc pm8994_ftsmps = { |
---|
327 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 437 | + .linear_ranges = (struct linear_range[]) { |
---|
328 | 438 | REGULATOR_LINEAR_RANGE(350000, 0, 199, 5000), |
---|
329 | 439 | REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000), |
---|
330 | 440 | }, |
---|
.. | .. |
---|
334 | 444 | }; |
---|
335 | 445 | |
---|
336 | 446 | static const struct regulator_desc pm8994_nldo = { |
---|
337 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 447 | + .linear_ranges = (struct linear_range[]) { |
---|
338 | 448 | REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500), |
---|
339 | 449 | }, |
---|
340 | 450 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
343 | 453 | }; |
---|
344 | 454 | |
---|
345 | 455 | static const struct regulator_desc pm8994_pldo = { |
---|
346 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 456 | + .linear_ranges = (struct linear_range[]) { |
---|
347 | 457 | REGULATOR_LINEAR_RANGE( 750000, 0, 63, 12500), |
---|
348 | 458 | REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000), |
---|
349 | 459 | REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000), |
---|
.. | .. |
---|
363 | 473 | .ops = &rpm_smps_ldo_ops_fixed, |
---|
364 | 474 | }; |
---|
365 | 475 | |
---|
| 476 | +static const struct regulator_desc pmi8994_ftsmps = { |
---|
| 477 | + .linear_ranges = (struct linear_range[]) { |
---|
| 478 | + REGULATOR_LINEAR_RANGE(350000, 0, 199, 5000), |
---|
| 479 | + REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000), |
---|
| 480 | + }, |
---|
| 481 | + .n_linear_ranges = 2, |
---|
| 482 | + .n_voltages = 350, |
---|
| 483 | + .ops = &rpm_smps_ldo_ops, |
---|
| 484 | +}; |
---|
| 485 | + |
---|
| 486 | +static const struct regulator_desc pmi8994_hfsmps = { |
---|
| 487 | + .linear_ranges = (struct linear_range[]) { |
---|
| 488 | + REGULATOR_LINEAR_RANGE(350000, 0, 80, 12500), |
---|
| 489 | + REGULATOR_LINEAR_RANGE(700000, 81, 141, 25000), |
---|
| 490 | + }, |
---|
| 491 | + .n_linear_ranges = 2, |
---|
| 492 | + .n_voltages = 142, |
---|
| 493 | + .ops = &rpm_smps_ldo_ops, |
---|
| 494 | +}; |
---|
| 495 | + |
---|
| 496 | +static const struct regulator_desc pmi8994_bby = { |
---|
| 497 | + .linear_ranges = (struct linear_range[]) { |
---|
| 498 | + REGULATOR_LINEAR_RANGE(3000000, 0, 44, 50000), |
---|
| 499 | + }, |
---|
| 500 | + .n_linear_ranges = 1, |
---|
| 501 | + .n_voltages = 45, |
---|
| 502 | + .ops = &rpm_bob_ops, |
---|
| 503 | +}; |
---|
| 504 | + |
---|
366 | 505 | static const struct regulator_desc pm8998_ftsmps = { |
---|
367 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 506 | + .linear_ranges = (struct linear_range[]) { |
---|
368 | 507 | REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), |
---|
369 | 508 | }, |
---|
370 | 509 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
373 | 512 | }; |
---|
374 | 513 | |
---|
375 | 514 | static const struct regulator_desc pm8998_hfsmps = { |
---|
376 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 515 | + .linear_ranges = (struct linear_range[]) { |
---|
377 | 516 | REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), |
---|
378 | 517 | }, |
---|
379 | 518 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
382 | 521 | }; |
---|
383 | 522 | |
---|
384 | 523 | static const struct regulator_desc pm8998_nldo = { |
---|
385 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 524 | + .linear_ranges = (struct linear_range[]) { |
---|
386 | 525 | REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), |
---|
387 | 526 | }, |
---|
388 | 527 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
391 | 530 | }; |
---|
392 | 531 | |
---|
393 | 532 | static const struct regulator_desc pm8998_pldo = { |
---|
394 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 533 | + .linear_ranges = (struct linear_range[]) { |
---|
395 | 534 | REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), |
---|
396 | 535 | }, |
---|
397 | 536 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
400 | 539 | }; |
---|
401 | 540 | |
---|
402 | 541 | static const struct regulator_desc pm8998_pldo_lv = { |
---|
403 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 542 | + .linear_ranges = (struct linear_range[]) { |
---|
404 | 543 | REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), |
---|
405 | 544 | }, |
---|
406 | 545 | .n_linear_ranges = 1, |
---|
.. | .. |
---|
413 | 552 | }; |
---|
414 | 553 | |
---|
415 | 554 | static const struct regulator_desc pmi8998_bob = { |
---|
416 | | - .linear_ranges = (struct regulator_linear_range[]) { |
---|
| 555 | + .linear_ranges = (struct linear_range[]) { |
---|
417 | 556 | REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), |
---|
418 | 557 | }, |
---|
419 | 558 | .n_linear_ranges = 1, |
---|
420 | 559 | .n_voltages = 84, |
---|
421 | 560 | .ops = &rpm_bob_ops, |
---|
| 561 | +}; |
---|
| 562 | + |
---|
| 563 | +static const struct regulator_desc pm660_ftsmps = { |
---|
| 564 | + .linear_ranges = (struct linear_range[]) { |
---|
| 565 | + REGULATOR_LINEAR_RANGE(355000, 0, 199, 5000), |
---|
| 566 | + }, |
---|
| 567 | + .n_linear_ranges = 1, |
---|
| 568 | + .n_voltages = 200, |
---|
| 569 | + .ops = &rpm_smps_ldo_ops, |
---|
| 570 | +}; |
---|
| 571 | + |
---|
| 572 | +static const struct regulator_desc pm660_hfsmps = { |
---|
| 573 | + .linear_ranges = (struct linear_range[]) { |
---|
| 574 | + REGULATOR_LINEAR_RANGE(320000, 0, 216, 8000), |
---|
| 575 | + }, |
---|
| 576 | + .n_linear_ranges = 1, |
---|
| 577 | + .n_voltages = 217, |
---|
| 578 | + .ops = &rpm_smps_ldo_ops, |
---|
| 579 | +}; |
---|
| 580 | + |
---|
| 581 | +static const struct regulator_desc pm660_ht_nldo = { |
---|
| 582 | + .linear_ranges = (struct linear_range[]) { |
---|
| 583 | + REGULATOR_LINEAR_RANGE(312000, 0, 124, 8000), |
---|
| 584 | + }, |
---|
| 585 | + .n_linear_ranges = 1, |
---|
| 586 | + .n_voltages = 125, |
---|
| 587 | + .ops = &rpm_smps_ldo_ops, |
---|
| 588 | +}; |
---|
| 589 | + |
---|
| 590 | +static const struct regulator_desc pm660_ht_lvpldo = { |
---|
| 591 | + .linear_ranges = (struct linear_range[]) { |
---|
| 592 | + REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), |
---|
| 593 | + }, |
---|
| 594 | + .n_linear_ranges = 1, |
---|
| 595 | + .n_voltages = 63, |
---|
| 596 | + .ops = &rpm_smps_ldo_ops, |
---|
| 597 | +}; |
---|
| 598 | + |
---|
| 599 | +static const struct regulator_desc pm660_nldo660 = { |
---|
| 600 | + .linear_ranges = (struct linear_range[]) { |
---|
| 601 | + REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), |
---|
| 602 | + }, |
---|
| 603 | + .n_linear_ranges = 1, |
---|
| 604 | + .n_voltages = 124, |
---|
| 605 | + .ops = &rpm_smps_ldo_ops, |
---|
| 606 | +}; |
---|
| 607 | + |
---|
| 608 | +static const struct regulator_desc pm660_pldo660 = { |
---|
| 609 | + .linear_ranges = (struct linear_range[]) { |
---|
| 610 | + REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), |
---|
| 611 | + }, |
---|
| 612 | + .n_linear_ranges = 1, |
---|
| 613 | + .n_voltages = 256, |
---|
| 614 | + .ops = &rpm_smps_ldo_ops, |
---|
| 615 | +}; |
---|
| 616 | + |
---|
| 617 | +static const struct regulator_desc pm660l_bob = { |
---|
| 618 | + .linear_ranges = (struct linear_range[]) { |
---|
| 619 | + REGULATOR_LINEAR_RANGE(1800000, 0, 84, 32000), |
---|
| 620 | + }, |
---|
| 621 | + .n_linear_ranges = 1, |
---|
| 622 | + .n_voltages = 85, |
---|
| 623 | + .ops = &rpm_bob_ops, |
---|
| 624 | +}; |
---|
| 625 | + |
---|
| 626 | +static const struct regulator_desc pms405_hfsmps3 = { |
---|
| 627 | + .linear_ranges = (struct linear_range[]) { |
---|
| 628 | + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), |
---|
| 629 | + }, |
---|
| 630 | + .n_linear_ranges = 1, |
---|
| 631 | + .n_voltages = 216, |
---|
| 632 | + .ops = &rpm_smps_ldo_ops, |
---|
| 633 | +}; |
---|
| 634 | + |
---|
| 635 | +static const struct regulator_desc pms405_nldo300 = { |
---|
| 636 | + .linear_ranges = (struct linear_range[]) { |
---|
| 637 | + REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), |
---|
| 638 | + }, |
---|
| 639 | + .n_linear_ranges = 1, |
---|
| 640 | + .n_voltages = 128, |
---|
| 641 | + .ops = &rpm_smps_ldo_ops, |
---|
| 642 | +}; |
---|
| 643 | + |
---|
| 644 | +static const struct regulator_desc pms405_nldo1200 = { |
---|
| 645 | + .linear_ranges = (struct linear_range[]) { |
---|
| 646 | + REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), |
---|
| 647 | + }, |
---|
| 648 | + .n_linear_ranges = 1, |
---|
| 649 | + .n_voltages = 128, |
---|
| 650 | + .ops = &rpm_smps_ldo_ops, |
---|
| 651 | +}; |
---|
| 652 | + |
---|
| 653 | +static const struct regulator_desc pms405_pldo50 = { |
---|
| 654 | + .linear_ranges = (struct linear_range[]) { |
---|
| 655 | + REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000), |
---|
| 656 | + }, |
---|
| 657 | + .n_linear_ranges = 1, |
---|
| 658 | + .n_voltages = 129, |
---|
| 659 | + .ops = &rpm_smps_ldo_ops, |
---|
| 660 | +}; |
---|
| 661 | + |
---|
| 662 | +static const struct regulator_desc pms405_pldo150 = { |
---|
| 663 | + .linear_ranges = (struct linear_range[]) { |
---|
| 664 | + REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000), |
---|
| 665 | + }, |
---|
| 666 | + .n_linear_ranges = 1, |
---|
| 667 | + .n_voltages = 129, |
---|
| 668 | + .ops = &rpm_smps_ldo_ops, |
---|
| 669 | +}; |
---|
| 670 | + |
---|
| 671 | +static const struct regulator_desc pms405_pldo600 = { |
---|
| 672 | + .linear_ranges = (struct linear_range[]) { |
---|
| 673 | + REGULATOR_LINEAR_RANGE(1256000, 0, 98, 8000), |
---|
| 674 | + }, |
---|
| 675 | + .n_linear_ranges = 1, |
---|
| 676 | + .n_voltages = 99, |
---|
| 677 | + .ops = &rpm_smps_ldo_ops, |
---|
| 678 | +}; |
---|
| 679 | + |
---|
| 680 | +static const struct regulator_desc mp5496_smpa2 = { |
---|
| 681 | + .linear_ranges = (struct linear_range[]) { |
---|
| 682 | + REGULATOR_LINEAR_RANGE(725000, 0, 27, 12500), |
---|
| 683 | + }, |
---|
| 684 | + .n_linear_ranges = 1, |
---|
| 685 | + .n_voltages = 28, |
---|
| 686 | + .ops = &rpm_mp5496_ops, |
---|
| 687 | +}; |
---|
| 688 | + |
---|
| 689 | +static const struct regulator_desc mp5496_ldoa2 = { |
---|
| 690 | + .linear_ranges = (struct linear_range[]) { |
---|
| 691 | + REGULATOR_LINEAR_RANGE(1800000, 0, 60, 25000), |
---|
| 692 | + }, |
---|
| 693 | + .n_linear_ranges = 1, |
---|
| 694 | + .n_voltages = 61, |
---|
| 695 | + .ops = &rpm_mp5496_ops, |
---|
422 | 696 | }; |
---|
423 | 697 | |
---|
424 | 698 | struct rpm_regulator_data { |
---|
.. | .. |
---|
427 | 701 | u32 id; |
---|
428 | 702 | const struct regulator_desc *desc; |
---|
429 | 703 | const char *supply; |
---|
| 704 | +}; |
---|
| 705 | + |
---|
| 706 | +static const struct rpm_regulator_data rpm_mp5496_regulators[] = { |
---|
| 707 | + { "s2", QCOM_SMD_RPM_SMPA, 2, &mp5496_smpa2, "s2" }, |
---|
| 708 | + { "l2", QCOM_SMD_RPM_LDOA, 2, &mp5496_ldoa2, "l2" }, |
---|
| 709 | + {} |
---|
430 | 710 | }; |
---|
431 | 711 | |
---|
432 | 712 | static const struct rpm_regulator_data rpm_pm8841_regulators[] = { |
---|
.. | .. |
---|
559 | 839 | {} |
---|
560 | 840 | }; |
---|
561 | 841 | |
---|
| 842 | +static const struct rpm_regulator_data rpm_pm8950_regulators[] = { |
---|
| 843 | + { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8950_hfsmps, "vdd_s1" }, |
---|
| 844 | + { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8950_hfsmps, "vdd_s2" }, |
---|
| 845 | + { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8950_hfsmps, "vdd_s3" }, |
---|
| 846 | + { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8950_hfsmps, "vdd_s4" }, |
---|
| 847 | + /* S5 is managed via SPMI. */ |
---|
| 848 | + { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_hfsmps, "vdd_s6" }, |
---|
| 849 | + |
---|
| 850 | + { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8950_ult_nldo, "vdd_l1_l19" }, |
---|
| 851 | + { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8950_ult_nldo, "vdd_l2_l23" }, |
---|
| 852 | + { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8950_ult_nldo, "vdd_l3" }, |
---|
| 853 | + /* L4 seems not to exist. */ |
---|
| 854 | + { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" }, |
---|
| 855 | + { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" }, |
---|
| 856 | + { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" }, |
---|
| 857 | + { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, |
---|
| 858 | + { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, |
---|
| 859 | + { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_nldo, "vdd_l9_l10_l13_l14_l15_l18"}, |
---|
| 860 | + { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, |
---|
| 861 | + { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, |
---|
| 862 | + { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, |
---|
| 863 | + { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, |
---|
| 864 | + { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, |
---|
| 865 | + { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l5_l6_l7_l16" }, |
---|
| 866 | + { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, |
---|
| 867 | + /* L18 seems not to exist. */ |
---|
| 868 | + { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8950_pldo, "vdd_l1_l19" }, |
---|
| 869 | + /* L20 & L21 seem not to exist. */ |
---|
| 870 | + { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_pldo, "vdd_l8_l11_l12_l17_l22" }, |
---|
| 871 | + { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8950_pldo, "vdd_l2_l23" }, |
---|
| 872 | + {} |
---|
| 873 | +}; |
---|
| 874 | + |
---|
| 875 | +static const struct rpm_regulator_data rpm_pm8953_regulators[] = { |
---|
| 876 | + { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8998_hfsmps, "vdd_s1" }, |
---|
| 877 | + { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8998_hfsmps, "vdd_s2" }, |
---|
| 878 | + { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8998_hfsmps, "vdd_s3" }, |
---|
| 879 | + { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8998_hfsmps, "vdd_s4" }, |
---|
| 880 | + { "s5", QCOM_SMD_RPM_SMPA, 5, &pm8950_ftsmps2p5, "vdd_s5" }, |
---|
| 881 | + { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_ftsmps2p5, "vdd_s6" }, |
---|
| 882 | + { "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_hfsmps, "vdd_s7" }, |
---|
| 883 | + |
---|
| 884 | + { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8953_ult_nldo, "vdd_l1" }, |
---|
| 885 | + { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8953_ult_nldo, "vdd_l2_l3" }, |
---|
| 886 | + { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8953_ult_nldo, "vdd_l2_l3" }, |
---|
| 887 | + { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, |
---|
| 888 | + { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, |
---|
| 889 | + { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, |
---|
| 890 | + { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, |
---|
| 891 | + { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, |
---|
| 892 | + { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, |
---|
| 893 | + { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, |
---|
| 894 | + { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, |
---|
| 895 | + { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, |
---|
| 896 | + { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, |
---|
| 897 | + { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, |
---|
| 898 | + { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, |
---|
| 899 | + { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, |
---|
| 900 | + { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, |
---|
| 901 | + { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, |
---|
| 902 | + { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8953_ult_nldo, "vdd_l4_l5_l6_l7_l16_l19" }, |
---|
| 903 | + { "l20", QCOM_SMD_RPM_LDOA, 20, &pm8953_lnldo, "vdd_l20" }, |
---|
| 904 | + { "l21", QCOM_SMD_RPM_LDOA, 21, &pm8953_lnldo, "vdd_l21" }, |
---|
| 905 | + { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, |
---|
| 906 | + { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8953_ult_nldo, "vdd_l23" }, |
---|
| 907 | + {} |
---|
| 908 | +}; |
---|
| 909 | + |
---|
562 | 910 | static const struct rpm_regulator_data rpm_pm8994_regulators[] = { |
---|
563 | 911 | { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8994_ftsmps, "vdd_s1" }, |
---|
564 | 912 | { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8994_ftsmps, "vdd_s2" }, |
---|
.. | .. |
---|
607 | 955 | { "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8994_switch, "vdd_lvs1_2" }, |
---|
608 | 956 | { "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8994_switch, "vdd_lvs1_2" }, |
---|
609 | 957 | |
---|
| 958 | + {} |
---|
| 959 | +}; |
---|
| 960 | + |
---|
| 961 | +static const struct rpm_regulator_data rpm_pmi8994_regulators[] = { |
---|
| 962 | + { "s1", QCOM_SMD_RPM_SMPB, 1, &pmi8994_ftsmps, "vdd_s1" }, |
---|
| 963 | + { "s2", QCOM_SMD_RPM_SMPB, 2, &pmi8994_hfsmps, "vdd_s2" }, |
---|
| 964 | + { "s3", QCOM_SMD_RPM_SMPB, 3, &pmi8994_hfsmps, "vdd_s3" }, |
---|
| 965 | + { "boost-bypass", QCOM_SMD_RPM_BBYB, 1, &pmi8994_bby, "vdd_bst_byp" }, |
---|
610 | 966 | {} |
---|
611 | 967 | }; |
---|
612 | 968 | |
---|
.. | .. |
---|
662 | 1018 | {} |
---|
663 | 1019 | }; |
---|
664 | 1020 | |
---|
| 1021 | +static const struct rpm_regulator_data rpm_pm660_regulators[] = { |
---|
| 1022 | + { "s1", QCOM_SMD_RPM_SMPA, 1, &pm660_ftsmps, "vdd_s1" }, |
---|
| 1023 | + { "s2", QCOM_SMD_RPM_SMPA, 2, &pm660_ftsmps, "vdd_s2" }, |
---|
| 1024 | + { "s3", QCOM_SMD_RPM_SMPA, 3, &pm660_ftsmps, "vdd_s3" }, |
---|
| 1025 | + { "s4", QCOM_SMD_RPM_SMPA, 4, &pm660_hfsmps, "vdd_s4" }, |
---|
| 1026 | + { "s5", QCOM_SMD_RPM_SMPA, 5, &pm660_hfsmps, "vdd_s5" }, |
---|
| 1027 | + { "s6", QCOM_SMD_RPM_SMPA, 6, &pm660_hfsmps, "vdd_s6" }, |
---|
| 1028 | + { "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l6_l7" }, |
---|
| 1029 | + { "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_ht_nldo, "vdd_l2_l3" }, |
---|
| 1030 | + { "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l2_l3" }, |
---|
| 1031 | + /* l4 is unaccessible on PM660 */ |
---|
| 1032 | + { "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_ht_nldo, "vdd_l5" }, |
---|
| 1033 | + { "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_ht_nldo, "vdd_l1_l6_l7" }, |
---|
| 1034 | + { "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_ht_nldo, "vdd_l1_l6_l7" }, |
---|
| 1035 | + { "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1036 | + { "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1037 | + { "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1038 | + { "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1039 | + { "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1040 | + { "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1041 | + { "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, |
---|
| 1042 | + { "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, |
---|
| 1043 | + { "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, |
---|
| 1044 | + { "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, |
---|
| 1045 | + { "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, |
---|
| 1046 | + { "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, |
---|
| 1047 | + { } |
---|
| 1048 | +}; |
---|
| 1049 | + |
---|
| 1050 | +static const struct rpm_regulator_data rpm_pm660l_regulators[] = { |
---|
| 1051 | + { "s1", QCOM_SMD_RPM_SMPB, 1, &pm660_ftsmps, "vdd_s1" }, |
---|
| 1052 | + { "s2", QCOM_SMD_RPM_SMPB, 2, &pm660_ftsmps, "vdd_s2" }, |
---|
| 1053 | + { "s3", QCOM_SMD_RPM_RWCX, 0, &pm660_ftsmps, "vdd_s3_s4" }, |
---|
| 1054 | + { "s5", QCOM_SMD_RPM_RWMX, 0, &pm660_ftsmps, "vdd_s5" }, |
---|
| 1055 | + { "l1", QCOM_SMD_RPM_LDOB, 1, &pm660_nldo660, "vdd_l1_l9_l10" }, |
---|
| 1056 | + { "l2", QCOM_SMD_RPM_LDOB, 2, &pm660_pldo660, "vdd_l2" }, |
---|
| 1057 | + { "l3", QCOM_SMD_RPM_LDOB, 3, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, |
---|
| 1058 | + { "l4", QCOM_SMD_RPM_LDOB, 4, &pm660_pldo660, "vdd_l4_l6" }, |
---|
| 1059 | + { "l5", QCOM_SMD_RPM_LDOB, 5, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, |
---|
| 1060 | + { "l6", QCOM_SMD_RPM_LDOB, 6, &pm660_pldo660, "vdd_l4_l6" }, |
---|
| 1061 | + { "l7", QCOM_SMD_RPM_LDOB, 7, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, |
---|
| 1062 | + { "l8", QCOM_SMD_RPM_LDOB, 8, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, |
---|
| 1063 | + { "l9", QCOM_SMD_RPM_RWLC, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" }, |
---|
| 1064 | + { "l10", QCOM_SMD_RPM_RWLM, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" }, |
---|
| 1065 | + { "bob", QCOM_SMD_RPM_BOBB, 1, &pm660l_bob, "vdd_bob", }, |
---|
| 1066 | + { } |
---|
| 1067 | +}; |
---|
| 1068 | + |
---|
| 1069 | +static const struct rpm_regulator_data rpm_pms405_regulators[] = { |
---|
| 1070 | + { "s1", QCOM_SMD_RPM_SMPA, 1, &pms405_hfsmps3, "vdd_s1" }, |
---|
| 1071 | + { "s2", QCOM_SMD_RPM_SMPA, 2, &pms405_hfsmps3, "vdd_s2" }, |
---|
| 1072 | + { "s3", QCOM_SMD_RPM_SMPA, 3, &pms405_hfsmps3, "vdd_s3" }, |
---|
| 1073 | + { "s4", QCOM_SMD_RPM_SMPA, 4, &pms405_hfsmps3, "vdd_s4" }, |
---|
| 1074 | + { "s5", QCOM_SMD_RPM_SMPA, 5, &pms405_hfsmps3, "vdd_s5" }, |
---|
| 1075 | + { "l1", QCOM_SMD_RPM_LDOA, 1, &pms405_nldo1200, "vdd_l1_l2" }, |
---|
| 1076 | + { "l2", QCOM_SMD_RPM_LDOA, 2, &pms405_nldo1200, "vdd_l1_l2" }, |
---|
| 1077 | + { "l3", QCOM_SMD_RPM_LDOA, 3, &pms405_nldo1200, "vdd_l3_l8" }, |
---|
| 1078 | + { "l4", QCOM_SMD_RPM_LDOA, 4, &pms405_nldo300, "vdd_l4" }, |
---|
| 1079 | + { "l5", QCOM_SMD_RPM_LDOA, 5, &pms405_pldo600, "vdd_l5_l6" }, |
---|
| 1080 | + { "l6", QCOM_SMD_RPM_LDOA, 6, &pms405_pldo600, "vdd_l5_l6" }, |
---|
| 1081 | + { "l7", QCOM_SMD_RPM_LDOA, 7, &pms405_pldo150, "vdd_l7" }, |
---|
| 1082 | + { "l8", QCOM_SMD_RPM_LDOA, 8, &pms405_nldo1200, "vdd_l3_l8" }, |
---|
| 1083 | + { "l9", QCOM_SMD_RPM_LDOA, 9, &pms405_nldo1200, "vdd_l9" }, |
---|
| 1084 | + { "l10", QCOM_SMD_RPM_LDOA, 10, &pms405_pldo50, "vdd_l10_l11_l12_l13" }, |
---|
| 1085 | + { "l11", QCOM_SMD_RPM_LDOA, 11, &pms405_pldo150, "vdd_l10_l11_l12_l13" }, |
---|
| 1086 | + { "l12", QCOM_SMD_RPM_LDOA, 12, &pms405_pldo150, "vdd_l10_l11_l12_l13" }, |
---|
| 1087 | + { "l13", QCOM_SMD_RPM_LDOA, 13, &pms405_pldo150, "vdd_l10_l11_l12_l13" }, |
---|
| 1088 | + {} |
---|
| 1089 | +}; |
---|
| 1090 | + |
---|
665 | 1091 | static const struct of_device_id rpm_of_match[] = { |
---|
| 1092 | + { .compatible = "qcom,rpm-mp5496-regulators", .data = &rpm_mp5496_regulators }, |
---|
666 | 1093 | { .compatible = "qcom,rpm-pm8841-regulators", .data = &rpm_pm8841_regulators }, |
---|
667 | 1094 | { .compatible = "qcom,rpm-pm8916-regulators", .data = &rpm_pm8916_regulators }, |
---|
668 | 1095 | { .compatible = "qcom,rpm-pm8941-regulators", .data = &rpm_pm8941_regulators }, |
---|
| 1096 | + { .compatible = "qcom,rpm-pm8950-regulators", .data = &rpm_pm8950_regulators }, |
---|
| 1097 | + { .compatible = "qcom,rpm-pm8953-regulators", .data = &rpm_pm8953_regulators }, |
---|
669 | 1098 | { .compatible = "qcom,rpm-pm8994-regulators", .data = &rpm_pm8994_regulators }, |
---|
670 | 1099 | { .compatible = "qcom,rpm-pm8998-regulators", .data = &rpm_pm8998_regulators }, |
---|
| 1100 | + { .compatible = "qcom,rpm-pm660-regulators", .data = &rpm_pm660_regulators }, |
---|
| 1101 | + { .compatible = "qcom,rpm-pm660l-regulators", .data = &rpm_pm660l_regulators }, |
---|
671 | 1102 | { .compatible = "qcom,rpm-pma8084-regulators", .data = &rpm_pma8084_regulators }, |
---|
| 1103 | + { .compatible = "qcom,rpm-pmi8994-regulators", .data = &rpm_pmi8994_regulators }, |
---|
672 | 1104 | { .compatible = "qcom,rpm-pmi8998-regulators", .data = &rpm_pmi8998_regulators }, |
---|
| 1105 | + { .compatible = "qcom,rpm-pms405-regulators", .data = &rpm_pms405_regulators }, |
---|
673 | 1106 | {} |
---|
674 | 1107 | }; |
---|
675 | 1108 | MODULE_DEVICE_TABLE(of, rpm_of_match); |
---|
.. | .. |
---|
751 | 1184 | |
---|
752 | 1185 | for_each_available_child_of_node(dev->of_node, node) { |
---|
753 | 1186 | vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL); |
---|
754 | | - if (!vreg) |
---|
| 1187 | + if (!vreg) { |
---|
| 1188 | + of_node_put(node); |
---|
755 | 1189 | return -ENOMEM; |
---|
| 1190 | + } |
---|
756 | 1191 | |
---|
757 | 1192 | ret = rpm_regulator_init_vreg(vreg, dev, node, rpm, vreg_data); |
---|
758 | 1193 | |
---|