1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. 3 4 #define pr_fmt(fmt) "%s: " fmt, __func__ 5 6 #include <linux/err.h> 7 #include <linux/kernel.h> 8 #include <linux/module.h> 9 #include <linux/of.h> 10 #include <linux/platform_device.h> 11 #include <linux/slab.h> 12 #include <linux/string.h> 13 #include <linux/regulator/driver.h> 14 #include <linux/regulator/machine.h> 15 #include <linux/regulator/of_regulator.h> 16 17 #include <soc/qcom/cmd-db.h> 18 #include <soc/qcom/rpmh.h> 19 20 #include <dt-bindings/regulator/qcom,rpmh-regulator.h> 21 22 /** 23 * enum rpmh_regulator_type - supported RPMh accelerator types 24 * @VRM: RPMh VRM accelerator which supports voting on enable, voltage, 25 * and mode of LDO, SMPS, and BOB type PMIC regulators. 26 * @XOB: RPMh XOB accelerator which supports voting on the enable state 27 * of PMIC regulators. 28 */ 29 enum rpmh_regulator_type { 30 VRM, 31 XOB, 32 }; 33 34 #define RPMH_REGULATOR_REG_VRM_VOLTAGE 0x0 35 #define RPMH_REGULATOR_REG_ENABLE 0x4 36 #define RPMH_REGULATOR_REG_VRM_MODE 0x8 37 38 #define PMIC4_LDO_MODE_RETENTION 4 39 #define PMIC4_LDO_MODE_LPM 5 40 #define PMIC4_LDO_MODE_HPM 7 41 42 #define PMIC4_SMPS_MODE_RETENTION 4 43 #define PMIC4_SMPS_MODE_PFM 5 44 #define PMIC4_SMPS_MODE_AUTO 6 45 #define PMIC4_SMPS_MODE_PWM 7 46 47 #define PMIC4_BOB_MODE_PASS 0 48 #define PMIC4_BOB_MODE_PFM 1 49 #define PMIC4_BOB_MODE_AUTO 2 50 #define PMIC4_BOB_MODE_PWM 3 51 52 #define PMIC5_LDO_MODE_RETENTION 3 53 #define PMIC5_LDO_MODE_LPM 4 54 #define PMIC5_LDO_MODE_HPM 7 55 56 #define PMIC5_SMPS_MODE_RETENTION 3 57 #define PMIC5_SMPS_MODE_PFM 4 58 #define PMIC5_SMPS_MODE_AUTO 6 59 #define PMIC5_SMPS_MODE_PWM 7 60 61 #define PMIC5_BOB_MODE_PASS 2 62 #define PMIC5_BOB_MODE_PFM 4 63 #define PMIC5_BOB_MODE_AUTO 6 64 #define PMIC5_BOB_MODE_PWM 7 65 66 /** 67 * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations 68 * @regulator_type: RPMh accelerator type used to manage this 69 * regulator 70 * @ops: Pointer to regulator ops callback structure 71 * @voltage_range: The single range of voltages supported by this 72 * PMIC regulator type 73 * @n_voltages: The number of unique voltage set points defined 74 * by voltage_range 75 * @hpm_min_load_uA: Minimum load current in microamps that requires 76 * high power mode (HPM) operation. This is used 77 * for LDO hardware type regulators only. 78 * @pmic_mode_map: Array indexed by regulator framework mode 79 * containing PMIC hardware modes. Must be large 80 * enough to index all framework modes supported 81 * by this regulator hardware type. 82 * @of_map_mode: Maps an RPMH_REGULATOR_MODE_* mode value defined 83 * in device tree to a regulator framework mode 84 */ 85 struct rpmh_vreg_hw_data { 86 enum rpmh_regulator_type regulator_type; 87 const struct regulator_ops *ops; 88 const struct linear_range voltage_range; 89 int n_voltages; 90 int hpm_min_load_uA; 91 const int *pmic_mode_map; 92 unsigned int (*of_map_mode)(unsigned int mode); 93 }; 94 95 /** 96 * struct rpmh_vreg - individual RPMh regulator data structure encapsulating a 97 * single regulator device 98 * @dev: Device pointer for the top-level PMIC RPMh 99 * regulator parent device. This is used as a 100 * handle in RPMh write requests. 101 * @addr: Base address of the regulator resource within 102 * an RPMh accelerator 103 * @rdesc: Regulator descriptor 104 * @hw_data: PMIC regulator configuration data for this RPMh 105 * regulator 106 * @always_wait_for_ack: Boolean flag indicating if a request must always 107 * wait for an ACK from RPMh before continuing even 108 * if it corresponds to a strictly lower power 109 * state (e.g. enabled --> disabled). 110 * @enabled: Flag indicating if the regulator is enabled or 111 * not 112 * @bypassed: Boolean indicating if the regulator is in 113 * bypass (pass-through) mode or not. This is 114 * only used by BOB rpmh-regulator resources. 115 * @voltage_selector: Selector used for get_voltage_sel() and 116 * set_voltage_sel() callbacks 117 * @mode: RPMh VRM regulator current framework mode 118 */ 119 struct rpmh_vreg { 120 struct device *dev; 121 u32 addr; 122 struct regulator_desc rdesc; 123 const struct rpmh_vreg_hw_data *hw_data; 124 bool always_wait_for_ack; 125 126 int enabled; 127 bool bypassed; 128 int voltage_selector; 129 unsigned int mode; 130 }; 131 132 /** 133 * struct rpmh_vreg_init_data - initialization data for an RPMh regulator 134 * @name: Name for the regulator which also corresponds 135 * to the device tree subnode name of the regulator 136 * @resource_name: RPMh regulator resource name format string. 137 * This must include exactly one field: '%s' which 138 * is filled at run-time with the PMIC ID provided 139 * by device tree property qcom,pmic-id. Example: 140 * "ldo%s1" for RPMh resource "ldoa1". 141 * @supply_name: Parent supply regulator name 142 * @hw_data: Configuration data for this PMIC regulator type 143 */ 144 struct rpmh_vreg_init_data { 145 const char *name; 146 const char *resource_name; 147 const char *supply_name; 148 const struct rpmh_vreg_hw_data *hw_data; 149 }; 150 151 /** 152 * rpmh_regulator_send_request() - send the request to RPMh 153 * @vreg: Pointer to the RPMh regulator 154 * @cmd: Pointer to the RPMh command to send 155 * @wait_for_ack: Boolean indicating if execution must wait until the 156 * request has been acknowledged as complete 157 * 158 * Return: 0 on success, errno on failure 159 */ 160 static int rpmh_regulator_send_request(struct rpmh_vreg *vreg, 161 struct tcs_cmd *cmd, bool wait_for_ack) 162 { 163 int ret; 164 165 if (wait_for_ack || vreg->always_wait_for_ack) 166 ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1); 167 else 168 ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 169 1); 170 171 return ret; 172 } 173 174 static int _rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev, 175 unsigned int selector, bool wait_for_ack) 176 { 177 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 178 struct tcs_cmd cmd = { 179 .addr = vreg->addr + RPMH_REGULATOR_REG_VRM_VOLTAGE, 180 }; 181 int ret; 182 183 /* VRM voltage control register is set with voltage in millivolts. */ 184 cmd.data = DIV_ROUND_UP(regulator_list_voltage_linear_range(rdev, 185 selector), 1000); 186 187 ret = rpmh_regulator_send_request(vreg, &cmd, wait_for_ack); 188 if (!ret) 189 vreg->voltage_selector = selector; 190 191 return ret; 192 } 193 194 static int rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev, 195 unsigned int selector) 196 { 197 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 198 199 if (vreg->enabled == -EINVAL) { 200 /* 201 * Cache the voltage and send it later when the regulator is 202 * enabled or disabled. 203 */ 204 vreg->voltage_selector = selector; 205 return 0; 206 } 207 208 return _rpmh_regulator_vrm_set_voltage_sel(rdev, selector, 209 selector > vreg->voltage_selector); 210 } 211 212 static int rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev *rdev) 213 { 214 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 215 216 return vreg->voltage_selector; 217 } 218 219 static int rpmh_regulator_is_enabled(struct regulator_dev *rdev) 220 { 221 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 222 223 return vreg->enabled; 224 } 225 226 static int rpmh_regulator_set_enable_state(struct regulator_dev *rdev, 227 bool enable) 228 { 229 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 230 struct tcs_cmd cmd = { 231 .addr = vreg->addr + RPMH_REGULATOR_REG_ENABLE, 232 .data = enable, 233 }; 234 int ret; 235 236 if (vreg->enabled == -EINVAL && 237 vreg->voltage_selector != -ENOTRECOVERABLE) { 238 ret = _rpmh_regulator_vrm_set_voltage_sel(rdev, 239 vreg->voltage_selector, true); 240 if (ret < 0) 241 return ret; 242 } 243 244 ret = rpmh_regulator_send_request(vreg, &cmd, enable); 245 if (!ret) 246 vreg->enabled = enable; 247 248 return ret; 249 } 250 251 static int rpmh_regulator_enable(struct regulator_dev *rdev) 252 { 253 return rpmh_regulator_set_enable_state(rdev, true); 254 } 255 256 static int rpmh_regulator_disable(struct regulator_dev *rdev) 257 { 258 return rpmh_regulator_set_enable_state(rdev, false); 259 } 260 261 static int rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg *vreg, 262 unsigned int mode, bool bypassed) 263 { 264 struct tcs_cmd cmd = { 265 .addr = vreg->addr + RPMH_REGULATOR_REG_VRM_MODE, 266 }; 267 int pmic_mode; 268 269 if (mode > REGULATOR_MODE_STANDBY) 270 return -EINVAL; 271 272 pmic_mode = vreg->hw_data->pmic_mode_map[mode]; 273 if (pmic_mode < 0) 274 return pmic_mode; 275 276 if (bypassed) 277 cmd.data = PMIC4_BOB_MODE_PASS; 278 else 279 cmd.data = pmic_mode; 280 281 return rpmh_regulator_send_request(vreg, &cmd, true); 282 } 283 284 static int rpmh_regulator_vrm_set_mode(struct regulator_dev *rdev, 285 unsigned int mode) 286 { 287 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 288 int ret; 289 290 if (mode == vreg->mode) 291 return 0; 292 293 ret = rpmh_regulator_vrm_set_mode_bypass(vreg, mode, vreg->bypassed); 294 if (!ret) 295 vreg->mode = mode; 296 297 return ret; 298 } 299 300 static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev) 301 { 302 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 303 304 return vreg->mode; 305 } 306 307 /** 308 * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the load 309 * @rdev: Regulator device pointer for the rpmh-regulator 310 * @input_uV: Input voltage 311 * @output_uV: Output voltage 312 * @load_uA: Aggregated load current in microamps 313 * 314 * This function is used in the regulator_ops for VRM type RPMh regulator 315 * devices. 316 * 317 * Return: 0 on success, errno on failure 318 */ 319 static unsigned int rpmh_regulator_vrm_get_optimum_mode( 320 struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA) 321 { 322 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 323 324 if (load_uA >= vreg->hw_data->hpm_min_load_uA) 325 return REGULATOR_MODE_NORMAL; 326 else 327 return REGULATOR_MODE_IDLE; 328 } 329 330 static int rpmh_regulator_vrm_set_bypass(struct regulator_dev *rdev, 331 bool enable) 332 { 333 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 334 int ret; 335 336 if (vreg->bypassed == enable) 337 return 0; 338 339 ret = rpmh_regulator_vrm_set_mode_bypass(vreg, vreg->mode, enable); 340 if (!ret) 341 vreg->bypassed = enable; 342 343 return ret; 344 } 345 346 static int rpmh_regulator_vrm_get_bypass(struct regulator_dev *rdev, 347 bool *enable) 348 { 349 struct rpmh_vreg *vreg = rdev_get_drvdata(rdev); 350 351 *enable = vreg->bypassed; 352 353 return 0; 354 } 355 356 static const struct regulator_ops rpmh_regulator_vrm_ops = { 357 .enable = rpmh_regulator_enable, 358 .disable = rpmh_regulator_disable, 359 .is_enabled = rpmh_regulator_is_enabled, 360 .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel, 361 .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel, 362 .list_voltage = regulator_list_voltage_linear_range, 363 .set_mode = rpmh_regulator_vrm_set_mode, 364 .get_mode = rpmh_regulator_vrm_get_mode, 365 }; 366 367 static const struct regulator_ops rpmh_regulator_vrm_drms_ops = { 368 .enable = rpmh_regulator_enable, 369 .disable = rpmh_regulator_disable, 370 .is_enabled = rpmh_regulator_is_enabled, 371 .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel, 372 .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel, 373 .list_voltage = regulator_list_voltage_linear_range, 374 .set_mode = rpmh_regulator_vrm_set_mode, 375 .get_mode = rpmh_regulator_vrm_get_mode, 376 .get_optimum_mode = rpmh_regulator_vrm_get_optimum_mode, 377 }; 378 379 static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = { 380 .enable = rpmh_regulator_enable, 381 .disable = rpmh_regulator_disable, 382 .is_enabled = rpmh_regulator_is_enabled, 383 .set_voltage_sel = rpmh_regulator_vrm_set_voltage_sel, 384 .get_voltage_sel = rpmh_regulator_vrm_get_voltage_sel, 385 .list_voltage = regulator_list_voltage_linear_range, 386 .set_mode = rpmh_regulator_vrm_set_mode, 387 .get_mode = rpmh_regulator_vrm_get_mode, 388 .set_bypass = rpmh_regulator_vrm_set_bypass, 389 .get_bypass = rpmh_regulator_vrm_get_bypass, 390 }; 391 392 static const struct regulator_ops rpmh_regulator_xob_ops = { 393 .enable = rpmh_regulator_enable, 394 .disable = rpmh_regulator_disable, 395 .is_enabled = rpmh_regulator_is_enabled, 396 }; 397 398 /** 399 * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator 400 * @vreg: Pointer to the individual rpmh-regulator resource 401 * @dev: Pointer to the top level rpmh-regulator PMIC device 402 * @node: Pointer to the individual rpmh-regulator resource 403 * device node 404 * @pmic_id: String used to identify the top level rpmh-regulator 405 * PMIC device on the board 406 * @pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator 407 * resources defined for the top level PMIC device 408 * 409 * Return: 0 on success, errno on failure 410 */ 411 static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev, 412 struct device_node *node, const char *pmic_id, 413 const struct rpmh_vreg_init_data *pmic_rpmh_data) 414 { 415 struct regulator_config reg_config = {}; 416 char rpmh_resource_name[20] = ""; 417 const struct rpmh_vreg_init_data *rpmh_data; 418 struct regulator_init_data *init_data; 419 struct regulator_dev *rdev; 420 int ret; 421 422 vreg->dev = dev; 423 424 for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++) 425 if (of_node_name_eq(node, rpmh_data->name)) 426 break; 427 428 if (!rpmh_data->name) { 429 dev_err(dev, "Unknown regulator %pOFn\n", node); 430 return -EINVAL; 431 } 432 433 scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name), 434 rpmh_data->resource_name, pmic_id); 435 436 vreg->addr = cmd_db_read_addr(rpmh_resource_name); 437 if (!vreg->addr) { 438 dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n", 439 node, rpmh_resource_name); 440 return -ENODEV; 441 } 442 443 vreg->rdesc.name = rpmh_data->name; 444 vreg->rdesc.supply_name = rpmh_data->supply_name; 445 vreg->hw_data = rpmh_data->hw_data; 446 447 vreg->enabled = -EINVAL; 448 vreg->voltage_selector = -ENOTRECOVERABLE; 449 vreg->mode = REGULATOR_MODE_INVALID; 450 451 if (rpmh_data->hw_data->n_voltages) { 452 vreg->rdesc.linear_ranges = &rpmh_data->hw_data->voltage_range; 453 vreg->rdesc.n_linear_ranges = 1; 454 vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages; 455 } 456 457 vreg->always_wait_for_ack = of_property_read_bool(node, 458 "qcom,always-wait-for-ack"); 459 460 vreg->rdesc.owner = THIS_MODULE; 461 vreg->rdesc.type = REGULATOR_VOLTAGE; 462 vreg->rdesc.ops = vreg->hw_data->ops; 463 vreg->rdesc.of_map_mode = vreg->hw_data->of_map_mode; 464 465 init_data = of_get_regulator_init_data(dev, node, &vreg->rdesc); 466 if (!init_data) 467 return -ENOMEM; 468 469 if (rpmh_data->hw_data->regulator_type == XOB && 470 init_data->constraints.min_uV && 471 init_data->constraints.min_uV == init_data->constraints.max_uV) { 472 vreg->rdesc.fixed_uV = init_data->constraints.min_uV; 473 vreg->rdesc.n_voltages = 1; 474 } 475 476 reg_config.dev = dev; 477 reg_config.init_data = init_data; 478 reg_config.of_node = node; 479 reg_config.driver_data = vreg; 480 481 rdev = devm_regulator_register(dev, &vreg->rdesc, ®_config); 482 if (IS_ERR(rdev)) { 483 ret = PTR_ERR(rdev); 484 dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n", 485 node, ret); 486 return ret; 487 } 488 489 dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n", 490 node, rpmh_resource_name, vreg->addr); 491 492 return 0; 493 } 494 495 static const int pmic_mode_map_pmic4_ldo[REGULATOR_MODE_STANDBY + 1] = { 496 [REGULATOR_MODE_INVALID] = -EINVAL, 497 [REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION, 498 [REGULATOR_MODE_IDLE] = PMIC4_LDO_MODE_LPM, 499 [REGULATOR_MODE_NORMAL] = PMIC4_LDO_MODE_HPM, 500 [REGULATOR_MODE_FAST] = -EINVAL, 501 }; 502 503 static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = { 504 [REGULATOR_MODE_INVALID] = -EINVAL, 505 [REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION, 506 [REGULATOR_MODE_IDLE] = PMIC5_LDO_MODE_LPM, 507 [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM, 508 [REGULATOR_MODE_FAST] = -EINVAL, 509 }; 510 511 static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode) 512 { 513 unsigned int mode; 514 515 switch (rpmh_mode) { 516 case RPMH_REGULATOR_MODE_HPM: 517 mode = REGULATOR_MODE_NORMAL; 518 break; 519 case RPMH_REGULATOR_MODE_LPM: 520 mode = REGULATOR_MODE_IDLE; 521 break; 522 case RPMH_REGULATOR_MODE_RET: 523 mode = REGULATOR_MODE_STANDBY; 524 break; 525 default: 526 mode = REGULATOR_MODE_INVALID; 527 break; 528 } 529 530 return mode; 531 } 532 533 static const int pmic_mode_map_pmic4_smps[REGULATOR_MODE_STANDBY + 1] = { 534 [REGULATOR_MODE_INVALID] = -EINVAL, 535 [REGULATOR_MODE_STANDBY] = PMIC4_SMPS_MODE_RETENTION, 536 [REGULATOR_MODE_IDLE] = PMIC4_SMPS_MODE_PFM, 537 [REGULATOR_MODE_NORMAL] = PMIC4_SMPS_MODE_AUTO, 538 [REGULATOR_MODE_FAST] = PMIC4_SMPS_MODE_PWM, 539 }; 540 541 static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = { 542 [REGULATOR_MODE_INVALID] = -EINVAL, 543 [REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION, 544 [REGULATOR_MODE_IDLE] = PMIC5_SMPS_MODE_PFM, 545 [REGULATOR_MODE_NORMAL] = PMIC5_SMPS_MODE_AUTO, 546 [REGULATOR_MODE_FAST] = PMIC5_SMPS_MODE_PWM, 547 }; 548 549 static unsigned int 550 rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode) 551 { 552 unsigned int mode; 553 554 switch (rpmh_mode) { 555 case RPMH_REGULATOR_MODE_HPM: 556 mode = REGULATOR_MODE_FAST; 557 break; 558 case RPMH_REGULATOR_MODE_AUTO: 559 mode = REGULATOR_MODE_NORMAL; 560 break; 561 case RPMH_REGULATOR_MODE_LPM: 562 mode = REGULATOR_MODE_IDLE; 563 break; 564 case RPMH_REGULATOR_MODE_RET: 565 mode = REGULATOR_MODE_STANDBY; 566 break; 567 default: 568 mode = REGULATOR_MODE_INVALID; 569 break; 570 } 571 572 return mode; 573 } 574 575 static const int pmic_mode_map_pmic4_bob[REGULATOR_MODE_STANDBY + 1] = { 576 [REGULATOR_MODE_INVALID] = -EINVAL, 577 [REGULATOR_MODE_STANDBY] = -EINVAL, 578 [REGULATOR_MODE_IDLE] = PMIC4_BOB_MODE_PFM, 579 [REGULATOR_MODE_NORMAL] = PMIC4_BOB_MODE_AUTO, 580 [REGULATOR_MODE_FAST] = PMIC4_BOB_MODE_PWM, 581 }; 582 583 static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = { 584 [REGULATOR_MODE_INVALID] = -EINVAL, 585 [REGULATOR_MODE_STANDBY] = -EINVAL, 586 [REGULATOR_MODE_IDLE] = PMIC5_BOB_MODE_PFM, 587 [REGULATOR_MODE_NORMAL] = PMIC5_BOB_MODE_AUTO, 588 [REGULATOR_MODE_FAST] = PMIC5_BOB_MODE_PWM, 589 }; 590 591 static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode) 592 { 593 unsigned int mode; 594 595 switch (rpmh_mode) { 596 case RPMH_REGULATOR_MODE_HPM: 597 mode = REGULATOR_MODE_FAST; 598 break; 599 case RPMH_REGULATOR_MODE_AUTO: 600 mode = REGULATOR_MODE_NORMAL; 601 break; 602 case RPMH_REGULATOR_MODE_LPM: 603 mode = REGULATOR_MODE_IDLE; 604 break; 605 default: 606 mode = REGULATOR_MODE_INVALID; 607 break; 608 } 609 610 return mode; 611 } 612 613 static const struct rpmh_vreg_hw_data pmic4_pldo = { 614 .regulator_type = VRM, 615 .ops = &rpmh_regulator_vrm_drms_ops, 616 .voltage_range = REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), 617 .n_voltages = 256, 618 .hpm_min_load_uA = 10000, 619 .pmic_mode_map = pmic_mode_map_pmic4_ldo, 620 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 621 }; 622 623 static const struct rpmh_vreg_hw_data pmic4_pldo_lv = { 624 .regulator_type = VRM, 625 .ops = &rpmh_regulator_vrm_drms_ops, 626 .voltage_range = REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), 627 .n_voltages = 128, 628 .hpm_min_load_uA = 10000, 629 .pmic_mode_map = pmic_mode_map_pmic4_ldo, 630 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 631 }; 632 633 static const struct rpmh_vreg_hw_data pmic4_nldo = { 634 .regulator_type = VRM, 635 .ops = &rpmh_regulator_vrm_drms_ops, 636 .voltage_range = REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), 637 .n_voltages = 128, 638 .hpm_min_load_uA = 30000, 639 .pmic_mode_map = pmic_mode_map_pmic4_ldo, 640 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 641 }; 642 643 static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = { 644 .regulator_type = VRM, 645 .ops = &rpmh_regulator_vrm_ops, 646 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 647 .n_voltages = 216, 648 .pmic_mode_map = pmic_mode_map_pmic4_smps, 649 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 650 }; 651 652 static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = { 653 .regulator_type = VRM, 654 .ops = &rpmh_regulator_vrm_ops, 655 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), 656 .n_voltages = 259, 657 .pmic_mode_map = pmic_mode_map_pmic4_smps, 658 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 659 }; 660 661 static const struct rpmh_vreg_hw_data pmic4_bob = { 662 .regulator_type = VRM, 663 .ops = &rpmh_regulator_vrm_bypass_ops, 664 .voltage_range = REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), 665 .n_voltages = 84, 666 .pmic_mode_map = pmic_mode_map_pmic4_bob, 667 .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, 668 }; 669 670 static const struct rpmh_vreg_hw_data pmic4_lvs = { 671 .regulator_type = XOB, 672 .ops = &rpmh_regulator_xob_ops, 673 /* LVS hardware does not support voltage or mode configuration. */ 674 }; 675 676 static const struct rpmh_vreg_hw_data pmic5_pldo = { 677 .regulator_type = VRM, 678 .ops = &rpmh_regulator_vrm_drms_ops, 679 .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 680 .n_voltages = 256, 681 .hpm_min_load_uA = 10000, 682 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 683 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 684 }; 685 686 static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { 687 .regulator_type = VRM, 688 .ops = &rpmh_regulator_vrm_drms_ops, 689 .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), 690 .n_voltages = 63, 691 .hpm_min_load_uA = 10000, 692 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 693 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 694 }; 695 696 static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { 697 .regulator_type = VRM, 698 .ops = &rpmh_regulator_vrm_drms_ops, 699 .voltage_range = REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000), 700 .n_voltages = 188, 701 .hpm_min_load_uA = 10000, 702 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 703 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 704 }; 705 706 static const struct rpmh_vreg_hw_data pmic5_nldo = { 707 .regulator_type = VRM, 708 .ops = &rpmh_regulator_vrm_drms_ops, 709 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), 710 .n_voltages = 124, 711 .hpm_min_load_uA = 30000, 712 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 713 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 714 }; 715 716 static const struct rpmh_vreg_hw_data pmic5_nldo515 = { 717 .regulator_type = VRM, 718 .ops = &rpmh_regulator_vrm_drms_ops, 719 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), 720 .n_voltages = 211, 721 .hpm_min_load_uA = 30000, 722 .pmic_mode_map = pmic_mode_map_pmic5_ldo, 723 .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, 724 }; 725 726 static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { 727 .regulator_type = VRM, 728 .ops = &rpmh_regulator_vrm_ops, 729 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 730 .n_voltages = 216, 731 .pmic_mode_map = pmic_mode_map_pmic5_smps, 732 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 733 }; 734 735 static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { 736 .regulator_type = VRM, 737 .ops = &rpmh_regulator_vrm_ops, 738 .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), 739 .n_voltages = 264, 740 .pmic_mode_map = pmic_mode_map_pmic5_smps, 741 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 742 }; 743 744 static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { 745 .regulator_type = VRM, 746 .ops = &rpmh_regulator_vrm_ops, 747 .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), 748 .n_voltages = 264, 749 .pmic_mode_map = pmic_mode_map_pmic5_smps, 750 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 751 }; 752 753 static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { 754 .regulator_type = VRM, 755 .ops = &rpmh_regulator_vrm_ops, 756 .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), 757 .n_voltages = 268, 758 .pmic_mode_map = pmic_mode_map_pmic5_smps, 759 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 760 }; 761 762 static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = { 763 .regulator_type = VRM, 764 .ops = &rpmh_regulator_vrm_ops, 765 .voltage_range = REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000), 766 .n_voltages = 268, 767 .pmic_mode_map = pmic_mode_map_pmic5_smps, 768 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 769 }; 770 771 static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = { 772 .regulator_type = VRM, 773 .ops = &rpmh_regulator_vrm_ops, 774 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 775 .n_voltages = 215, 776 .pmic_mode_map = pmic_mode_map_pmic5_smps, 777 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 778 }; 779 780 static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { 781 .regulator_type = VRM, 782 .ops = &rpmh_regulator_vrm_ops, 783 .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), 784 .n_voltages = 236, 785 .pmic_mode_map = pmic_mode_map_pmic5_smps, 786 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 787 }; 788 789 static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = { 790 .regulator_type = VRM, 791 .ops = &rpmh_regulator_vrm_ops, 792 .voltage_range = REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), 793 .n_voltages = 5, 794 .pmic_mode_map = pmic_mode_map_pmic5_smps, 795 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, 796 }; 797 798 static const struct rpmh_vreg_hw_data pmic5_bob = { 799 .regulator_type = VRM, 800 .ops = &rpmh_regulator_vrm_bypass_ops, 801 .voltage_range = REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), 802 .n_voltages = 32, 803 .pmic_mode_map = pmic_mode_map_pmic5_bob, 804 .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, 805 }; 806 807 #define RPMH_VREG(_name, _resource_name, _hw_data, _supply_name) \ 808 { \ 809 .name = _name, \ 810 .resource_name = _resource_name, \ 811 .hw_data = _hw_data, \ 812 .supply_name = _supply_name, \ 813 } 814 815 static const struct rpmh_vreg_init_data pm8998_vreg_data[] = { 816 RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"), 817 RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"), 818 RPMH_VREG("smps3", "smp%s3", &pmic4_hfsmps3, "vdd-s3"), 819 RPMH_VREG("smps4", "smp%s4", &pmic4_hfsmps3, "vdd-s4"), 820 RPMH_VREG("smps5", "smp%s5", &pmic4_hfsmps3, "vdd-s5"), 821 RPMH_VREG("smps6", "smp%s6", &pmic4_ftsmps426, "vdd-s6"), 822 RPMH_VREG("smps7", "smp%s7", &pmic4_ftsmps426, "vdd-s7"), 823 RPMH_VREG("smps8", "smp%s8", &pmic4_ftsmps426, "vdd-s8"), 824 RPMH_VREG("smps9", "smp%s9", &pmic4_ftsmps426, "vdd-s9"), 825 RPMH_VREG("smps10", "smp%s10", &pmic4_ftsmps426, "vdd-s10"), 826 RPMH_VREG("smps11", "smp%s11", &pmic4_ftsmps426, "vdd-s11"), 827 RPMH_VREG("smps12", "smp%s12", &pmic4_ftsmps426, "vdd-s12"), 828 RPMH_VREG("smps13", "smp%s13", &pmic4_ftsmps426, "vdd-s13"), 829 RPMH_VREG("ldo1", "ldo%s1", &pmic4_nldo, "vdd-l1-l27"), 830 RPMH_VREG("ldo2", "ldo%s2", &pmic4_nldo, "vdd-l2-l8-l17"), 831 RPMH_VREG("ldo3", "ldo%s3", &pmic4_nldo, "vdd-l3-l11"), 832 RPMH_VREG("ldo4", "ldo%s4", &pmic4_nldo, "vdd-l4-l5"), 833 RPMH_VREG("ldo5", "ldo%s5", &pmic4_nldo, "vdd-l4-l5"), 834 RPMH_VREG("ldo6", "ldo%s6", &pmic4_pldo, "vdd-l6"), 835 RPMH_VREG("ldo7", "ldo%s7", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 836 RPMH_VREG("ldo8", "ldo%s8", &pmic4_nldo, "vdd-l2-l8-l17"), 837 RPMH_VREG("ldo9", "ldo%s9", &pmic4_pldo, "vdd-l9"), 838 RPMH_VREG("ldo10", "ldo%s10", &pmic4_pldo, "vdd-l10-l23-l25"), 839 RPMH_VREG("ldo11", "ldo%s11", &pmic4_nldo, "vdd-l3-l11"), 840 RPMH_VREG("ldo12", "ldo%s12", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 841 RPMH_VREG("ldo13", "ldo%s13", &pmic4_pldo, "vdd-l13-l19-l21"), 842 RPMH_VREG("ldo14", "ldo%s14", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 843 RPMH_VREG("ldo15", "ldo%s15", &pmic4_pldo_lv, "vdd-l7-l12-l14-l15"), 844 RPMH_VREG("ldo16", "ldo%s16", &pmic4_pldo, "vdd-l16-l28"), 845 RPMH_VREG("ldo17", "ldo%s17", &pmic4_nldo, "vdd-l2-l8-l17"), 846 RPMH_VREG("ldo18", "ldo%s18", &pmic4_pldo, "vdd-l18-l22"), 847 RPMH_VREG("ldo19", "ldo%s19", &pmic4_pldo, "vdd-l13-l19-l21"), 848 RPMH_VREG("ldo20", "ldo%s20", &pmic4_pldo, "vdd-l20-l24"), 849 RPMH_VREG("ldo21", "ldo%s21", &pmic4_pldo, "vdd-l13-l19-l21"), 850 RPMH_VREG("ldo22", "ldo%s22", &pmic4_pldo, "vdd-l18-l22"), 851 RPMH_VREG("ldo23", "ldo%s23", &pmic4_pldo, "vdd-l10-l23-l25"), 852 RPMH_VREG("ldo24", "ldo%s24", &pmic4_pldo, "vdd-l20-l24"), 853 RPMH_VREG("ldo25", "ldo%s25", &pmic4_pldo, "vdd-l10-l23-l25"), 854 RPMH_VREG("ldo26", "ldo%s26", &pmic4_nldo, "vdd-l26"), 855 RPMH_VREG("ldo27", "ldo%s27", &pmic4_nldo, "vdd-l1-l27"), 856 RPMH_VREG("ldo28", "ldo%s28", &pmic4_pldo, "vdd-l16-l28"), 857 RPMH_VREG("lvs1", "vs%s1", &pmic4_lvs, "vin-lvs-1-2"), 858 RPMH_VREG("lvs2", "vs%s2", &pmic4_lvs, "vin-lvs-1-2"), 859 {} 860 }; 861 862 static const struct rpmh_vreg_init_data pmg1110_vreg_data[] = { 863 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 864 {} 865 }; 866 867 static const struct rpmh_vreg_init_data pmi8998_vreg_data[] = { 868 RPMH_VREG("bob", "bob%s1", &pmic4_bob, "vdd-bob"), 869 {} 870 }; 871 872 static const struct rpmh_vreg_init_data pm8005_vreg_data[] = { 873 RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"), 874 RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"), 875 RPMH_VREG("smps3", "smp%s3", &pmic4_ftsmps426, "vdd-s3"), 876 RPMH_VREG("smps4", "smp%s4", &pmic4_ftsmps426, "vdd-s4"), 877 {} 878 }; 879 880 static const struct rpmh_vreg_init_data pm8150_vreg_data[] = { 881 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 882 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 883 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 884 RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), 885 RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), 886 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 887 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), 888 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"), 889 RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"), 890 RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"), 891 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l8-l11"), 892 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l10"), 893 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 894 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 895 RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 896 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9"), 897 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l12-l14-l15"), 898 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l1-l8-l11"), 899 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9"), 900 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l2-l10"), 901 RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo, "vdd-l1-l8-l11"), 902 RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 903 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l13-l16-l17"), 904 RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 905 RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 906 RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l13-l16-l17"), 907 RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l13-l16-l17"), 908 RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 909 {} 910 }; 911 912 static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = { 913 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 914 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 915 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 916 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"), 917 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"), 918 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 919 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), 920 RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"), 921 RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l8"), 922 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"), 923 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"), 924 RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l4-l5-l6"), 925 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l4-l5-l6"), 926 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l4-l5-l6"), 927 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l11"), 928 RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo_lv, "vdd-l1-l8"), 929 RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l9-l10"), 930 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l9-l10"), 931 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l7-l11"), 932 RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"), 933 {} 934 }; 935 936 static const struct rpmh_vreg_init_data pmm8155au_vreg_data[] = { 937 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 938 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 939 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 940 RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), 941 RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), 942 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 943 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), 944 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"), 945 RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"), 946 RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"), 947 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l8-l11"), 948 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l10"), 949 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 950 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 951 RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 952 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9"), 953 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 954 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l1-l8-l11"), 955 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9"), 956 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l2-l10"), 957 RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo, "vdd-l1-l8-l11"), 958 RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 959 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l13-l16-l17"), 960 RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 961 RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), 962 RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l13-l16-l17"), 963 RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l13-l16-l17"), 964 RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, "vdd-l3-l4-l5-l18"), 965 {} 966 }; 967 968 static const struct rpmh_vreg_init_data pmm8654au_vreg_data[] = { 969 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps527, "vdd-s1"), 970 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps527, "vdd-s2"), 971 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps527, "vdd-s3"), 972 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps527, "vdd-s4"), 973 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps527, "vdd-s5"), 974 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps527, "vdd-s6"), 975 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps527, "vdd-s7"), 976 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps527, "vdd-s8"), 977 RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps527, "vdd-s9"), 978 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-s9"), 979 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2-l3"), 980 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l2-l3"), 981 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo515, "vdd-s9"), 982 RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo515, "vdd-s9"), 983 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo515, "vdd-l6-l7"), 984 RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo515, "vdd-l6-l7"), 985 RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo515_mv, "vdd-l8-l9"), 986 RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l8-l9"), 987 {} 988 }; 989 990 static const struct rpmh_vreg_init_data pm8350_vreg_data[] = { 991 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 992 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 993 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 994 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"), 995 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"), 996 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 997 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), 998 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"), 999 RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"), 1000 RPMH_VREG("smps10", "smp%s10", &pmic5_hfsmps510, "vdd-s10"), 1001 RPMH_VREG("smps11", "smp%s11", &pmic5_hfsmps510, "vdd-s11"), 1002 RPMH_VREG("smps12", "smp%s12", &pmic5_hfsmps510, "vdd-s12"), 1003 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l4"), 1004 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l7"), 1005 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l5"), 1006 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l1-l4"), 1007 RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l5"), 1008 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9-l10"), 1009 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l2-l7"), 1010 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l8"), 1011 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9-l10"), 1012 RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo, "vdd-l6-l9-l10"), 1013 {} 1014 }; 1015 1016 static const struct rpmh_vreg_init_data pm8350c_vreg_data[] = { 1017 RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps515, "vdd-s1"), 1018 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 1019 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 1020 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"), 1021 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"), 1022 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 1023 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), 1024 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"), 1025 RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"), 1026 RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"), 1027 RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l12"), 1028 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo_lv, "vdd-l2-l8"), 1029 RPMH_VREG("ldo3", "ldo%s3", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1030 RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1031 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1032 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l6-l9-l11"), 1033 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1034 RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo_lv, "vdd-l2-l8"), 1035 RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l6-l9-l11"), 1036 RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo, "vdd-l10"), 1037 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l6-l9-l11"), 1038 RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l1-l12"), 1039 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l3-l4-l5-l7-l13"), 1040 RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"), 1041 {} 1042 }; 1043 1044 static const struct rpmh_vreg_init_data pm8450_vreg_data[] = { 1045 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps520, "vdd-s1"), 1046 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps520, "vdd-s2"), 1047 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps520, "vdd-s3"), 1048 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps520, "vdd-s4"), 1049 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps520, "vdd-s5"), 1050 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps520, "vdd-s6"), 1051 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), 1052 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"), 1053 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), 1054 RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo_lv, "vdd-l4"), 1055 {} 1056 }; 1057 1058 static const struct rpmh_vreg_init_data pm8550_vreg_data[] = { 1059 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1-l4-l10"), 1060 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l13-l14"), 1061 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"), 1062 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo515, "vdd-l1-l4-l10"), 1063 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l16"), 1064 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l6-l7"), 1065 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l6-l7"), 1066 RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, "vdd-l8-l9"), 1067 RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l8-l9"), 1068 RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo515, "vdd-l1-l4-l10"), 1069 RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo515, "vdd-l11"), 1070 RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo515, "vdd-l12"), 1071 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l2-l13-l14"), 1072 RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo, "vdd-l2-l13-l14"), 1073 RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo515, "vdd-l15"), 1074 RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l16"), 1075 RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l17"), 1076 RPMH_VREG("bob1", "bob%s1", &pmic5_bob, "vdd-bob1"), 1077 RPMH_VREG("bob2", "bob%s2", &pmic5_bob, "vdd-bob2"), 1078 {} 1079 }; 1080 1081 static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = { 1082 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"), 1083 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"), 1084 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"), 1085 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_lv, "vdd-s4"), 1086 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"), 1087 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_mv, "vdd-s6"), 1088 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"), 1089 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2"), 1090 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"), 1091 {} 1092 }; 1093 1094 static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = { 1095 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"), 1096 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"), 1097 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"), 1098 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"), 1099 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"), 1100 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"), 1101 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"), 1102 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"), 1103 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"), 1104 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2"), 1105 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"), 1106 {} 1107 }; 1108 1109 static const struct rpmh_vreg_init_data pm8009_vreg_data[] = { 1110 RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"), 1111 RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps515, "vdd-s2"), 1112 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), 1113 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"), 1114 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), 1115 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"), 1116 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"), 1117 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"), 1118 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7"), 1119 {} 1120 }; 1121 1122 static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = { 1123 RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"), 1124 RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps515_1, "vdd-s2"), 1125 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), 1126 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"), 1127 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), 1128 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"), 1129 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"), 1130 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"), 1131 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7"), 1132 {} 1133 }; 1134 1135 static const struct rpmh_vreg_init_data pm6150_vreg_data[] = { 1136 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 1137 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 1138 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 1139 RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), 1140 RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), 1141 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), 1142 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"), 1143 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"), 1144 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4-l7-l8"), 1145 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1146 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6"), 1147 RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l4-l7-l8"), 1148 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l4-l7-l8"), 1149 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l9"), 1150 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo_lv, "vdd-l10-l14-l15"), 1151 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo_lv, "vdd-l11-l12-l13"), 1152 RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l11-l12-l13"), 1153 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo_lv, "vdd-l11-l12-l13"), 1154 RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l10-l14-l15"), 1155 RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l10-l14-l15"), 1156 RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1157 RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1158 RPMH_VREG("ldo18", "ldo%s18", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1159 RPMH_VREG("ldo19", "ldo%s19", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), 1160 {} 1161 }; 1162 1163 static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = { 1164 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 1165 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), 1166 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), 1167 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"), 1168 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"), 1169 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 1170 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), 1171 RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"), 1172 RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l8"), 1173 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"), 1174 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"), 1175 RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l4-l5-l6"), 1176 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l4-l5-l6"), 1177 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l4-l5-l6"), 1178 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l11"), 1179 RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, "vdd-l1-l8"), 1180 RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l9-l10"), 1181 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l9-l10"), 1182 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l7-l11"), 1183 RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"), 1184 {} 1185 }; 1186 1187 static const struct rpmh_vreg_init_data pm6350_vreg_data[] = { 1188 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, NULL), 1189 RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps510, NULL), 1190 /* smps3 - smps5 not configured */ 1191 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, NULL), 1192 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, NULL), 1193 RPMH_VREG("ldo3", "ldo%s3", &pmic5_pldo, NULL), 1194 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, NULL), 1195 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, NULL), 1196 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, NULL), 1197 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, NULL), 1198 RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, NULL), 1199 RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, NULL), 1200 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, NULL), 1201 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, NULL), 1202 RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo, NULL), 1203 RPMH_VREG("ldo13", "ldo%s13", &pmic5_nldo, NULL), 1204 RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo, NULL), 1205 RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, NULL), 1206 RPMH_VREG("ldo16", "ldo%s16", &pmic5_nldo, NULL), 1207 /* ldo17 not configured */ 1208 RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, NULL), 1209 RPMH_VREG("ldo19", "ldo%s19", &pmic5_nldo, NULL), 1210 RPMH_VREG("ldo20", "ldo%s20", &pmic5_nldo, NULL), 1211 RPMH_VREG("ldo21", "ldo%s21", &pmic5_nldo, NULL), 1212 RPMH_VREG("ldo22", "ldo%s22", &pmic5_nldo, NULL), 1213 }; 1214 1215 static const struct rpmh_vreg_init_data pmx55_vreg_data[] = { 1216 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 1217 RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps510, "vdd-s2"), 1218 RPMH_VREG("smps3", "smp%s3", &pmic5_hfsmps510, "vdd-s3"), 1219 RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), 1220 RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), 1221 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 1222 RPMH_VREG("smps7", "smp%s7", &pmic5_hfsmps510, "vdd-s7"), 1223 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l2"), 1224 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l1-l2"), 1225 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l9"), 1226 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4-l12"), 1227 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"), 1228 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"), 1229 RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l7-l8"), 1230 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l7-l8"), 1231 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l3-l9"), 1232 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l10-l11-l13"), 1233 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l10-l11-l13"), 1234 RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo, "vdd-l4-l12"), 1235 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l10-l11-l13"), 1236 RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo, "vdd-l14"), 1237 RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, "vdd-l15"), 1238 RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l16"), 1239 {} 1240 }; 1241 1242 static const struct rpmh_vreg_init_data pmx65_vreg_data[] = { 1243 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), 1244 RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps510, "vdd-s2"), 1245 RPMH_VREG("smps3", "smp%s3", &pmic5_hfsmps510, "vdd-s3"), 1246 RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), 1247 RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), 1248 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), 1249 RPMH_VREG("smps7", "smp%s7", &pmic5_hfsmps510, "vdd-s7"), 1250 RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"), 1251 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), 1252 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l18"), 1253 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), 1254 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"), 1255 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6-l16"), 1256 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6-l16"), 1257 RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l7"), 1258 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l8-l9"), 1259 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l8-l9"), 1260 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l10"), 1261 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l11-l13"), 1262 RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo, "vdd-l12"), 1263 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l11-l13"), 1264 RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo, "vdd-l14"), 1265 RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, "vdd-l15"), 1266 RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l6-l16"), 1267 RPMH_VREG("ldo17", "ldo%s17", &pmic5_nldo, "vdd-l17"), 1268 /* ldo18 not configured */ 1269 RPMH_VREG("ldo19", "ldo%s19", &pmic5_nldo, "vdd-l19"), 1270 RPMH_VREG("ldo20", "ldo%s20", &pmic5_nldo, "vdd-l20"), 1271 RPMH_VREG("ldo21", "ldo%s21", &pmic5_nldo, "vdd-l21"), 1272 {} 1273 }; 1274 1275 static const struct rpmh_vreg_init_data pmx75_vreg_data[] = { 1276 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"), 1277 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"), 1278 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"), 1279 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"), 1280 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"), 1281 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"), 1282 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"), 1283 RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"), 1284 RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps525_lv, "vdd-s9"), 1285 RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps525_lv, "vdd-s10"), 1286 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"), 1287 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2-18"), 1288 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"), 1289 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo515, "vdd-l4-l16"), 1290 RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo_lv, "vdd-l5-l6"), 1291 RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo_lv, "vdd-l5-l6"), 1292 RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo515, "vdd-l7"), 1293 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo515, "vdd-l8-l9"), 1294 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo515, "vdd-l8-l9"), 1295 RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l10"), 1296 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l11-l13"), 1297 RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo515, "vdd-l12"), 1298 RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l11-l13"), 1299 RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo515, "vdd-l14"), 1300 RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo515, "vdd-l15"), 1301 RPMH_VREG("ldo16", "ldo%s16", &pmic5_nldo515, "vdd-l4-l16"), 1302 RPMH_VREG("ldo17", "ldo%s17", &pmic5_nldo515, "vdd-l17"), 1303 /* ldo18 not configured */ 1304 RPMH_VREG("ldo19", "ldo%s19", &pmic5_nldo515, "vdd-l19"), 1305 RPMH_VREG("ldo20", "ldo%s20", &pmic5_nldo515, "vdd-l20-l21"), 1306 RPMH_VREG("ldo21", "ldo%s21", &pmic5_nldo515, "vdd-l20-l21"), 1307 }; 1308 1309 static const struct rpmh_vreg_init_data pm7325_vreg_data[] = { 1310 RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"), 1311 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps520, "vdd-s2"), 1312 RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps520, "vdd-s3"), 1313 RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps520, "vdd-s4"), 1314 RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps520, "vdd-s5"), 1315 RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps520, "vdd-s6"), 1316 RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps520, "vdd-s7"), 1317 RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"), 1318 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1319 RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l7"), 1320 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), 1321 RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1322 RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l5"), 1323 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9-l10"), 1324 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l2-l7"), 1325 RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l8"), 1326 RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9-l10"), 1327 RPMH_VREG("ldo10", "ldo%s10", &pmic5_nldo, "vdd-l6-l9-l10"), 1328 RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1329 RPMH_VREG("ldo12", "ldo%s12", &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1330 RPMH_VREG("ldo13", "ldo%s13", &pmic5_nldo, "vdd-l13"), 1331 RPMH_VREG("ldo14", "ldo%s14", &pmic5_nldo, "vdd-l14-l16"), 1332 RPMH_VREG("ldo15", "ldo%s15", &pmic5_nldo, "vdd-l1-l4-l12-l15"), 1333 RPMH_VREG("ldo16", "ldo%s16", &pmic5_nldo, "vdd-l14-l16"), 1334 RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1335 RPMH_VREG("ldo18", "ldo%s18", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1336 RPMH_VREG("ldo19", "ldo%s19", &pmic5_pldo_lv, "vdd-l11-l17-l18-l19"), 1337 {} 1338 }; 1339 1340 static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = { 1341 RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps520, "vdd-s1"), 1342 RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps520, "vdd-s2"), 1343 RPMH_VREG("smps3", "smp%s3", &pmic5_hfsmps515, "vdd-s3"), 1344 RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l2"), 1345 RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l1-l2"), 1346 RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), 1347 RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo_lv, "vdd-l4"), 1348 RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l5-l6"), 1349 RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l5-l6"), 1350 RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-bob"), 1351 {} 1352 }; 1353 1354 static const struct rpmh_vreg_init_data pm660_vreg_data[] = { 1355 RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"), 1356 RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"), 1357 RPMH_VREG("smps3", "smp%s3", &pmic4_ftsmps426, "vdd-s3"), 1358 RPMH_VREG("smps4", "smp%s4", &pmic4_hfsmps3, "vdd-s4"), 1359 RPMH_VREG("smps5", "smp%s5", &pmic4_hfsmps3, "vdd-s5"), 1360 RPMH_VREG("smps6", "smp%s6", &pmic4_hfsmps3, "vdd-s6"), 1361 RPMH_VREG("ldo1", "ldo%s1", &pmic4_nldo, "vdd-l1-l6-l7"), 1362 RPMH_VREG("ldo2", "ldo%s2", &pmic4_nldo, "vdd-l2-l3"), 1363 RPMH_VREG("ldo3", "ldo%s3", &pmic4_nldo, "vdd-l2-l3"), 1364 /* ldo4 is inaccessible on PM660 */ 1365 RPMH_VREG("ldo5", "ldo%s5", &pmic4_nldo, "vdd-l5"), 1366 RPMH_VREG("ldo6", "ldo%s6", &pmic4_nldo, "vdd-l1-l6-l7"), 1367 RPMH_VREG("ldo7", "ldo%s7", &pmic4_nldo, "vdd-l1-l6-l7"), 1368 RPMH_VREG("ldo8", "ldo%s8", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1369 RPMH_VREG("ldo9", "ldo%s9", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1370 RPMH_VREG("ldo10", "ldo%s10", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1371 RPMH_VREG("ldo11", "ldo%s11", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1372 RPMH_VREG("ldo12", "ldo%s12", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1373 RPMH_VREG("ldo13", "ldo%s13", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1374 RPMH_VREG("ldo14", "ldo%s14", &pmic4_pldo_lv, "vdd-l8-l9-l10-l11-l12-l13-l14"), 1375 RPMH_VREG("ldo15", "ldo%s15", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1376 RPMH_VREG("ldo16", "ldo%s16", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1377 RPMH_VREG("ldo17", "ldo%s17", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1378 RPMH_VREG("ldo18", "ldo%s18", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1379 RPMH_VREG("ldo19", "ldo%s19", &pmic4_pldo, "vdd-l15-l16-l17-l18-l19"), 1380 {} 1381 }; 1382 1383 static const struct rpmh_vreg_init_data pm660l_vreg_data[] = { 1384 RPMH_VREG("smps1", "smp%s1", &pmic4_ftsmps426, "vdd-s1"), 1385 RPMH_VREG("smps2", "smp%s2", &pmic4_ftsmps426, "vdd-s2"), 1386 RPMH_VREG("smps3", "smp%s3", &pmic4_ftsmps426, "vdd-s3-s4"), 1387 RPMH_VREG("smps5", "smp%s5", &pmic4_ftsmps426, "vdd-s5"), 1388 RPMH_VREG("ldo1", "ldo%s1", &pmic4_nldo, "vdd-l1-l9-l10"), 1389 RPMH_VREG("ldo2", "ldo%s2", &pmic4_pldo, "vdd-l2"), 1390 RPMH_VREG("ldo3", "ldo%s3", &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1391 RPMH_VREG("ldo4", "ldo%s4", &pmic4_pldo, "vdd-l4-l6"), 1392 RPMH_VREG("ldo5", "ldo%s5", &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1393 RPMH_VREG("ldo6", "ldo%s6", &pmic4_pldo, "vdd-l4-l6"), 1394 RPMH_VREG("ldo7", "ldo%s7", &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1395 RPMH_VREG("ldo8", "ldo%s8", &pmic4_pldo, "vdd-l3-l5-l7-l8"), 1396 RPMH_VREG("bob", "bob%s1", &pmic4_bob, "vdd-bob"), 1397 {} 1398 }; 1399 1400 static int rpmh_regulator_probe(struct platform_device *pdev) 1401 { 1402 struct device *dev = &pdev->dev; 1403 const struct rpmh_vreg_init_data *vreg_data; 1404 struct device_node *node; 1405 struct rpmh_vreg *vreg; 1406 const char *pmic_id; 1407 int ret; 1408 1409 vreg_data = of_device_get_match_data(dev); 1410 if (!vreg_data) 1411 return -ENODEV; 1412 1413 ret = of_property_read_string(dev->of_node, "qcom,pmic-id", &pmic_id); 1414 if (ret < 0) { 1415 dev_err(dev, "qcom,pmic-id missing in DT node\n"); 1416 return ret; 1417 } 1418 1419 for_each_available_child_of_node(dev->of_node, node) { 1420 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); 1421 if (!vreg) { 1422 of_node_put(node); 1423 return -ENOMEM; 1424 } 1425 1426 ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id, 1427 vreg_data); 1428 if (ret < 0) { 1429 of_node_put(node); 1430 return ret; 1431 } 1432 } 1433 1434 return 0; 1435 } 1436 1437 static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = { 1438 { 1439 .compatible = "qcom,pm8005-rpmh-regulators", 1440 .data = pm8005_vreg_data, 1441 }, 1442 { 1443 .compatible = "qcom,pm8009-rpmh-regulators", 1444 .data = pm8009_vreg_data, 1445 }, 1446 { 1447 .compatible = "qcom,pm8009-1-rpmh-regulators", 1448 .data = pm8009_1_vreg_data, 1449 }, 1450 { 1451 .compatible = "qcom,pm8150-rpmh-regulators", 1452 .data = pm8150_vreg_data, 1453 }, 1454 { 1455 .compatible = "qcom,pm8150l-rpmh-regulators", 1456 .data = pm8150l_vreg_data, 1457 }, 1458 { 1459 .compatible = "qcom,pm8350-rpmh-regulators", 1460 .data = pm8350_vreg_data, 1461 }, 1462 { 1463 .compatible = "qcom,pm8350c-rpmh-regulators", 1464 .data = pm8350c_vreg_data, 1465 }, 1466 { 1467 .compatible = "qcom,pm8450-rpmh-regulators", 1468 .data = pm8450_vreg_data, 1469 }, 1470 { 1471 .compatible = "qcom,pm8550-rpmh-regulators", 1472 .data = pm8550_vreg_data, 1473 }, 1474 { 1475 .compatible = "qcom,pm8550ve-rpmh-regulators", 1476 .data = pm8550ve_vreg_data, 1477 }, 1478 { 1479 .compatible = "qcom,pm8550vs-rpmh-regulators", 1480 .data = pm8550vs_vreg_data, 1481 }, 1482 { 1483 .compatible = "qcom,pm8998-rpmh-regulators", 1484 .data = pm8998_vreg_data, 1485 }, 1486 { 1487 .compatible = "qcom,pmg1110-rpmh-regulators", 1488 .data = pmg1110_vreg_data, 1489 }, 1490 { 1491 .compatible = "qcom,pmi8998-rpmh-regulators", 1492 .data = pmi8998_vreg_data, 1493 }, 1494 { 1495 .compatible = "qcom,pm6150-rpmh-regulators", 1496 .data = pm6150_vreg_data, 1497 }, 1498 { 1499 .compatible = "qcom,pm6150l-rpmh-regulators", 1500 .data = pm6150l_vreg_data, 1501 }, 1502 { 1503 .compatible = "qcom,pm6350-rpmh-regulators", 1504 .data = pm6350_vreg_data, 1505 }, 1506 { 1507 .compatible = "qcom,pmc8180-rpmh-regulators", 1508 .data = pm8150_vreg_data, 1509 }, 1510 { 1511 .compatible = "qcom,pmc8180c-rpmh-regulators", 1512 .data = pm8150l_vreg_data, 1513 }, 1514 { 1515 .compatible = "qcom,pmm8155au-rpmh-regulators", 1516 .data = pmm8155au_vreg_data, 1517 }, 1518 { 1519 .compatible = "qcom,pmm8654au-rpmh-regulators", 1520 .data = pmm8654au_vreg_data, 1521 }, 1522 { 1523 .compatible = "qcom,pmx55-rpmh-regulators", 1524 .data = pmx55_vreg_data, 1525 }, 1526 { 1527 .compatible = "qcom,pmx65-rpmh-regulators", 1528 .data = pmx65_vreg_data, 1529 }, 1530 { 1531 .compatible = "qcom,pmx75-rpmh-regulators", 1532 .data = pmx75_vreg_data, 1533 }, 1534 { 1535 .compatible = "qcom,pm7325-rpmh-regulators", 1536 .data = pm7325_vreg_data, 1537 }, 1538 { 1539 .compatible = "qcom,pmr735a-rpmh-regulators", 1540 .data = pmr735a_vreg_data, 1541 }, 1542 { 1543 .compatible = "qcom,pm660-rpmh-regulators", 1544 .data = pm660_vreg_data, 1545 }, 1546 { 1547 .compatible = "qcom,pm660l-rpmh-regulators", 1548 .data = pm660l_vreg_data, 1549 }, 1550 {} 1551 }; 1552 MODULE_DEVICE_TABLE(of, rpmh_regulator_match_table); 1553 1554 static struct platform_driver rpmh_regulator_driver = { 1555 .driver = { 1556 .name = "qcom-rpmh-regulator", 1557 .probe_type = PROBE_PREFER_ASYNCHRONOUS, 1558 .of_match_table = of_match_ptr(rpmh_regulator_match_table), 1559 }, 1560 .probe = rpmh_regulator_probe, 1561 }; 1562 module_platform_driver(rpmh_regulator_driver); 1563 1564 MODULE_DESCRIPTION("Qualcomm RPMh regulator driver"); 1565 MODULE_LICENSE("GPL v2"); 1566