1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. 3 // Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 5 #define pr_fmt(fmt) "%s: " fmt, __func__ 6 7 #include <linux/err.h> 8 #include <linux/kernel.h> 9 #include <linux/module.h> 10 #include <linux/of.h> 11 #include <linux/platform_device.h> 12 #include <linux/slab.h> 13 #include <linux/string.h> 14 #include <linux/regulator/driver.h> 15 #include <linux/regulator/machine.h> 16 #include <linux/regulator/of_regulator.h> 17 18 #include <soc/qcom/cmd-db.h> 19 #include <soc/qcom/rpmh.h> 20 21 #include <dt-bindings/regulator/qcom,rpmh-regulator.h> 22 23 /** 24 * enum rpmh_regulator_type - supported RPMh accelerator types 25 * @VRM: RPMh VRM accelerator which supports voting on enable, voltage, 26 * and mode of LDO, SMPS, and BOB type PMIC regulators. 27 * @XOB: RPMh XOB accelerator which supports voting on the enable state 28 * of PMIC regulators. 29 */ 30 enum rpmh_regulator_type { 31 VRM, 32 XOB, 33 }; 34 35 /** 36 * enum regulator_hw_type - supported regulator types 37 * @SMPS: Switch mode power supply. 38 * @LDO: Linear Dropout regulator. 39 * @BOB: Buck/Boost type regulator. 40 * @VS: Simple voltage ON/OFF switch. 41 * @NUM_REGULATOR_TYPES: Number of regulator types. 42 */ 43 enum regulator_hw_type { 44 SMPS, 45 LDO, 46 BOB, 47 VS, 48 NUM_REGULATOR_TYPES, 49 }; 50 51 struct resource_name_formats { 52 const char *rsc_name_fmt; 53 const char *rsc_name_fmt1; 54 }; 55 56 static const struct resource_name_formats vreg_rsc_name_lookup[NUM_REGULATOR_TYPES] = { 57 [SMPS] = {"S%d%s", "smp%s%d"}, 58 [LDO] = {"L%d%s", "ldo%s%d"}, 59 [BOB] = {"B%d%s", "bob%s%d"}, 60 [VS] = {"VS%d%s", "vs%s%d"}, 61 }; 62 63 #define RPMH_REGULATOR_REG_VRM_VOLTAGE 0x0 64 #define RPMH_REGULATOR_REG_ENABLE 0x4 65 #define RPMH_REGULATOR_REG_VRM_MODE 0x8 66 67 #define PMIC4_LDO_MODE_RETENTION 4 68 #define PMIC4_LDO_MODE_LPM 5 69 #define PMIC4_LDO_MODE_HPM 7 70 71 #define PMIC4_SMPS_MODE_RETENTION 4 72 #define PMIC4_SMPS_MODE_PFM 5 73 #define PMIC4_SMPS_MODE_AUTO 6 74 #define PMIC4_SMPS_MODE_PWM 7 75 76 #define PMIC4_BOB_MODE_PASS 0 77 #define PMIC4_BOB_MODE_PFM 1 78 #define PMIC4_BOB_MODE_AUTO 2 79 #define PMIC4_BOB_MODE_PWM 3 80 81 #define PMIC5_LDO_MODE_RETENTION 3 82 #define PMIC5_LDO_MODE_LPM 4 83 #define PMIC5_LDO_MODE_HPM 7 84 85 #define PMIC5_SMPS_MODE_RETENTION 3 86 #define PMIC5_SMPS_MODE_PFM 4 87 #define PMIC5_SMPS_MODE_AUTO 6 88 #define PMIC5_SMPS_MODE_PWM 7 89 90 #define PMIC5_BOB_MODE_PASS 2 91 #define PMIC5_BOB_MODE_PFM 4 92 #define PMIC5_BOB_MODE_AUTO 6 93 #define PMIC5_BOB_MODE_PWM 7 94 95 #define PMIC530_LDO_MODE_RETENTION 3 96 #define PMIC530_LDO_MODE_LPM 4 97 #define PMIC530_LDO_MODE_OPM 5 98 #define PMIC530_LDO_MODE_HPM 7 99 100 #define PMIC_ID_LEN 4 101 /** 102 * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations 103 * @regulator_type: RPMh accelerator type used to manage this 104 * regulator 105 * @ops: Pointer to regulator ops callback structure 106 * @voltage_ranges: The possible ranges of voltages supported by this 107 * PMIC regulator type 108 * @n_linear_ranges: Number of entries in voltage_ranges 109 * @n_voltages: The number of unique voltage set points defined 110 * by voltage_ranges 111 * @hpm_min_load_uA: Minimum load current in microamps that requires 112 * high power mode (HPM) operation. This is used 113 * for LDO hardware type regulators only. 114 * @pmic_mode_map: Array indexed by regulator framework mode 115 * containing PMIC hardware modes. Must be large 116 * enough to index all framework modes supported 117 * by this regulator hardware type. 118 * @of_map_mode: Maps an RPMH_REGULATOR_MODE_* mode value defined 119 * in device tree to a regulator framework mode 120 */ 121 struct rpmh_vreg_hw_data { 122 enum rpmh_regulator_type regulator_type; 123 const struct regulator_ops *ops; 124 const struct linear_range *voltage_ranges; 125 int n_linear_ranges; 126 int n_voltages; 127 int hpm_min_load_uA; 128 const int *pmic_mode_map; 129 unsigned int (*of_map_mode)(unsigned int mode); 130 }; 131 132 /** 133 * struct rpmh_vreg - individual RPMh regulator data structure encapsulating a 134 * single regulator device 135 * @dev: Device pointer for the top-level PMIC RPMh 136 * regulator parent device. This is used as a 137 * handle in RPMh write requests. 138 * @addr: Base address of the regulator resource within 139 * an RPMh accelerator 140 * @rdesc: Regulator descriptor 141 * @hw_data: PMIC regulator configuration data for this RPMh 142 * regulator 143 * @always_wait_for_ack: Boolean flag indicating if a request must always 144 * wait for an ACK from RPMh before continuing even 145 * if it corresponds to a strictly lower power 146 * state (e.g. enabled --> disabled). 147 * @enabled: Flag indicating if the regulator is enabled or 148 * not 149 * @bypassed: Boolean indicating if the regulator is in 150 * bypass (pass-through) mode or not. This is 151 * only used by BOB rpmh-regulator resources. 152 * @voltage_selector: Selector used for get_voltage_sel() and 153 * set_voltage_sel() callbacks 154 * @mode: RPMh VRM regulator current framework mode 155 */ 156 struct rpmh_vreg { 157 struct device *dev; 158 u32 addr; 159 struct regulator_desc rdesc; 160 const struct rpmh_vreg_hw_data *hw_data; 161 bool always_wait_for_ack; 162 163 int enabled; 164 bool bypassed; 165 int voltage_selector; 166 unsigned int mode; 167 }; 168 169 /** 170 * struct rpmh_vreg_init_data - initialization data for an RPMh regulator 171 * @name: Name for the regulator which also corresponds 172 * to the device tree subnode name of the regulator 173 * @index: This is the index number of the regulator present 174 * on the PMIC. 175 * @vreg_hw_type: Regulator HW type enum, this must be BOB, SMPS, 176 * LDO, VS, based on the regulator HW type. 177 * @supply_name: Parent supply regulator name 178 * @hw_data: Configuration data for this PMIC regulator type 179 */ 180 struct rpmh_vreg_init_data { 181 const char *name; 182 enum regulator_hw_type vreg_hw_type; 183 int index; 184 const char *supply_name; 185 const struct rpmh_vreg_hw_data *hw_data; 186 }; 187 188 /** 189 * rpmh_regulator_send_request() - send the request to RPMh 190 * @vreg: Pointer to the RPMh regulator 191 * @cmd: Pointer to the RPMh command to send 192 * @wait_for_ack: Boolean indicating if execution must wait until the 193 * request has been acknowledged as complete 194 * 195 * Return: 0 on success, or a negative error number on failure 196 */ 197 static int rpmh_regulator_send_request(struct rpmh_vreg *vreg, 198 struct tcs_cmd *cmd, bool wait_for_ack) 199 { 200 int ret; 201 202 if (wait_for_ack || vreg->always_wait_for_ack) 203 ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1); 204 else 205 ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 206 1); 207 208 return ret; 209 } 210 211 static int _rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev, 212 unsigned int selector, bool wait_for_ack) 213 { 214 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 215 struct tcs_cmd cmd = { 216 .addr = vreg->addr + RPMH_REGULATOR_REG_VRM_VOLTAGE, 217 }; 218 int ret; 219 220 /* VRM voltage control register is set with voltage in millivolts. */ 221 cmd.data = DIV_ROUND_UP(regulator_list_voltage_linear_range(rdev, 222 selector), 1000); 223 224 ret = rpmh_regulator_send_request(vreg, &cmd, wait_for_ack); 225 if (!ret) 226 vreg->voltage_selector = selector; 227 228 return ret; 229 } 230 231 static int rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev, 232 unsigned int selector) 233 { 234 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 235 236 if (vreg->enabled == -EINVAL) { 237 /* 238 * Cache the voltage and send it later when the regulator is 239 * enabled or disabled. 240 */ 241 vreg->voltage_selector = selector; 242 return 0; 243 } 244 245 return _rpmh_regulator_vrm_set_voltage_sel(rdev, selector, 246 selector > vreg->voltage_selector); 247 } 248 249 static int rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev *rdev) 250 { 251 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 252 253 return vreg->voltage_selector; 254 } 255 256 static int rpmh_regulator_is_enabled(struct regulator_dev *rdev) 257 { 258 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 259 260 return vreg->enabled; 261 } 262 263 static int rpmh_regulator_set_enable_state(struct regulator_dev *rdev, 264 bool enable) 265 { 266 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 267 struct tcs_cmd cmd = { 268 .addr = vreg->addr + RPMH_REGULATOR_REG_ENABLE, 269 .data = enable, 270 }; 271 int ret; 272 273 if (vreg->enabled == -EINVAL && 274 vreg->voltage_selector != -ENOTRECOVERABLE) { 275 ret = _rpmh_regulator_vrm_set_voltage_sel(rdev, 276 vreg->voltage_selector, true); 277 if (ret < 0) 278 return ret; 279 } 280 281 ret = rpmh_regulator_send_request(vreg, &cmd, enable); 282 if (!ret) 283 vreg->enabled = enable; 284 285 return ret; 286 } 287 288 static int rpmh_regulator_enable(struct regulator_dev *rdev) 289 { 290 return rpmh_regulator_set_enable_state(rdev, true); 291 } 292 293 static int rpmh_regulator_disable(struct regulator_dev *rdev) 294 { 295 return rpmh_regulator_set_enable_state(rdev, false); 296 } 297 298 static int rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg *vreg, 299 unsigned int mode, bool bypassed) 300 { 301 struct tcs_cmd cmd = { 302 .addr = vreg->addr + RPMH_REGULATOR_REG_VRM_MODE, 303 }; 304 int pmic_mode; 305 306 if (mode > REGULATOR_MODE_STANDBY) 307 return -EINVAL; 308 309 pmic_mode = vreg->hw_data->pmic_mode_map[mode]; 310 if (pmic_mode < 0) 311 return pmic_mode; 312 313 if (bypassed) 314 cmd.data = PMIC4_BOB_MODE_PASS; 315 else 316 cmd.data = pmic_mode; 317 318 return rpmh_regulator_send_request(vreg, &cmd, true); 319 } 320 321 static int rpmh_regulator_vrm_set_mode(struct regulator_dev *rdev, 322 unsigned int mode) 323 { 324 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 325 int ret; 326 327 if (mode == vreg->mode) 328 return 0; 329 330 ret = rpmh_regulator_vrm_set_mode_bypass(vreg, mode, vreg->bypassed); 331 if (!ret) 332 vreg->mode = mode; 333 334 return ret; 335 } 336 337 static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev) 338 { 339 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 340 341 return vreg->mode; 342 } 343 344 /** 345 * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the load 346 * @rdev: Regulator device pointer for the rpmh-regulator 347 * @input_uV: Input voltage 348 * @output_uV: Output voltage 349 * @load_uA: Aggregated load current in microamps 350 * 351 * This function is used in the regulator_ops for VRM type RPMh regulator 352 * devices. 353 * 354 * Return: 0 on success, or a negative error number on failure 355 */ 356 static unsigned int rpmh_regulator_vrm_get_optimum_mode( 357 struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA) 358 { 359 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 360 361 if (load_uA >= vreg->hw_data->hpm_min_load_uA) 362 return REGULATOR_MODE_NORMAL; 363 else 364 return REGULATOR_MODE_IDLE; 365 } 366 367 static int rpmh_regulator_vrm_set_bypass(struct regulator_dev *rdev, 368 bool enable) 369 { 370 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 371 int ret; 372 373 if (vreg->bypassed == enable) 374 return 0; 375 376 ret = rpmh_regulator_vrm_set_mode_bypass(vreg, vreg->mode, enable); 377 if (!ret) 378 vreg->bypassed = enable; 379 380 return ret; 381 } 382 383 static int rpmh_regulator_vrm_get_bypass(struct regulator_dev *rdev, 384 bool *enable) 385 { 386 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 387 388 *enable = vreg->bypassed; 389 390 return 0; 391 } 392 393 static const struct regulator_ops rpmh_regulator_vrm_ops = { 394 .enable = rpmh_regulator_enable, 395 .disable = rpmh_regulator_disable, 396 .is_enabled = rpmh_regulator_is_enabled, 397 .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel, 398 .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel, 399 .list_voltage = regulator_list_voltage_linear_range, 400 .set_mode = rpmh_regulator_vrm_set_mode, 401 .get_mode = rpmh_regulator_vrm_get_mode, 402 }; 403 404 static const struct regulator_ops rpmh_regulator_vrm_drms_ops = { 405 .enable = rpmh_regulator_enable, 406 .disable = rpmh_regulator_disable, 407 .is_enabled = rpmh_regulator_is_enabled, 408 .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel, 409 .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel, 410 .list_voltage = regulator_list_voltage_linear_range, 411 .set_mode = rpmh_regulator_vrm_set_mode, 412 .get_mode = rpmh_regulator_vrm_get_mode, 413 .get_optimum_mode = rpmh_regulator_vrm_get_optimum_mode, 414 }; 415 416 static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = { 417 .enable = rpmh_regulator_enable, 418 .disable = rpmh_regulator_disable, 419 .is_enabled = rpmh_regulator_is_enabled, 420 .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel, 421 .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel, 422 .list_voltage = regulator_list_voltage_linear_range, 423 .set_mode = rpmh_regulator_vrm_set_mode, 424 .get_mode = rpmh_regulator_vrm_get_mode, 425 .set_bypass = rpmh_regulator_vrm_set_bypass, 426 .get_bypass = rpmh_regulator_vrm_get_bypass, 427 }; 428 429 static const struct regulator_ops rpmh_regulator_xob_ops = { 430 .enable = rpmh_regulator_enable, 431 .disable = rpmh_regulator_disable, 432 .is_enabled = rpmh_regulator_is_enabled, 433 }; 434 435 /** 436 * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator 437 * @vreg: Pointer to the individual rpmh-regulator resource 438 * @dev: Pointer to the top level rpmh-regulator PMIC device 439 * @node: Pointer to the individual rpmh-regulator resource 440 * device node 441 * @pmic_id: String used to identify the top level rpmh-regulator 442 * PMIC device on the board 443 * @pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator 444 * resources defined for the top level PMIC device 445 * 446 * Return: 0 on success, or a negative error number on failure 447 */ 448 static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev, 449 struct device_node *node, const char *pmic_id, 450 const struct rpmh_vreg_init_data *pmic_rpmh_data) 451 { 452 struct regulator_config reg_config = {}; 453 char rpmh_resource_name[20] = ""; 454 const char *rsc_name; 455 const struct rpmh_vreg_init_data *rpmh_data; 456 struct regulator_init_data *init_data; 457 struct regulator_dev *rdev; 458 int ret; 459 460 vreg->dev = dev; 461 462 for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++) 463 if (of_node_name_eq(node, rpmh_data->name)) 464 break; 465 466 if (!rpmh_data->name) { 467 dev_err(dev, "Unknown regulator %pOFn\n", node); 468 return -EINVAL; 469 } 470 471 if (strnlen(pmic_id, PMIC_ID_LEN) > 1 && strnstr(pmic_id, "_E", PMIC_ID_LEN)) { 472 rsc_name = vreg_rsc_name_lookup[rpmh_data->vreg_hw_type].rsc_name_fmt; 473 scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name), 474 rsc_name, rpmh_data->index, pmic_id); 475 476 } else { 477 rsc_name = vreg_rsc_name_lookup[rpmh_data->vreg_hw_type].rsc_name_fmt1; 478 scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name), 479 rsc_name, pmic_id, rpmh_data->index); 480 } 481 482 vreg->addr = cmd_db_read_addr(rpmh_resource_name); 483 if (!vreg->addr) { 484 dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n", 485 node, rpmh_resource_name); 486 return -ENODEV; 487 } 488 489 vreg->rdesc.name = rpmh_data->name; 490 vreg->rdesc.supply_name = rpmh_data->supply_name; 491 vreg->hw_data = rpmh_data->hw_data; 492 493 vreg->enabled = -EINVAL; 494 vreg->voltage_selector = -ENOTRECOVERABLE; 495 vreg->mode = REGULATOR_MODE_INVALID; 496 497 if (rpmh_data->hw_data->n_voltages) { 498 vreg->rdesc.linear_ranges = rpmh_data->hw_data->voltage_ranges; 499 vreg->rdesc.n_linear_ranges = rpmh_data->hw_data->n_linear_ranges; 500 vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages; 501 } 502 503 vreg->always_wait_for_ack = of_property_read_bool(node, 504 "qcom,always-wait-for-ack"); 505 506 vreg->rdesc.owner = THIS_MODULE; 507 vreg->rdesc.type = REGULATOR_VOLTAGE; 508 vreg->rdesc.ops = vreg->hw_data->ops; 509 vreg->rdesc.of_map_mode = vreg->hw_data->of_map_mode; 510 511 init_data = of_get_regulator_init_data(dev, node, &vreg->rdesc); 512 if (!init_data) 513 return -ENOMEM; 514 515 if (rpmh_data->hw_data->regulator_type == XOB && 516 init_data->constraints.min_uV && 517 init_data->constraints.min_uV == init_data->constraints.max_uV) { 518 vreg->rdesc.fixed_uV = init_data->constraints.min_uV; 519 vreg->rdesc.n_voltages = 1; 520 } 521 522 reg_config.dev = dev; 523 reg_config.init_data = init_data; 524 reg_config.of_node = node; 525 reg_config.driver_data = vreg; 526 527 rdev = devm_regulator_register(dev, &vreg->rdesc, ®_config); 528 if (IS_ERR(rdev)) { 529 ret = PTR_ERR(rdev); 530 dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n", 531 node, ret); 532 return ret; 533 } 534 535 dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n", 536 node, rpmh_resource_name, vreg->addr); 537 538 return 0; 539 } 540 541 static const int pmic_mode_map_pmic4_ldo[REGULATOR_MODE_STANDBY + 1] = { 542 [REGULATOR_MODE_INVALID] = -EINVAL, 543 [REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION, 544 [REGULATOR_MODE_IDLE] = PMIC4_LDO_MODE_LPM, 545 [REGULATOR_MODE_NORMAL] = PMIC4_LDO_MODE_HPM, 546 [REGULATOR_MODE_FAST] = -EINVAL, 547 }; 548 549 static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = { 550 [REGULATOR_MODE_INVALID] = -EINVAL, 551 [REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION, 552 [REGULATOR_MODE_IDLE] = PMIC5_LDO_MODE_LPM, 553 [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM, 554 [REGULATOR_MODE_FAST] = -EINVAL, 555 }; 556 557 static const int pmic_mode_map_pmic5_ldo_hpm[REGULATOR_MODE_STANDBY + 1] = { 558 [REGULATOR_MODE_INVALID] = -EINVAL, 559 [REGULATOR_MODE_STANDBY] = -EINVAL, 560 [REGULATOR_MODE_IDLE] = -EINVAL, 561 [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM, 562 [REGULATOR_MODE_FAST] = -EINVAL, 563 }; 564 565 static const int pmic_mode_map_pmic530_ldo[REGULATOR_MODE_STANDBY + 1] = { 566 [REGULATOR_MODE_INVALID] = -EINVAL, 567 [REGULATOR_MODE_STANDBY] = PMIC530_LDO_MODE_RETENTION, 568 [REGULATOR_MODE_IDLE] = PMIC530_LDO_MODE_LPM, 569 [REGULATOR_MODE_NORMAL] = PMIC530_LDO_MODE_OPM, 570 [REGULATOR_MODE_FAST] = PMIC530_LDO_MODE_HPM, 571 }; 572 573 static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode) 574 { 575 unsigned int mode; 576 577 switch (rpmh_mode) { 578 case RPMH_REGULATOR_MODE_HPM: 579 mode = REGULATOR_MODE_NORMAL; 580 break; 581 case RPMH_REGULATOR_MODE_LPM: 582 mode = REGULATOR_MODE_IDLE; 583 break; 584 case RPMH_REGULATOR_MODE_RET: 585 mode = REGULATOR_MODE_STANDBY; 586 break; 587 default: 588 mode = REGULATOR_MODE_INVALID; 589 break; 590 } 591 592 return mode; 593 } 594 595 static unsigned int rpmh_regulator_pmic530_ldo_of_map_mode(unsigned int rpmh_mode) 596 { 597 unsigned int mode; 598 599 switch (rpmh_mode) { 600 case RPMH_REGULATOR_MODE_HPM: 601 mode = REGULATOR_MODE_FAST; 602 break; 603 case RPMH_REGULATOR_MODE_AUTO: 604 mode = REGULATOR_MODE_NORMAL; 605 break; 606 case RPMH_REGULATOR_MODE_LPM: 607 mode = REGULATOR_MODE_IDLE; 608 break; 609 case RPMH_REGULATOR_MODE_RET: 610 mode = REGULATOR_MODE_STANDBY; 611 break; 612 default: 613 mode = REGULATOR_MODE_INVALID; 614 break; 615 } 616 return mode; 617 } 618 619 static const int pmic_mode_map_pmic4_smps[REGULATOR_MODE_STANDBY + 1] = { 620 [REGULATOR_MODE_INVALID] = -EINVAL, 621 [REGULATOR_MODE_STANDBY] = PMIC4_SMPS_MODE_RETENTION, 622 [REGULATOR_MODE_IDLE] = PMIC4_SMPS_MODE_PFM, 623 [REGULATOR_MODE_NORMAL] = PMIC4_SMPS_MODE_AUTO, 624 [REGULATOR_MODE_FAST] = PMIC4_SMPS_MODE_PWM, 625 }; 626 627 static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = { 628 [REGULATOR_MODE_INVALID] = -EINVAL, 629 [REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION, 630 [REGULATOR_MODE_IDLE] = PMIC5_SMPS_MODE_PFM, 631 [REGULATOR_MODE_NORMAL] = PMIC5_SMPS_MODE_AUTO, 632 [REGULATOR_MODE_FAST] = PMIC5_SMPS_MODE_PWM, 633 }; 634 635 static unsigned int 636 rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode) 637 { 638 unsigned int mode; 639 640 switch (rpmh_mode) { 641 case RPMH_REGULATOR_MODE_HPM: 642 mode = REGULATOR_MODE_FAST; 643 break; 644 case RPMH_REGULATOR_MODE_AUTO: 645 mode = REGULATOR_MODE_NORMAL; 646 break; 647 case RPMH_REGULATOR_MODE_LPM: 648 mode = REGULATOR_MODE_IDLE; 649 break; 650 case RPMH_REGULATOR_MODE_RET: 651 mode = REGULATOR_MODE_STANDBY; 652 break; 653 default: 654 mode = REGULATOR_MODE_INVALID; 655 break; 656 } 657 658 return mode; 659 } 660 661 static const int pmic_mode_map_pmic4_bob[REGULATOR_MODE_STANDBY + 1] = { 662 [REGULATOR_MODE_INVALID] = -EINVAL, 663 [REGULATOR_MODE_STANDBY] = -EINVAL, 664 [REGULATOR_MODE_IDLE] = PMIC4_BOB_MODE_PFM, 665 [REGULATOR_MODE_NORMAL] = PMIC4_BOB_MODE_AUTO, 666 [REGULATOR_MODE_FAST] = PMIC4_BOB_MODE_PWM, 667 }; 668 669 static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = { 670 [REGULATOR_MODE_INVALID] = -EINVAL, 671 [REGULATOR_MODE_STANDBY] = -EINVAL, 672 [REGULATOR_MODE_IDLE] = PMIC5_BOB_MODE_PFM, 673 [REGULATOR_MODE_NORMAL] = PMIC5_BOB_MODE_AUTO, 674 [REGULATOR_MODE_FAST] = PMIC5_BOB_MODE_PWM, 675 }; 676 677 static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode) 678 { 679 unsigned int mode; 680 681 switch (rpmh_mode) { 682 case RPMH_REGULATOR_MODE_HPM: 683 mode = REGULATOR_MODE_FAST; 684 break; 685 case RPMH_REGULATOR_MODE_AUTO: 686 mode = REGULATOR_MODE_NORMAL; 687 break; 688 case RPMH_REGULATOR_MODE_LPM: 689 mode = REGULATOR_MODE_IDLE; 690 break; 691 default: 692 mode = REGULATOR_MODE_INVALID; 693 break; 694 } 695 696 return mode; 697 } 698 699 static const struct rpmh_vreg_hw_data pmic4_pldo = { 700 .regulator_type = VRM, 701 .ops = &rpmh_regulator_vrm_drms_ops, 702 .voltage_ranges = (struct linear_range[]) { 703 REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), 704 }, 705 .n_linear_ranges = 1, 706 .n_voltages = 256, 707 .hpm_min_load_uA = 10000, 708 .pmic_mode_map = pmic_mode_map_pmic4_ldo, 709 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 710 }; 711 712 static const struct rpmh_vreg_hw_data pmic4_pldo_lv = { 713 .regulator_type = VRM, 714 .ops = &rpmh_regulator_vrm_drms_ops, 715 .voltage_ranges = (struct linear_range[]) { 716 REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), 717 }, 718 .n_linear_ranges = 1, 719 .n_voltages = 128, 720 .hpm_min_load_uA = 10000, 721 .pmic_mode_map = pmic_mode_map_pmic4_ldo, 722 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 723 }; 724 725 static const struct rpmh_vreg_hw_data pmic4_nldo = { 726 .regulator_type = VRM, 727 .ops = &rpmh_regulator_vrm_drms_ops, 728 .voltage_ranges = (struct linear_range[]) { 729 REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), 730 }, 731 .n_linear_ranges = 1, 732 .n_voltages = 128, 733 .hpm_min_load_uA = 30000, 734 .pmic_mode_map = pmic_mode_map_pmic4_ldo, 735 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 736 }; 737 738 static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = { 739 .regulator_type = VRM, 740 .ops = &rpmh_regulator_vrm_ops, 741 .voltage_ranges = (struct linear_range[]) { 742 REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 743 }, 744 .n_linear_ranges = 1, 745 .n_voltages = 216, 746 .pmic_mode_map = pmic_mode_map_pmic4_smps, 747 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 748 }; 749 750 static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = { 751 .regulator_type = VRM, 752 .ops = &rpmh_regulator_vrm_ops, 753 .voltage_ranges = (struct linear_range[]) { 754 REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), 755 }, 756 .n_linear_ranges = 1, 757 .n_voltages = 259, 758 .pmic_mode_map = pmic_mode_map_pmic4_smps, 759 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 760 }; 761 762 static const struct rpmh_vreg_hw_data pmic4_bob = { 763 .regulator_type = VRM, 764 .ops = &rpmh_regulator_vrm_bypass_ops, 765 .voltage_ranges = (struct linear_range[]) { 766 REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), 767 }, 768 .n_linear_ranges = 1, 769 .n_voltages = 84, 770 .pmic_mode_map = pmic_mode_map_pmic4_bob, 771 .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, 772 }; 773 774 static const struct rpmh_vreg_hw_data pmic4_lvs = { 775 .regulator_type = XOB, 776 .ops = &rpmh_regulator_xob_ops, 777 /* LVS hardware does not support voltage or mode configuration. */ 778 }; 779 780 static const struct rpmh_vreg_hw_data pmic5_pldo = { 781 .regulator_type = VRM, 782 .ops = &rpmh_regulator_vrm_drms_ops, 783 .voltage_ranges = (struct linear_range[]) { 784 REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 785 }, 786 .n_linear_ranges = 1, 787 .n_voltages = 256, 788 .hpm_min_load_uA = 10000, 789 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 790 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 791 }; 792 793 static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { 794 .regulator_type = VRM, 795 .ops = &rpmh_regulator_vrm_drms_ops, 796 .voltage_ranges = (struct linear_range[]) { 797 REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), 798 }, 799 .n_linear_ranges = 1, 800 .n_voltages = 63, 801 .hpm_min_load_uA = 10000, 802 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 803 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 804 }; 805 806 static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { 807 .regulator_type = VRM, 808 .ops = &rpmh_regulator_vrm_drms_ops, 809 .voltage_ranges = (struct linear_range[]) { 810 REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000), 811 }, 812 .n_linear_ranges = 1, 813 .n_voltages = 188, 814 .hpm_min_load_uA = 10000, 815 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 816 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 817 }; 818 819 static const struct rpmh_vreg_hw_data pmic5_pldo502 = { 820 .regulator_type = VRM, 821 .ops = &rpmh_regulator_vrm_ops, 822 .voltage_ranges = (struct linear_range[]) { 823 REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 824 }, 825 .n_linear_ranges = 1, 826 .n_voltages = 256, 827 .pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm, 828 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 829 }; 830 831 static const struct rpmh_vreg_hw_data pmic5_pldo502ln = { 832 .regulator_type = VRM, 833 .ops = &rpmh_regulator_vrm_ops, 834 .voltage_ranges = (struct linear_range[]) { 835 REGULATOR_LINEAR_RANGE(1800000, 0, 2, 200000), 836 REGULATOR_LINEAR_RANGE(2608000, 3, 28, 16000), 837 REGULATOR_LINEAR_RANGE(3104000, 29, 30, 96000), 838 REGULATOR_LINEAR_RANGE(3312000, 31, 31, 0), 839 }, 840 .n_linear_ranges = 4, 841 .n_voltages = 32, 842 .pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm, 843 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 844 }; 845 846 static const struct rpmh_vreg_hw_data pmic5_nldo = { 847 .regulator_type = VRM, 848 .ops = &rpmh_regulator_vrm_drms_ops, 849 .voltage_ranges = (struct linear_range[]) { 850 REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), 851 }, 852 .n_linear_ranges = 1, 853 .n_voltages = 124, 854 .hpm_min_load_uA = 30000, 855 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 856 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 857 }; 858 859 static const struct rpmh_vreg_hw_data pmic5_nldo515 = { 860 .regulator_type = VRM, 861 .ops = &rpmh_regulator_vrm_drms_ops, 862 .voltage_ranges = (struct linear_range[]) { 863 REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), 864 }, 865 .n_linear_ranges = 1, 866 .n_voltages = 211, 867 .hpm_min_load_uA = 30000, 868 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 869 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 870 }; 871 872 static const struct rpmh_vreg_hw_data pmic5_nldo502 = { 873 .regulator_type = VRM, 874 .ops = &rpmh_regulator_vrm_drms_ops, 875 .voltage_ranges = (struct linear_range[]) { 876 REGULATOR_LINEAR_RANGE(528000, 0, 127, 8000), 877 }, 878 .n_linear_ranges = 1, 879 .n_voltages = 128, 880 .hpm_min_load_uA = 30000, 881 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 882 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 883 }; 884 885 static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { 886 .regulator_type = VRM, 887 .ops = &rpmh_regulator_vrm_ops, 888 .voltage_ranges = (struct linear_range[]) { 889 REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 890 }, 891 .n_linear_ranges = 1, 892 .n_voltages = 216, 893 .pmic_mode_map = pmic_mode_map_pmic5_smps, 894 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 895 }; 896 897 static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { 898 .regulator_type = VRM, 899 .ops = &rpmh_regulator_vrm_ops, 900 .voltage_ranges = (struct linear_range[]) { 901 REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), 902 }, 903 .n_linear_ranges = 1, 904 .n_voltages = 264, 905 .pmic_mode_map = pmic_mode_map_pmic5_smps, 906 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 907 }; 908 909 static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { 910 .regulator_type = VRM, 911 .ops = &rpmh_regulator_vrm_ops, 912 .voltage_ranges = (struct linear_range[]) { 913 REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), 914 }, 915 .n_linear_ranges = 1, 916 .n_voltages = 264, 917 .pmic_mode_map = pmic_mode_map_pmic5_smps, 918 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 919 }; 920 921 static const struct rpmh_vreg_hw_data pmic5_ftsmps525 = { 922 .regulator_type = VRM, 923 .ops = &rpmh_regulator_vrm_ops, 924 .voltage_ranges = (struct linear_range[]) { 925 REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), 926 REGULATOR_LINEAR_RANGE(1376000, 268, 438, 8000), 927 }, 928 .n_linear_ranges = 2, 929 .n_voltages = 439, 930 .pmic_mode_map = pmic_mode_map_pmic5_smps, 931 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 932 }; 933 934 static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = { 935 .regulator_type = VRM, 936 .ops = &rpmh_regulator_vrm_ops, 937 .voltage_ranges = (struct linear_range[]) { 938 REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 939 }, 940 .n_linear_ranges = 1, 941 .n_voltages = 215, 942 .pmic_mode_map = pmic_mode_map_pmic5_smps, 943 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 944 }; 945 946 static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { 947 .regulator_type = VRM, 948 .ops = &rpmh_regulator_vrm_ops, 949 .voltage_ranges = (struct linear_range[]) { 950 REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), 951 }, 952 .n_linear_ranges = 1, 953 .n_voltages = 236, 954 .pmic_mode_map = pmic_mode_map_pmic5_smps, 955 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 956 }; 957 958 static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = { 959 .regulator_type = VRM, 960 .ops = &rpmh_regulator_vrm_ops, 961 .voltage_ranges = (struct linear_range[]) { 962 REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), 963 }, 964 .n_linear_ranges = 1, 965 .n_voltages = 5, 966 .pmic_mode_map = pmic_mode_map_pmic5_smps, 967 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 968 }; 969 970 static const struct rpmh_vreg_hw_data pmic5_bob = { 971 .regulator_type = VRM, 972 .ops = &rpmh_regulator_vrm_bypass_ops, 973 .voltage_ranges = (struct linear_range[]) { 974 REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), 975 }, 976 .n_linear_ranges = 1, 977 .n_voltages = 32, 978 .pmic_mode_map = pmic_mode_map_pmic5_bob, 979 .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, 980 }; 981 982 static const struct rpmh_vreg_hw_data pmic5_nldo530 = { 983 .regulator_type = VRM, 984 .ops = &rpmh_regulator_vrm_drms_ops, 985 .voltage_ranges = (struct linear_range[]) { 986 REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), 987 }, 988 .n_linear_ranges = 1, 989 .n_voltages = 211, 990 .hpm_min_load_uA = 30000, 991 .pmic_mode_map = pmic_mode_map_pmic530_ldo, 992 .of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode, 993 }; 994 995 static const struct rpmh_vreg_hw_data pmic5_pldo530_mvp150 = { 996 .regulator_type = VRM, 997 .ops = &rpmh_regulator_vrm_drms_ops, 998 .voltage_ranges = (struct linear_range[]) { 999 REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 1000 }, 1001 .n_linear_ranges = 1, 1002 .n_voltages = 256, 1003 .hpm_min_load_uA = 10000, 1004 .pmic_mode_map = pmic_mode_map_pmic530_ldo, 1005 .of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode, 1006 }; 1007 1008 static const struct rpmh_vreg_hw_data pmic5_pldo530_mvp300 = { 1009 .regulator_type = VRM, 1010 .ops = &rpmh_regulator_vrm_drms_ops, 1011 .voltage_ranges = (struct linear_range[]) { 1012 REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 1013 }, 1014 .n_linear_ranges = 1, 1015 .n_voltages = 256, 1016 .hpm_min_load_uA = 20000, 1017 .pmic_mode_map = pmic_mode_map_pmic530_ldo, 1018 .of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode, 1019 }; 1020 1021 static const struct rpmh_vreg_hw_data pmic5_pldo530_mvp600 = { 1022 .regulator_type = VRM, 1023 .ops = &rpmh_regulator_vrm_drms_ops, 1024 .voltage_ranges = (struct linear_range[]) { 1025 REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 1026 }, 1027 .n_linear_ranges = 1, 1028 .n_voltages = 256, 1029 .hpm_min_load_uA = 40000, 1030 .pmic_mode_map = pmic_mode_map_pmic530_ldo, 1031 .of_map_mode = rpmh_regulator_pmic530_ldo_of_map_mode, 1032 }; 1033 1034 static const struct rpmh_vreg_hw_data pmic5_ftsmps530 = { 1035 .regulator_type = VRM, 1036 .ops = &rpmh_regulator_vrm_ops, 1037 .voltage_ranges = (struct linear_range[]) { 1038 REGULATOR_LINEAR_RANGE(252000, 0, 305, 4000), 1039 REGULATOR_LINEAR_RANGE(1480000, 306, 464, 8000), 1040 }, 1041 .n_linear_ranges = 2, 1042 .n_voltages = 465, 1043 .pmic_mode_map = pmic_mode_map_pmic5_smps, 1044 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 1045 }; 1046 1047 #define RPMH_VREG(_name, _vreg_hw_type, _index, _hw_data, _supply_name) \ 1048 { \ 1049 .name = _name, \ 1050 .vreg_hw_type = _vreg_hw_type, \ 1051 .index = _index, \ 1052 .hw_data = _hw_data, \ 1053 .supply_name = _supply_name, \ 1054 } 1055 1056 static const struct rpmh_vreg_init_data pm8998_vreg_data[] = { 1057 RPMH_VREG("smps1", SMPS, 1, &pmic4_ftsmps426, "vdd-s1"), 1058 RPMH_VREG("smps2", SMPS, 2, &pmic4_ftsmps426, "vdd-s2"), 1059 RPMH_VREG("smps3", SMPS, 3, &pmic4_hfsmps3, "vdd-s3"), 1060 RPMH_VREG("smps4", SMPS, 4, &pmic4_hfsmps3, "vdd-s4"), 1061 RPMH_VREG("smps5", SMPS, 5, &pmic4_hfsmps3, "vdd-s5"), 1062 RPMH_VREG("smps6", SMPS, 6, &pmic4_ftsmps426, "vdd-s6"), 1063 RPMH_VREG("smps7", SMPS, 7, &pmic4_ftsmps426, "vdd-s7"), 1064 RPMH_VREG("smps8", SMPS, 8, &pmic4_ftsmps426, "vdd-s8"), 1065 RPMH_VREG("smps9", SMPS, 9, &pmic4_ftsmps426, "vdd-s9"), 1066 RPMH_VREG("smps10", SMPS, 10, &pmic4_ftsmps426, "vdd-s10"), 1067 RPMH_VREG("smps11", SMPS, 11, &pmic4_ftsmps426, "vdd-s11"), 1068 RPMH_VREG("smps12", SMPS, 12, &pmic4_ftsmps426, "vdd-s12"), 1069 RPMH_VREG("smps13", SMPS, 13, &pmic4_ftsmps426, "vdd-s13"), 1070 RPMH_VREG("ldo1", LDO, 1, &pmic4_nldo, "vdd-l1-l27"), 1071 RPMH_VREG("ldo2", LDO, 2, &pmic4_nldo, "vdd-l2-l8-l17"), 1072 RPMH_VREG("ldo3", LDO, 3, &pmic4_nldo, "vdd-l3-l11"), 1073 RPMH_VREG("ldo4", LDO, 4, &pmic4_nldo, "vdd-l4-l5"), 1074 RPMH_VREG("ldo5", LDO, 5, &pmic4_nldo, "vdd-l4-l5"), 1075 RPMH_VREG("ldo6", LDO, 6, &pmic4_pldo, "vdd-l6"), 1076 RPMH_VREG("ldo7", LDO, 7, &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 1077 RPMH_VREG("ldo8", LDO, 8, &pmic4_nldo, "vdd-l2-l8-l17"), 1078 RPMH_VREG("ldo9", LDO, 9, &pmic4_pldo, "vdd-l9"), 1079 RPMH_VREG("ldo10", LDO, 10, &pmic4_pldo, "vdd-l10-l23-l25"), 1080 RPMH_VREG("ldo11", LDO, 11, &pmic4_nldo, "vdd-l3-l11"), 1081 RPMH_VREG("ldo12", LDO, 12, &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 1082 RPMH_VREG("ldo13", LDO, 13, &pmic4_pldo, "vdd-l13-l19-l21"), 1083 RPMH_VREG("ldo14", LDO, 14, &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 1084 RPMH_VREG("ldo15", LDO, 15, &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 1085 RPMH_VREG("ldo16", LDO, 16, &pmic4_pldo, "vdd-l16-l28"), 1086 RPMH_VREG("ldo17", LDO, 17, &pmic4_nldo, "vdd-l2-l8-l17"), 1087 RPMH_VREG("ldo18", LDO, 18, &pmic4_pldo, "vdd-l18-l22"), 1088 RPMH_VREG("ldo19", LDO, 19, &pmic4_pldo, "vdd-l13-l19-l21"), 1089 RPMH_VREG("ldo20", LDO, 20, &pmic4_pldo, "vdd-l20-l24"), 1090 RPMH_VREG("ldo21", LDO, 21, &pmic4_pldo, "vdd-l13-l19-l21"), 1091 RPMH_VREG("ldo22", LDO, 22, &pmic4_pldo, "vdd-l18-l22"), 1092 RPMH_VREG("ldo23", LDO, 23, &pmic4_pldo, "vdd-l10-l23-l25"), 1093 RPMH_VREG("ldo24", LDO, 24, &pmic4_pldo, "vdd-l20-l24"), 1094 RPMH_VREG("ldo25", LDO, 25, &pmic4_pldo, "vdd-l10-l23-l25"), 1095 RPMH_VREG("ldo26", LDO, 26, &pmic4_nldo, "vdd-l26"), 1096 RPMH_VREG("ldo27", LDO, 27, &pmic4_nldo, "vdd-l1-l27"), 1097 RPMH_VREG("ldo28", LDO, 28, &pmic4_pldo, "vdd-l16-l28"), 1098 RPMH_VREG("lvs1", VS, 1, &pmic4_lvs, "vin-lvs-1-2"), 1099 RPMH_VREG("lvs2", VS, 2, &pmic4_lvs, "vin-lvs-1-2"), 1100 {} 1101 }; 1102 1103 static const struct rpmh_vreg_init_data pmau0102_vreg_data[] = { 1104 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps527, "vdd-s1"), 1105 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps527, "vdd-s2"), 1106 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps527, "vdd-s3"), 1107 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps527, "vdd-s4"), 1108 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps527, "vdd-s5"), 1109 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps527, "vdd-s6"), 1110 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps527, "vdd-s7"), 1111 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps527, "vdd-s8"), 1112 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1"), 1113 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2"), 1114 RPMH_VREG("ldo3", LDO, 3, &pmic5_pldo515_mv, "vdd-l3"), 1115 {} 1116 }; 1117 1118 static const struct rpmh_vreg_init_data pmg1110_vreg_data[] = { 1119 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1120 {} 1121 }; 1122 1123 static const struct rpmh_vreg_init_data pmi8998_vreg_data[] = { 1124 RPMH_VREG("bob", BOB, 1, &pmic4_bob, "vdd-bob"), 1125 {} 1126 }; 1127 1128 static const struct rpmh_vreg_init_data pm8005_vreg_data[] = { 1129 RPMH_VREG("smps1", SMPS, 1, &pmic4_ftsmps426, "vdd-s1"), 1130 RPMH_VREG("smps2", SMPS, 2, &pmic4_ftsmps426, "vdd-s2"), 1131 RPMH_VREG("smps3", SMPS, 3, &pmic4_ftsmps426, "vdd-s3"), 1132 RPMH_VREG("smps4", SMPS, 4, &pmic4_ftsmps426, "vdd-s4"), 1133 {} 1134 }; 1135 1136 static const struct rpmh_vreg_init_data pm8150_vreg_data[] = { 1137 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1138 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1139 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1140 RPMH_VREG("smps4", SMPS, 4, &pmic5_hfsmps510, "vdd-s4"), 1141 RPMH_VREG("smps5", SMPS, 5, &pmic5_hfsmps510, "vdd-s5"), 1142 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1143 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps510, "vdd-s7"), 1144 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps510, "vdd-s8"), 1145 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps510, "vdd-s9"), 1146 RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps510, "vdd-s10"), 1147 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l8-l11"), 1148 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo, "vdd-l2-l10"), 1149 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1150 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1151 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1152 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l6-l9"), 1153 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l7-l12-l14-l15"), 1154 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l1-l8-l11"), 1155 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l6-l9"), 1156 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l2-l10"), 1157 RPMH_VREG("ldo11", LDO, 11, &pmic5_nldo, "vdd-l1-l8-l11"), 1158 RPMH_VREG("ldo12", LDO, 12, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1159 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l13-l16-l17"), 1160 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1161 RPMH_VREG("ldo15", LDO, 15, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1162 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l13-l16-l17"), 1163 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo, "vdd-l13-l16-l17"), 1164 RPMH_VREG("ldo18", LDO, 18, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1165 {} 1166 }; 1167 1168 static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = { 1169 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1170 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1171 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1172 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps510, "vdd-s4"), 1173 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps510, "vdd-s5"), 1174 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1175 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps510, "vdd-s7"), 1176 RPMH_VREG("smps8", SMPS, 8, &pmic5_hfsmps510, "vdd-s8"), 1177 RPMH_VREG("ldo1", LDO, 1, &pmic5_pldo_lv, "vdd-l1-l8"), 1178 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2-l3"), 1179 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l2-l3"), 1180 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo, "vdd-l4-l5-l6"), 1181 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l4-l5-l6"), 1182 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l4-l5-l6"), 1183 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l7-l11"), 1184 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo_lv, "vdd-l1-l8"), 1185 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo, "vdd-l9-l10"), 1186 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l9-l10"), 1187 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, "vdd-l7-l11"), 1188 RPMH_VREG("bob", BOB, 1, &pmic5_bob, "vdd-bob"), 1189 {} 1190 }; 1191 1192 static const struct rpmh_vreg_init_data pmm8155au_vreg_data[] = { 1193 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1194 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1195 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1196 RPMH_VREG("smps4", SMPS, 4, &pmic5_hfsmps510, "vdd-s4"), 1197 RPMH_VREG("smps5", SMPS, 5, &pmic5_hfsmps510, "vdd-s5"), 1198 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1199 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps510, "vdd-s7"), 1200 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps510, "vdd-s8"), 1201 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps510, "vdd-s9"), 1202 RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps510, "vdd-s10"), 1203 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l8-l11"), 1204 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo, "vdd-l2-l10"), 1205 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1206 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1207 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1208 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l6-l9"), 1209 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1210 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l1-l8-l11"), 1211 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l6-l9"), 1212 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l2-l10"), 1213 RPMH_VREG("ldo11", LDO, 11, &pmic5_nldo, "vdd-l1-l8-l11"), 1214 RPMH_VREG("ldo12", LDO, 12, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1215 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l13-l16-l17"), 1216 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1217 RPMH_VREG("ldo15", LDO, 15, &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 1218 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l13-l16-l17"), 1219 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo, "vdd-l13-l16-l17"), 1220 RPMH_VREG("ldo18", LDO, 18, &pmic5_nldo, "vdd-l3-l4-l5-l18"), 1221 {} 1222 }; 1223 1224 static const struct rpmh_vreg_init_data pmm8654au_vreg_data[] = { 1225 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps527, "vdd-s1"), 1226 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps527, "vdd-s2"), 1227 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps527, "vdd-s3"), 1228 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps527, "vdd-s4"), 1229 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps527, "vdd-s5"), 1230 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps527, "vdd-s6"), 1231 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps527, "vdd-s7"), 1232 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps527, "vdd-s8"), 1233 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps527, "vdd-s9"), 1234 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-s9"), 1235 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2-l3"), 1236 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l2-l3"), 1237 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo515, "vdd-s9"), 1238 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo515, "vdd-s9"), 1239 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo515, "vdd-l6-l7"), 1240 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo515, "vdd-l6-l7"), 1241 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo515_mv, "vdd-l8-l9"), 1242 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo, "vdd-l8-l9"), 1243 {} 1244 }; 1245 1246 static const struct rpmh_vreg_init_data pm8350_vreg_data[] = { 1247 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1248 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1249 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1250 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps510, "vdd-s4"), 1251 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps510, "vdd-s5"), 1252 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1253 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps510, "vdd-s7"), 1254 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps510, "vdd-s8"), 1255 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps510, "vdd-s9"), 1256 RPMH_VREG("smps10", SMPS, 10, &pmic5_hfsmps510, "vdd-s10"), 1257 RPMH_VREG("smps11", SMPS, 11, &pmic5_hfsmps510, "vdd-s11"), 1258 RPMH_VREG("smps12", SMPS, 12, &pmic5_hfsmps510, "vdd-s12"), 1259 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l4"), 1260 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo, "vdd-l2-l7"), 1261 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3-l5"), 1262 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l1-l4"), 1263 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo, "vdd-l3-l5"), 1264 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l6-l9-l10"), 1265 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l2-l7"), 1266 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l8"), 1267 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l6-l9-l10"), 1268 RPMH_VREG("ldo10", LDO, 10, &pmic5_nldo, "vdd-l6-l9-l10"), 1269 {} 1270 }; 1271 1272 static const struct rpmh_vreg_init_data pm8350c_vreg_data[] = { 1273 RPMH_VREG("smps1", SMPS, 1, &pmic5_hfsmps515, "vdd-s1"), 1274 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1275 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1276 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps510, "vdd-s4"), 1277 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps510, "vdd-s5"), 1278 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1279 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps510, "vdd-s7"), 1280 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps510, "vdd-s8"), 1281 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps510, "vdd-s9"), 1282 RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps510, "vdd-s10"), 1283 RPMH_VREG("ldo1", LDO, 1, &pmic5_pldo_lv, "vdd-l1-l12"), 1284 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo_lv, "vdd-l2-l8"), 1285 RPMH_VREG("ldo3", LDO, 3, &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1286 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1287 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1288 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l6-l9-l11"), 1289 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1290 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo_lv, "vdd-l2-l8"), 1291 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo, "vdd-l6-l9-l11"), 1292 RPMH_VREG("ldo10", LDO, 10, &pmic5_nldo, "vdd-l10"), 1293 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, "vdd-l6-l9-l11"), 1294 RPMH_VREG("ldo12", LDO, 12, &pmic5_pldo_lv, "vdd-l1-l12"), 1295 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1296 RPMH_VREG("bob", BOB, 1, &pmic5_bob, "vdd-bob"), 1297 {} 1298 }; 1299 1300 static const struct rpmh_vreg_init_data pm8450_vreg_data[] = { 1301 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps520, "vdd-s1"), 1302 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps520, "vdd-s2"), 1303 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps520, "vdd-s3"), 1304 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps520, "vdd-s4"), 1305 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps520, "vdd-s5"), 1306 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps520, "vdd-s6"), 1307 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1"), 1308 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2"), 1309 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1310 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo_lv, "vdd-l4"), 1311 {} 1312 }; 1313 1314 static const struct rpmh_vreg_init_data pm8550_vreg_data[] = { 1315 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1-l4-l10"), 1316 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo, "vdd-l2-l13-l14"), 1317 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l3"), 1318 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo515, "vdd-l1-l4-l10"), 1319 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l5-l16"), 1320 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l6-l7"), 1321 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l6-l7"), 1322 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo, "vdd-l8-l9"), 1323 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo, "vdd-l8-l9"), 1324 RPMH_VREG("ldo10", LDO, 10, &pmic5_nldo515, "vdd-l1-l4-l10"), 1325 RPMH_VREG("ldo11", LDO, 11, &pmic5_nldo515, "vdd-l11"), 1326 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo515, "vdd-l12"), 1327 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l2-l13-l14"), 1328 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo, "vdd-l2-l13-l14"), 1329 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo515, "vdd-l15"), 1330 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l5-l16"), 1331 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo, "vdd-l17"), 1332 RPMH_VREG("bob1", BOB, 1, &pmic5_bob, "vdd-bob1"), 1333 RPMH_VREG("bob2", BOB, 2, &pmic5_bob, "vdd-bob2"), 1334 {} 1335 }; 1336 1337 static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = { 1338 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"), 1339 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"), 1340 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"), 1341 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"), 1342 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"), 1343 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"), 1344 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1"), 1345 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2"), 1346 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l3"), 1347 {} 1348 }; 1349 1350 static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = { 1351 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"), 1352 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"), 1353 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"), 1354 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"), 1355 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"), 1356 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"), 1357 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps525, "vdd-s7"), 1358 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps525, "vdd-s8"), 1359 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1"), 1360 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2"), 1361 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l3"), 1362 {} 1363 }; 1364 1365 static const struct rpmh_vreg_init_data pmc8380_vreg_data[] = { 1366 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"), 1367 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"), 1368 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"), 1369 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"), 1370 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"), 1371 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"), 1372 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps525, "vdd-s7"), 1373 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps525, "vdd-s8"), 1374 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1"), 1375 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2"), 1376 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l3"), 1377 {} 1378 }; 1379 1380 static const struct rpmh_vreg_init_data pm8009_vreg_data[] = { 1381 RPMH_VREG("smps1", SMPS, 1, &pmic5_hfsmps510, "vdd-s1"), 1382 RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps515, "vdd-s2"), 1383 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1"), 1384 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2"), 1385 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1386 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l4"), 1387 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l5-l6"), 1388 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l5-l6"), 1389 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo_lv, "vdd-l7"), 1390 {} 1391 }; 1392 1393 static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = { 1394 RPMH_VREG("smps1", SMPS, 1, &pmic5_hfsmps510, "vdd-s1"), 1395 RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps515_1, "vdd-s2"), 1396 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1"), 1397 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2"), 1398 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1399 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l4"), 1400 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l5-l6"), 1401 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l5-l6"), 1402 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo_lv, "vdd-l7"), 1403 {} 1404 }; 1405 1406 static const struct rpmh_vreg_init_data pm8010_vreg_data[] = { 1407 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo502, "vdd-l1-l2"), 1408 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo502, "vdd-l1-l2"), 1409 RPMH_VREG("ldo3", LDO, 3, &pmic5_pldo502ln, "vdd-l3-l4"), 1410 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo502ln, "vdd-l3-l4"), 1411 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo502, "vdd-l5"), 1412 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo502ln, "vdd-l6"), 1413 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo502, "vdd-l7"), 1414 }; 1415 1416 static const struct rpmh_vreg_init_data pm6150_vreg_data[] = { 1417 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1418 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1419 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1420 RPMH_VREG("smps4", SMPS, 4, &pmic5_hfsmps510, "vdd-s4"), 1421 RPMH_VREG("smps5", SMPS, 5, &pmic5_hfsmps510, "vdd-s5"), 1422 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1"), 1423 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2-l3"), 1424 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l2-l3"), 1425 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l4-l7-l8"), 1426 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1427 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l6"), 1428 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo, "vdd-l4-l7-l8"), 1429 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l4-l7-l8"), 1430 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l9"), 1431 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo_lv, "vdd-l10-l14-l15"), 1432 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo_lv, "vdd-l11-l12-l13"), 1433 RPMH_VREG("ldo12", LDO, 12, &pmic5_pldo_lv, "vdd-l11-l12-l13"), 1434 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo_lv, "vdd-l11-l12-l13"), 1435 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo_lv, "vdd-l10-l14-l15"), 1436 RPMH_VREG("ldo15", LDO, 15, &pmic5_pldo_lv, "vdd-l10-l14-l15"), 1437 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1438 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1439 RPMH_VREG("ldo18", LDO, 18, &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1440 RPMH_VREG("ldo19", LDO, 19, &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1441 {} 1442 }; 1443 1444 static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = { 1445 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1446 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps510, "vdd-s2"), 1447 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps510, "vdd-s3"), 1448 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps510, "vdd-s4"), 1449 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps510, "vdd-s5"), 1450 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1451 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps510, "vdd-s7"), 1452 RPMH_VREG("smps8", SMPS, 8, &pmic5_hfsmps510, "vdd-s8"), 1453 RPMH_VREG("ldo1", LDO, 1, &pmic5_pldo_lv, "vdd-l1-l8"), 1454 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2-l3"), 1455 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l2-l3"), 1456 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo, "vdd-l4-l5-l6"), 1457 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l4-l5-l6"), 1458 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l4-l5-l6"), 1459 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l7-l11"), 1460 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo, "vdd-l1-l8"), 1461 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo, "vdd-l9-l10"), 1462 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l9-l10"), 1463 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, "vdd-l7-l11"), 1464 RPMH_VREG("bob", BOB, 1, &pmic5_bob, "vdd-bob"), 1465 {} 1466 }; 1467 1468 static const struct rpmh_vreg_init_data pm6350_vreg_data[] = { 1469 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, NULL), 1470 RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps510, NULL), 1471 /* smps3 - smps5 not configured */ 1472 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, NULL), 1473 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo, NULL), 1474 RPMH_VREG("ldo3", LDO, 3, &pmic5_pldo, NULL), 1475 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, NULL), 1476 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, NULL), 1477 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, NULL), 1478 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, NULL), 1479 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo, NULL), 1480 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo, NULL), 1481 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, NULL), 1482 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, NULL), 1483 RPMH_VREG("ldo12", LDO, 12, &pmic5_pldo, NULL), 1484 RPMH_VREG("ldo13", LDO, 13, &pmic5_nldo, NULL), 1485 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo, NULL), 1486 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo, NULL), 1487 RPMH_VREG("ldo16", LDO, 16, &pmic5_nldo, NULL), 1488 /* ldo17 not configured */ 1489 RPMH_VREG("ldo18", LDO, 18, &pmic5_nldo, NULL), 1490 RPMH_VREG("ldo19", LDO, 19, &pmic5_nldo, NULL), 1491 RPMH_VREG("ldo20", LDO, 20, &pmic5_nldo, NULL), 1492 RPMH_VREG("ldo21", LDO, 21, &pmic5_nldo, NULL), 1493 RPMH_VREG("ldo22", LDO, 22, &pmic5_nldo, NULL), 1494 }; 1495 1496 static const struct rpmh_vreg_init_data pmcx0102_vreg_data[] = { 1497 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps530, "vdd-s1"), 1498 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps530, "vdd-s2"), 1499 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps530, "vdd-s3"), 1500 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps530, "vdd-s4"), 1501 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps530, "vdd-s5"), 1502 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps530, "vdd-s6"), 1503 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps530, "vdd-s7"), 1504 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps530, "vdd-s8"), 1505 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps530, "vdd-s9"), 1506 RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps530, "vdd-s10"), 1507 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo530, "vdd-l1"), 1508 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo530, "vdd-l2"), 1509 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo530, "vdd-l3"), 1510 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo530, "vdd-l4"), 1511 {} 1512 }; 1513 1514 static const struct rpmh_vreg_init_data pmh0101_vreg_data[] = { 1515 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo530, "vdd-l1-l4-l10"), 1516 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo530_mvp300, "vdd-l2-l13-l14"), 1517 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo530, "vdd-l3-l11"), 1518 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo530, "vdd-l1-l4-l10"), 1519 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo530_mvp150, "vdd-l5-l16"), 1520 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo530_mvp300, "vdd-l6-l7"), 1521 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo530_mvp300, "vdd-l6-l7"), 1522 RPMH_VREG("ldo8", LDO, 8, &pmic5_pldo530_mvp150, "vdd-l8-l9"), 1523 RPMH_VREG("ldo9", LDO, 9, &pmic5_pldo515_mv, "vdd-l8-l9"), 1524 RPMH_VREG("ldo10", LDO, 10, &pmic5_nldo530, "vdd-l1-l4-l10"), 1525 RPMH_VREG("ldo11", LDO, 11, &pmic5_nldo530, "vdd-l3-l11"), 1526 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo530, "vdd-l12"), 1527 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo530_mvp150, "vdd-l2-l13-l14"), 1528 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo530_mvp150, "vdd-l2-l13-l14"), 1529 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo530, "vdd-l15"), 1530 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo530_mvp600, "vdd-l5-l16"), 1531 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo515_mv, "vdd-l17"), 1532 RPMH_VREG("ldo18", LDO, 18, &pmic5_nldo530, "vdd-l18"), 1533 RPMH_VREG("bob1", BOB, 1, &pmic5_bob, "vdd-bob1"), 1534 RPMH_VREG("bob2", BOB, 2, &pmic5_bob, "vdd-bob2"), 1535 {} 1536 }; 1537 1538 static const struct rpmh_vreg_init_data pmh0104_vreg_data[] = { 1539 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps530, "vdd-s1"), 1540 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps530, "vdd-s2"), 1541 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps530, "vdd-s3"), 1542 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps530, "vdd-s4"), 1543 {} 1544 }; 1545 1546 static const struct rpmh_vreg_init_data pmh0110_vreg_data[] = { 1547 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps530, "vdd-s1"), 1548 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps530, "vdd-s2"), 1549 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps530, "vdd-s3"), 1550 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps530, "vdd-s4"), 1551 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps530, "vdd-s5"), 1552 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps530, "vdd-s6"), 1553 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps530, "vdd-s7"), 1554 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps530, "vdd-s8"), 1555 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps530, "vdd-s9"), 1556 RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps530, "vdd-s10"), 1557 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo530, "vdd-l1"), 1558 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo530, "vdd-l2"), 1559 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo530, "vdd-l3"), 1560 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo530, "vdd-l4"), 1561 {} 1562 }; 1563 1564 static const struct rpmh_vreg_init_data pmx55_vreg_data[] = { 1565 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1566 RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps510, "vdd-s2"), 1567 RPMH_VREG("smps3", SMPS, 3, &pmic5_hfsmps510, "vdd-s3"), 1568 RPMH_VREG("smps4", SMPS, 4, &pmic5_hfsmps510, "vdd-s4"), 1569 RPMH_VREG("smps5", SMPS, 5, &pmic5_hfsmps510, "vdd-s5"), 1570 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1571 RPMH_VREG("smps7", SMPS, 7, &pmic5_hfsmps510, "vdd-s7"), 1572 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l2"), 1573 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l1-l2"), 1574 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3-l9"), 1575 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l4-l12"), 1576 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l5-l6"), 1577 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l5-l6"), 1578 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo, "vdd-l7-l8"), 1579 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l7-l8"), 1580 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l3-l9"), 1581 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l10-l11-l13"), 1582 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, "vdd-l10-l11-l13"), 1583 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo, "vdd-l4-l12"), 1584 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l10-l11-l13"), 1585 RPMH_VREG("ldo14", LDO, 14, &pmic5_nldo, "vdd-l14"), 1586 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo, "vdd-l15"), 1587 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l16"), 1588 {} 1589 }; 1590 1591 static const struct rpmh_vreg_init_data pmx65_vreg_data[] = { 1592 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps510, "vdd-s1"), 1593 RPMH_VREG("smps2", SMPS, 2, &pmic5_hfsmps510, "vdd-s2"), 1594 RPMH_VREG("smps3", SMPS, 3, &pmic5_hfsmps510, "vdd-s3"), 1595 RPMH_VREG("smps4", SMPS, 4, &pmic5_hfsmps510, "vdd-s4"), 1596 RPMH_VREG("smps5", SMPS, 5, &pmic5_hfsmps510, "vdd-s5"), 1597 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps510, "vdd-s6"), 1598 RPMH_VREG("smps7", SMPS, 7, &pmic5_hfsmps510, "vdd-s7"), 1599 RPMH_VREG("smps8", SMPS, 8, &pmic5_hfsmps510, "vdd-s8"), 1600 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1"), 1601 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l2-l18"), 1602 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1603 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l4"), 1604 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo, "vdd-l5-l6-l16"), 1605 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo, "vdd-l5-l6-l16"), 1606 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo, "vdd-l7"), 1607 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l8-l9"), 1608 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l8-l9"), 1609 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l10"), 1610 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, "vdd-l11-l13"), 1611 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo, "vdd-l12"), 1612 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l11-l13"), 1613 RPMH_VREG("ldo14", LDO, 14, &pmic5_nldo, "vdd-l14"), 1614 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo, "vdd-l15"), 1615 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l5-l6-l16"), 1616 RPMH_VREG("ldo17", LDO, 17, &pmic5_nldo, "vdd-l17"), 1617 /* ldo18 not configured */ 1618 RPMH_VREG("ldo19", LDO, 19, &pmic5_nldo, "vdd-l19"), 1619 RPMH_VREG("ldo20", LDO, 20, &pmic5_nldo, "vdd-l20"), 1620 RPMH_VREG("ldo21", LDO, 21, &pmic5_nldo, "vdd-l21"), 1621 {} 1622 }; 1623 1624 static const struct rpmh_vreg_init_data pmx75_vreg_data[] = { 1625 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"), 1626 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"), 1627 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"), 1628 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"), 1629 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"), 1630 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"), 1631 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps525, "vdd-s7"), 1632 RPMH_VREG("smps8", SMPS, 8, &pmic5_ftsmps525, "vdd-s8"), 1633 RPMH_VREG("smps9", SMPS, 9, &pmic5_ftsmps525, "vdd-s9"), 1634 RPMH_VREG("smps10", SMPS, 10, &pmic5_ftsmps525, "vdd-s10"), 1635 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1"), 1636 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2-18"), 1637 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l3"), 1638 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo515, "vdd-l4-l16"), 1639 RPMH_VREG("ldo5", LDO, 5, &pmic5_pldo_lv, "vdd-l5-l6"), 1640 RPMH_VREG("ldo6", LDO, 6, &pmic5_pldo_lv, "vdd-l5-l6"), 1641 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo515, "vdd-l7"), 1642 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo515, "vdd-l8-l9"), 1643 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo515, "vdd-l8-l9"), 1644 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo, "vdd-l10"), 1645 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo, "vdd-l11-l13"), 1646 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo515, "vdd-l12"), 1647 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo, "vdd-l11-l13"), 1648 RPMH_VREG("ldo14", LDO, 14, &pmic5_nldo515, "vdd-l14"), 1649 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo515, "vdd-l15"), 1650 RPMH_VREG("ldo16", LDO, 16, &pmic5_nldo515, "vdd-l4-l16"), 1651 RPMH_VREG("ldo17", LDO, 17, &pmic5_nldo515, "vdd-l17"), 1652 /* ldo18 not configured */ 1653 RPMH_VREG("ldo19", LDO, 19, &pmic5_nldo515, "vdd-l19"), 1654 RPMH_VREG("ldo20", LDO, 20, &pmic5_nldo515, "vdd-l20-l21"), 1655 RPMH_VREG("ldo21", LDO, 21, &pmic5_nldo515, "vdd-l20-l21"), 1656 }; 1657 1658 static const struct rpmh_vreg_init_data pm7325_vreg_data[] = { 1659 RPMH_VREG("smps1", SMPS, 1, &pmic5_hfsmps510, "vdd-s1"), 1660 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps520, "vdd-s2"), 1661 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps520, "vdd-s3"), 1662 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps520, "vdd-s4"), 1663 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps520, "vdd-s5"), 1664 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps520, "vdd-s6"), 1665 RPMH_VREG("smps7", SMPS, 7, &pmic5_ftsmps520, "vdd-s7"), 1666 RPMH_VREG("smps8", SMPS, 8, &pmic5_hfsmps510, "vdd-s8"), 1667 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1668 RPMH_VREG("ldo2", LDO, 2, &pmic5_pldo, "vdd-l2-l7"), 1669 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1670 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1671 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo, "vdd-l5"), 1672 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l6-l9-l10"), 1673 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l2-l7"), 1674 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l8"), 1675 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l6-l9-l10"), 1676 RPMH_VREG("ldo10", LDO, 10, &pmic5_nldo, "vdd-l6-l9-l10"), 1677 RPMH_VREG("ldo11", LDO, 11, &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1678 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1679 RPMH_VREG("ldo13", LDO, 13, &pmic5_nldo, "vdd-l13"), 1680 RPMH_VREG("ldo14", LDO, 14, &pmic5_nldo, "vdd-l14-l16"), 1681 RPMH_VREG("ldo15", LDO, 15, &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1682 RPMH_VREG("ldo16", LDO, 16, &pmic5_nldo, "vdd-l14-l16"), 1683 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1684 RPMH_VREG("ldo18", LDO, 18, &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1685 RPMH_VREG("ldo19", LDO, 19, &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1686 {} 1687 }; 1688 1689 static const struct rpmh_vreg_init_data pm7550_vreg_data[] = { 1690 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps525, "vdd-s1"), 1691 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps525, "vdd-s2"), 1692 RPMH_VREG("smps3", SMPS, 3, &pmic5_ftsmps525, "vdd-s3"), 1693 RPMH_VREG("smps4", SMPS, 4, &pmic5_ftsmps525, "vdd-s4"), 1694 RPMH_VREG("smps5", SMPS, 5, &pmic5_ftsmps525, "vdd-s5"), 1695 RPMH_VREG("smps6", SMPS, 6, &pmic5_ftsmps525, "vdd-s6"), 1696 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1"), 1697 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l2-l3"), 1698 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l2-l3"), 1699 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo515, "vdd-l4-l5"), 1700 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo515, "vdd-l4-l5"), 1701 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo515, "vdd-l6"), 1702 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo515, "vdd-l7"), 1703 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo515, "vdd-l8"), 1704 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo515, "vdd-l9-l10"), 1705 RPMH_VREG("ldo10", LDO, 10, &pmic5_nldo515, "vdd-l9-l10"), 1706 RPMH_VREG("ldo11", LDO, 11, &pmic5_nldo515, "vdd-l11"), 1707 RPMH_VREG("ldo12", LDO, 12, &pmic5_pldo515_mv, "vdd-l12-l14"), 1708 RPMH_VREG("ldo13", LDO, 13, &pmic5_pldo515_mv, "vdd-l13-l16"), 1709 RPMH_VREG("ldo14", LDO, 14, &pmic5_pldo, "vdd-l12-l14"), 1710 RPMH_VREG("ldo15", LDO, 15, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1711 RPMH_VREG("ldo16", LDO, 16, &pmic5_pldo, "vdd-l13-l16"), 1712 RPMH_VREG("ldo17", LDO, 17, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1713 RPMH_VREG("ldo18", LDO, 18, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1714 RPMH_VREG("ldo19", LDO, 19, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1715 RPMH_VREG("ldo20", LDO, 20, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1716 RPMH_VREG("ldo21", LDO, 21, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1717 RPMH_VREG("ldo22", LDO, 22, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1718 RPMH_VREG("ldo23", LDO, 23, &pmic5_pldo, "vdd-l15-l17-l18-l19-l20-l21-l22-l23"), 1719 RPMH_VREG("bob", BOB, 1, &pmic5_bob, "vdd-bob"), 1720 {} 1721 }; 1722 1723 static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = { 1724 RPMH_VREG("smps1", SMPS, 1, &pmic5_ftsmps520, "vdd-s1"), 1725 RPMH_VREG("smps2", SMPS, 2, &pmic5_ftsmps520, "vdd-s2"), 1726 RPMH_VREG("smps3", SMPS, 3, &pmic5_hfsmps515, "vdd-s3"), 1727 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l2"), 1728 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l1-l2"), 1729 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1730 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo_lv, "vdd-l4"), 1731 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo, "vdd-l5-l6"), 1732 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l5-l6"), 1733 RPMH_VREG("ldo7", LDO, 7, &pmic5_pldo, "vdd-l7-bob"), 1734 {} 1735 }; 1736 1737 static const struct rpmh_vreg_init_data pmr735b_vreg_data[] = { 1738 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo, "vdd-l1-l2"), 1739 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo, "vdd-l1-l2"), 1740 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo, "vdd-l3"), 1741 RPMH_VREG("ldo4", LDO, 4, &pmic5_pldo_lv, "vdd-l4"), 1742 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo, "vdd-l5"), 1743 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo, "vdd-l6"), 1744 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo, "vdd-l7-l8"), 1745 RPMH_VREG("ldo8", LDO, 8, &pmic5_nldo, "vdd-l7-l8"), 1746 RPMH_VREG("ldo9", LDO, 9, &pmic5_nldo, "vdd-l9"), 1747 RPMH_VREG("ldo10", LDO, 10, &pmic5_pldo_lv, "vdd-l10"), 1748 RPMH_VREG("ldo11", LDO, 11, &pmic5_nldo, "vdd-l11"), 1749 RPMH_VREG("ldo12", LDO, 12, &pmic5_nldo, "vdd-l12"), 1750 {} 1751 }; 1752 1753 static const struct rpmh_vreg_init_data pmr735d_vreg_data[] = { 1754 RPMH_VREG("ldo1", LDO, 1, &pmic5_nldo515, "vdd-l1-l2-l5"), 1755 RPMH_VREG("ldo2", LDO, 2, &pmic5_nldo515, "vdd-l1-l2-l5"), 1756 RPMH_VREG("ldo3", LDO, 3, &pmic5_nldo515, "vdd-l3-l4"), 1757 RPMH_VREG("ldo4", LDO, 4, &pmic5_nldo515, "vdd-l3-l4"), 1758 RPMH_VREG("ldo5", LDO, 5, &pmic5_nldo515, "vdd-l1-l2-l5"), 1759 RPMH_VREG("ldo6", LDO, 6, &pmic5_nldo515, "vdd-l6"), 1760 RPMH_VREG("ldo7", LDO, 7, &pmic5_nldo515, "vdd-l7"), 1761 {} 1762 }; 1763 1764 static const struct rpmh_vreg_init_data pm660_vreg_data[] = { 1765 RPMH_VREG("smps1", SMPS, 1, &pmic4_ftsmps426, "vdd-s1"), 1766 RPMH_VREG("smps2", SMPS, 2, &pmic4_ftsmps426, "vdd-s2"), 1767 RPMH_VREG("smps3", SMPS, 3, &pmic4_ftsmps426, "vdd-s3"), 1768 RPMH_VREG("smps4", SMPS, 4, &pmic4_hfsmps3, "vdd-s4"), 1769 RPMH_VREG("smps5", SMPS, 5, &pmic4_hfsmps3, "vdd-s5"), 1770 RPMH_VREG("smps6", SMPS, 6, &pmic4_hfsmps3, "vdd-s6"), 1771 RPMH_VREG("ldo1", LDO, 1, &pmic4_nldo, "vdd-l1-l6-l7"), 1772 RPMH_VREG("ldo2", LDO, 2, &pmic4_nldo, "vdd-l2-l3"), 1773 RPMH_VREG("ldo3", LDO, 3, &pmic4_nldo, "vdd-l2-l3"), 1774 /* ldo4 is inaccessible on PM660 */ 1775 RPMH_VREG("ldo5", LDO, 5, &pmic4_nldo, "vdd-l5"), 1776 RPMH_VREG("ldo6", LDO, 6, &pmic4_nldo, "vdd-l1-l6-l7"), 1777 RPMH_VREG("ldo7", LDO, 7, &pmic4_nldo, "vdd-l1-l6-l7"), 1778 RPMH_VREG("ldo8", LDO, 8, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1779 RPMH_VREG("ldo9", LDO, 9, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1780 RPMH_VREG("ldo10", LDO, 10, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1781 RPMH_VREG("ldo11", LDO, 11, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1782 RPMH_VREG("ldo12", LDO, 12, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1783 RPMH_VREG("ldo13", LDO, 13, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1784 RPMH_VREG("ldo14", LDO, 14, &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1785 RPMH_VREG("ldo15", LDO, 15, &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1786 RPMH_VREG("ldo16", LDO, 16, &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1787 RPMH_VREG("ldo17", LDO, 17, &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1788 RPMH_VREG("ldo18", LDO, 18, &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1789 RPMH_VREG("ldo19", LDO, 19, &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1790 {} 1791 }; 1792 1793 static const struct rpmh_vreg_init_data pm660l_vreg_data[] = { 1794 RPMH_VREG("smps1", SMPS, 1, &pmic4_ftsmps426, "vdd-s1"), 1795 RPMH_VREG("smps2", SMPS, 2, &pmic4_ftsmps426, "vdd-s2"), 1796 RPMH_VREG("smps3", SMPS, 3, &pmic4_ftsmps426, "vdd-s3-s4"), 1797 RPMH_VREG("smps5", SMPS, 5, &pmic4_ftsmps426, "vdd-s5"), 1798 RPMH_VREG("ldo1", LDO, 1, &pmic4_nldo, "vdd-l1-l9-l10"), 1799 RPMH_VREG("ldo2", LDO, 2, &pmic4_pldo, "vdd-l2"), 1800 RPMH_VREG("ldo3", LDO, 3, &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1801 RPMH_VREG("ldo4", LDO, 4, &pmic4_pldo, "vdd-l4-l6"), 1802 RPMH_VREG("ldo5", LDO, 5, &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1803 RPMH_VREG("ldo6", LDO, 6, &pmic4_pldo, "vdd-l4-l6"), 1804 RPMH_VREG("ldo7", LDO, 7, &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1805 RPMH_VREG("ldo8", LDO, 8, &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1806 RPMH_VREG("bob", BOB, 1, &pmic4_bob, "vdd-bob"), 1807 {} 1808 }; 1809 1810 static int rpmh_regulator_probe(struct platform_device *pdev) 1811 { 1812 struct device *dev = &pdev->dev; 1813 const struct rpmh_vreg_init_data *vreg_data; 1814 struct rpmh_vreg *vreg; 1815 const char *pmic_id; 1816 int ret; 1817 1818 vreg_data = of_device_get_match_data(dev); 1819 if (!vreg_data) 1820 return -ENODEV; 1821 1822 ret = of_property_read_string(dev->of_node, "qcom,pmic-id", &pmic_id); 1823 if (ret < 0) { 1824 dev_err(dev, "qcom,pmic-id missing in DT node\n"); 1825 return ret; 1826 } 1827 1828 for_each_available_child_of_node_scoped(dev->of_node, node) { 1829 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); 1830 if (!vreg) 1831 return -ENOMEM; 1832 1833 ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id, 1834 vreg_data); 1835 if (ret < 0) 1836 return ret; 1837 } 1838 1839 return 0; 1840 } 1841 1842 static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = { 1843 { 1844 .compatible = "qcom,pm8005-rpmh-regulators", 1845 .data = pm8005_vreg_data, 1846 }, 1847 { 1848 .compatible = "qcom,pm8009-rpmh-regulators", 1849 .data = pm8009_vreg_data, 1850 }, 1851 { 1852 .compatible = "qcom,pm8009-1-rpmh-regulators", 1853 .data = pm8009_1_vreg_data, 1854 }, 1855 { 1856 .compatible = "qcom,pm8010-rpmh-regulators", 1857 .data = pm8010_vreg_data, 1858 }, 1859 { 1860 .compatible = "qcom,pm8150-rpmh-regulators", 1861 .data = pm8150_vreg_data, 1862 }, 1863 { 1864 .compatible = "qcom,pm8150l-rpmh-regulators", 1865 .data = pm8150l_vreg_data, 1866 }, 1867 { 1868 .compatible = "qcom,pm8350-rpmh-regulators", 1869 .data = pm8350_vreg_data, 1870 }, 1871 { 1872 .compatible = "qcom,pm8350c-rpmh-regulators", 1873 .data = pm8350c_vreg_data, 1874 }, 1875 { 1876 .compatible = "qcom,pm8450-rpmh-regulators", 1877 .data = pm8450_vreg_data, 1878 }, 1879 { 1880 .compatible = "qcom,pm8550-rpmh-regulators", 1881 .data = pm8550_vreg_data, 1882 }, 1883 { 1884 .compatible = "qcom,pm8550ve-rpmh-regulators", 1885 .data = pm8550ve_vreg_data, 1886 }, 1887 { 1888 .compatible = "qcom,pm8550vs-rpmh-regulators", 1889 .data = pm8550vs_vreg_data, 1890 }, 1891 { 1892 .compatible = "qcom,pm8998-rpmh-regulators", 1893 .data = pm8998_vreg_data, 1894 }, 1895 { 1896 .compatible = "qcom,pmau0102-rpmh-regulators", 1897 .data = pmau0102_vreg_data, 1898 }, 1899 { 1900 .compatible = "qcom,pmg1110-rpmh-regulators", 1901 .data = pmg1110_vreg_data, 1902 }, 1903 { 1904 .compatible = "qcom,pmi8998-rpmh-regulators", 1905 .data = pmi8998_vreg_data, 1906 }, 1907 { 1908 .compatible = "qcom,pm6150-rpmh-regulators", 1909 .data = pm6150_vreg_data, 1910 }, 1911 { 1912 .compatible = "qcom,pm6150l-rpmh-regulators", 1913 .data = pm6150l_vreg_data, 1914 }, 1915 { 1916 .compatible = "qcom,pm6350-rpmh-regulators", 1917 .data = pm6350_vreg_data, 1918 }, 1919 { 1920 .compatible = "qcom,pmc8180-rpmh-regulators", 1921 .data = pm8150_vreg_data, 1922 }, 1923 { 1924 .compatible = "qcom,pmc8180c-rpmh-regulators", 1925 .data = pm8150l_vreg_data, 1926 }, 1927 { 1928 .compatible = "qcom,pmc8380-rpmh-regulators", 1929 .data = pmc8380_vreg_data, 1930 }, 1931 { 1932 .compatible = "qcom,pmcx0102-rpmh-regulators", 1933 .data = pmcx0102_vreg_data, 1934 }, 1935 { 1936 .compatible = "qcom,pmh0101-rpmh-regulators", 1937 .data = pmh0101_vreg_data, 1938 }, 1939 { 1940 .compatible = "qcom,pmh0104-rpmh-regulators", 1941 .data = pmh0104_vreg_data, 1942 }, 1943 { 1944 .compatible = "qcom,pmh0110-rpmh-regulators", 1945 .data = pmh0110_vreg_data, 1946 }, 1947 { 1948 .compatible = "qcom,pmm8155au-rpmh-regulators", 1949 .data = pmm8155au_vreg_data, 1950 }, 1951 { 1952 .compatible = "qcom,pmm8654au-rpmh-regulators", 1953 .data = pmm8654au_vreg_data, 1954 }, 1955 { 1956 .compatible = "qcom,pmx55-rpmh-regulators", 1957 .data = pmx55_vreg_data, 1958 }, 1959 { 1960 .compatible = "qcom,pmx65-rpmh-regulators", 1961 .data = pmx65_vreg_data, 1962 }, 1963 { 1964 .compatible = "qcom,pmx75-rpmh-regulators", 1965 .data = pmx75_vreg_data, 1966 }, 1967 { 1968 .compatible = "qcom,pm7325-rpmh-regulators", 1969 .data = pm7325_vreg_data, 1970 }, 1971 { 1972 .compatible = "qcom,pm7550-rpmh-regulators", 1973 .data = pm7550_vreg_data, 1974 }, 1975 { 1976 .compatible = "qcom,pmr735a-rpmh-regulators", 1977 .data = pmr735a_vreg_data, 1978 }, 1979 { 1980 .compatible = "qcom,pmr735b-rpmh-regulators", 1981 .data = pmr735b_vreg_data, 1982 }, 1983 { 1984 .compatible = "qcom,pmr735d-rpmh-regulators", 1985 .data = pmr735d_vreg_data, 1986 }, 1987 { 1988 .compatible = "qcom,pm660-rpmh-regulators", 1989 .data = pm660_vreg_data, 1990 }, 1991 { 1992 .compatible = "qcom,pm660l-rpmh-regulators", 1993 .data = pm660l_vreg_data, 1994 }, 1995 {} 1996 }; 1997 MODULE_DEVICE_TABLE(of, rpmh_regulator_match_table); 1998 1999 static struct platform_driver rpmh_regulator_driver = { 2000 .driver = { 2001 .name = "qcom-rpmh-regulator", 2002 .probe_type = PROBE_PREFER_ASYNCHRONOUS, 2003 .of_match_table = of_match_ptr(rpmh_regulator_match_table), 2004 }, 2005 .probe = rpmh_regulator_probe, 2006 }; 2007 module_platform_driver(rpmh_regulator_driver); 2008 2009 MODULE_DESCRIPTION("Qualcomm RPMh regulator driver"); 2010 MODULE_LICENSE("GPL v2"); 2011