| .. | .. |
|---|
| 1 | 1 | // SPDX-License-Identifier: GPL-2.0 |
|---|
| 2 | | -// Copyright (c) 2018, The Linux Foundation. All rights reserved. |
|---|
| 2 | +// Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. |
|---|
| 3 | 3 | |
|---|
| 4 | 4 | #define pr_fmt(fmt) "%s: " fmt, __func__ |
|---|
| 5 | 5 | |
|---|
| .. | .. |
|---|
| 22 | 22 | |
|---|
| 23 | 23 | /** |
|---|
| 24 | 24 | * enum rpmh_regulator_type - supported RPMh accelerator types |
|---|
| 25 | | - * %VRM: RPMh VRM accelerator which supports voting on enable, voltage, |
|---|
| 25 | + * @VRM: RPMh VRM accelerator which supports voting on enable, voltage, |
|---|
| 26 | 26 | * and mode of LDO, SMPS, and BOB type PMIC regulators. |
|---|
| 27 | | - * %XOB: RPMh XOB accelerator which supports voting on the enable state |
|---|
| 27 | + * @XOB: RPMh XOB accelerator which supports voting on the enable state |
|---|
| 28 | 28 | * of PMIC regulators. |
|---|
| 29 | 29 | */ |
|---|
| 30 | 30 | enum rpmh_regulator_type { |
|---|
| .. | .. |
|---|
| 50 | 50 | #define PMIC4_BOB_MODE_AUTO 2 |
|---|
| 51 | 51 | #define PMIC4_BOB_MODE_PWM 3 |
|---|
| 52 | 52 | |
|---|
| 53 | +#define PMIC5_LDO_MODE_RETENTION 3 |
|---|
| 54 | +#define PMIC5_LDO_MODE_LPM 4 |
|---|
| 55 | +#define PMIC5_LDO_MODE_HPM 7 |
|---|
| 56 | + |
|---|
| 57 | +#define PMIC5_SMPS_MODE_RETENTION 3 |
|---|
| 58 | +#define PMIC5_SMPS_MODE_PFM 4 |
|---|
| 59 | +#define PMIC5_SMPS_MODE_AUTO 6 |
|---|
| 60 | +#define PMIC5_SMPS_MODE_PWM 7 |
|---|
| 61 | + |
|---|
| 62 | +#define PMIC5_BOB_MODE_PASS 2 |
|---|
| 63 | +#define PMIC5_BOB_MODE_PFM 4 |
|---|
| 64 | +#define PMIC5_BOB_MODE_AUTO 6 |
|---|
| 65 | +#define PMIC5_BOB_MODE_PWM 7 |
|---|
| 66 | + |
|---|
| 53 | 67 | /** |
|---|
| 54 | 68 | * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations |
|---|
| 55 | 69 | * @regulator_type: RPMh accelerator type used to manage this |
|---|
| .. | .. |
|---|
| 72 | 86 | struct rpmh_vreg_hw_data { |
|---|
| 73 | 87 | enum rpmh_regulator_type regulator_type; |
|---|
| 74 | 88 | const struct regulator_ops *ops; |
|---|
| 75 | | - const struct regulator_linear_range voltage_range; |
|---|
| 89 | + const struct linear_range voltage_range; |
|---|
| 76 | 90 | int n_voltages; |
|---|
| 77 | 91 | int hpm_min_load_uA; |
|---|
| 78 | 92 | const int *pmic_mode_map; |
|---|
| .. | .. |
|---|
| 385 | 399 | |
|---|
| 386 | 400 | /** |
|---|
| 387 | 401 | * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator |
|---|
| 388 | | - * vreg: Pointer to the individual rpmh-regulator resource |
|---|
| 389 | | - * dev: Pointer to the top level rpmh-regulator PMIC device |
|---|
| 390 | | - * node: Pointer to the individual rpmh-regulator resource |
|---|
| 402 | + * @vreg: Pointer to the individual rpmh-regulator resource |
|---|
| 403 | + * @dev: Pointer to the top level rpmh-regulator PMIC device |
|---|
| 404 | + * @node: Pointer to the individual rpmh-regulator resource |
|---|
| 391 | 405 | * device node |
|---|
| 392 | | - * pmic_id: String used to identify the top level rpmh-regulator |
|---|
| 406 | + * @pmic_id: String used to identify the top level rpmh-regulator |
|---|
| 393 | 407 | * PMIC device on the board |
|---|
| 394 | | - * pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator |
|---|
| 408 | + * @pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator |
|---|
| 395 | 409 | * resources defined for the top level PMIC device |
|---|
| 396 | 410 | * |
|---|
| 397 | 411 | * Return: 0 on success, errno on failure |
|---|
| .. | .. |
|---|
| 410 | 424 | vreg->dev = dev; |
|---|
| 411 | 425 | |
|---|
| 412 | 426 | for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++) |
|---|
| 413 | | - if (!strcmp(rpmh_data->name, node->name)) |
|---|
| 427 | + if (of_node_name_eq(node, rpmh_data->name)) |
|---|
| 414 | 428 | break; |
|---|
| 415 | 429 | |
|---|
| 416 | 430 | if (!rpmh_data->name) { |
|---|
| 417 | | - dev_err(dev, "Unknown regulator %s\n", node->name); |
|---|
| 431 | + dev_err(dev, "Unknown regulator %pOFn\n", node); |
|---|
| 418 | 432 | return -EINVAL; |
|---|
| 419 | 433 | } |
|---|
| 420 | 434 | |
|---|
| .. | .. |
|---|
| 423 | 437 | |
|---|
| 424 | 438 | vreg->addr = cmd_db_read_addr(rpmh_resource_name); |
|---|
| 425 | 439 | if (!vreg->addr) { |
|---|
| 426 | | - dev_err(dev, "%s: could not find RPMh address for resource %s\n", |
|---|
| 427 | | - node->name, rpmh_resource_name); |
|---|
| 440 | + dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n", |
|---|
| 441 | + node, rpmh_resource_name); |
|---|
| 428 | 442 | return -ENODEV; |
|---|
| 429 | 443 | } |
|---|
| 430 | 444 | |
|---|
| .. | .. |
|---|
| 469 | 483 | rdev = devm_regulator_register(dev, &vreg->rdesc, ®_config); |
|---|
| 470 | 484 | if (IS_ERR(rdev)) { |
|---|
| 471 | 485 | ret = PTR_ERR(rdev); |
|---|
| 472 | | - dev_err(dev, "%s: devm_regulator_register() failed, ret=%d\n", |
|---|
| 473 | | - node->name, ret); |
|---|
| 486 | + dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n", |
|---|
| 487 | + node, ret); |
|---|
| 474 | 488 | return ret; |
|---|
| 475 | 489 | } |
|---|
| 476 | 490 | |
|---|
| 477 | | - dev_dbg(dev, "%s regulator registered for RPMh resource %s @ 0x%05X\n", |
|---|
| 478 | | - node->name, rpmh_resource_name, vreg->addr); |
|---|
| 491 | + dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n", |
|---|
| 492 | + node, rpmh_resource_name, vreg->addr); |
|---|
| 479 | 493 | |
|---|
| 480 | 494 | return 0; |
|---|
| 481 | 495 | } |
|---|
| .. | .. |
|---|
| 485 | 499 | [REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION, |
|---|
| 486 | 500 | [REGULATOR_MODE_IDLE] = PMIC4_LDO_MODE_LPM, |
|---|
| 487 | 501 | [REGULATOR_MODE_NORMAL] = PMIC4_LDO_MODE_HPM, |
|---|
| 502 | + [REGULATOR_MODE_FAST] = -EINVAL, |
|---|
| 503 | +}; |
|---|
| 504 | + |
|---|
| 505 | +static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = { |
|---|
| 506 | + [REGULATOR_MODE_INVALID] = -EINVAL, |
|---|
| 507 | + [REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION, |
|---|
| 508 | + [REGULATOR_MODE_IDLE] = PMIC5_LDO_MODE_LPM, |
|---|
| 509 | + [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM, |
|---|
| 488 | 510 | [REGULATOR_MODE_FAST] = -EINVAL, |
|---|
| 489 | 511 | }; |
|---|
| 490 | 512 | |
|---|
| .. | .. |
|---|
| 504 | 526 | break; |
|---|
| 505 | 527 | default: |
|---|
| 506 | 528 | mode = REGULATOR_MODE_INVALID; |
|---|
| 529 | + break; |
|---|
| 507 | 530 | } |
|---|
| 508 | 531 | |
|---|
| 509 | 532 | return mode; |
|---|
| .. | .. |
|---|
| 515 | 538 | [REGULATOR_MODE_IDLE] = PMIC4_SMPS_MODE_PFM, |
|---|
| 516 | 539 | [REGULATOR_MODE_NORMAL] = PMIC4_SMPS_MODE_AUTO, |
|---|
| 517 | 540 | [REGULATOR_MODE_FAST] = PMIC4_SMPS_MODE_PWM, |
|---|
| 541 | +}; |
|---|
| 542 | + |
|---|
| 543 | +static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = { |
|---|
| 544 | + [REGULATOR_MODE_INVALID] = -EINVAL, |
|---|
| 545 | + [REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION, |
|---|
| 546 | + [REGULATOR_MODE_IDLE] = PMIC5_SMPS_MODE_PFM, |
|---|
| 547 | + [REGULATOR_MODE_NORMAL] = PMIC5_SMPS_MODE_AUTO, |
|---|
| 548 | + [REGULATOR_MODE_FAST] = PMIC5_SMPS_MODE_PWM, |
|---|
| 518 | 549 | }; |
|---|
| 519 | 550 | |
|---|
| 520 | 551 | static unsigned int |
|---|
| .. | .. |
|---|
| 537 | 568 | break; |
|---|
| 538 | 569 | default: |
|---|
| 539 | 570 | mode = REGULATOR_MODE_INVALID; |
|---|
| 571 | + break; |
|---|
| 540 | 572 | } |
|---|
| 541 | 573 | |
|---|
| 542 | 574 | return mode; |
|---|
| .. | .. |
|---|
| 548 | 580 | [REGULATOR_MODE_IDLE] = PMIC4_BOB_MODE_PFM, |
|---|
| 549 | 581 | [REGULATOR_MODE_NORMAL] = PMIC4_BOB_MODE_AUTO, |
|---|
| 550 | 582 | [REGULATOR_MODE_FAST] = PMIC4_BOB_MODE_PWM, |
|---|
| 583 | +}; |
|---|
| 584 | + |
|---|
| 585 | +static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = { |
|---|
| 586 | + [REGULATOR_MODE_INVALID] = -EINVAL, |
|---|
| 587 | + [REGULATOR_MODE_STANDBY] = -EINVAL, |
|---|
| 588 | + [REGULATOR_MODE_IDLE] = PMIC5_BOB_MODE_PFM, |
|---|
| 589 | + [REGULATOR_MODE_NORMAL] = PMIC5_BOB_MODE_AUTO, |
|---|
| 590 | + [REGULATOR_MODE_FAST] = PMIC5_BOB_MODE_PWM, |
|---|
| 551 | 591 | }; |
|---|
| 552 | 592 | |
|---|
| 553 | 593 | static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode) |
|---|
| .. | .. |
|---|
| 566 | 606 | break; |
|---|
| 567 | 607 | default: |
|---|
| 568 | 608 | mode = REGULATOR_MODE_INVALID; |
|---|
| 609 | + break; |
|---|
| 569 | 610 | } |
|---|
| 570 | 611 | |
|---|
| 571 | 612 | return mode; |
|---|
| .. | .. |
|---|
| 632 | 673 | .regulator_type = XOB, |
|---|
| 633 | 674 | .ops = &rpmh_regulator_xob_ops, |
|---|
| 634 | 675 | /* LVS hardware does not support voltage or mode configuration. */ |
|---|
| 676 | +}; |
|---|
| 677 | + |
|---|
| 678 | +static const struct rpmh_vreg_hw_data pmic5_pldo = { |
|---|
| 679 | + .regulator_type = VRM, |
|---|
| 680 | + .ops = &rpmh_regulator_vrm_drms_ops, |
|---|
| 681 | + .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), |
|---|
| 682 | + .n_voltages = 256, |
|---|
| 683 | + .hpm_min_load_uA = 10000, |
|---|
| 684 | + .pmic_mode_map = pmic_mode_map_pmic5_ldo, |
|---|
| 685 | + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, |
|---|
| 686 | +}; |
|---|
| 687 | + |
|---|
| 688 | +static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { |
|---|
| 689 | + .regulator_type = VRM, |
|---|
| 690 | + .ops = &rpmh_regulator_vrm_drms_ops, |
|---|
| 691 | + .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), |
|---|
| 692 | + .n_voltages = 63, |
|---|
| 693 | + .hpm_min_load_uA = 10000, |
|---|
| 694 | + .pmic_mode_map = pmic_mode_map_pmic5_ldo, |
|---|
| 695 | + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, |
|---|
| 696 | +}; |
|---|
| 697 | + |
|---|
| 698 | +static const struct rpmh_vreg_hw_data pmic5_nldo = { |
|---|
| 699 | + .regulator_type = VRM, |
|---|
| 700 | + .ops = &rpmh_regulator_vrm_drms_ops, |
|---|
| 701 | + .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), |
|---|
| 702 | + .n_voltages = 124, |
|---|
| 703 | + .hpm_min_load_uA = 30000, |
|---|
| 704 | + .pmic_mode_map = pmic_mode_map_pmic5_ldo, |
|---|
| 705 | + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, |
|---|
| 706 | +}; |
|---|
| 707 | + |
|---|
| 708 | +static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { |
|---|
| 709 | + .regulator_type = VRM, |
|---|
| 710 | + .ops = &rpmh_regulator_vrm_ops, |
|---|
| 711 | + .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), |
|---|
| 712 | + .n_voltages = 216, |
|---|
| 713 | + .pmic_mode_map = pmic_mode_map_pmic5_smps, |
|---|
| 714 | + .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, |
|---|
| 715 | +}; |
|---|
| 716 | + |
|---|
| 717 | +static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { |
|---|
| 718 | + .regulator_type = VRM, |
|---|
| 719 | + .ops = &rpmh_regulator_vrm_ops, |
|---|
| 720 | + .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), |
|---|
| 721 | + .n_voltages = 264, |
|---|
| 722 | + .pmic_mode_map = pmic_mode_map_pmic5_smps, |
|---|
| 723 | + .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, |
|---|
| 724 | +}; |
|---|
| 725 | + |
|---|
| 726 | +static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { |
|---|
| 727 | + .regulator_type = VRM, |
|---|
| 728 | + .ops = &rpmh_regulator_vrm_ops, |
|---|
| 729 | + .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), |
|---|
| 730 | + .n_voltages = 236, |
|---|
| 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_hfsmps515_1 = { |
|---|
| 736 | + .regulator_type = VRM, |
|---|
| 737 | + .ops = &rpmh_regulator_vrm_ops, |
|---|
| 738 | + .voltage_range = REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), |
|---|
| 739 | + .n_voltages = 5, |
|---|
| 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_bob = { |
|---|
| 745 | + .regulator_type = VRM, |
|---|
| 746 | + .ops = &rpmh_regulator_vrm_bypass_ops, |
|---|
| 747 | + .voltage_range = REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), |
|---|
| 748 | + .n_voltages = 32, |
|---|
| 749 | + .pmic_mode_map = pmic_mode_map_pmic5_bob, |
|---|
| 750 | + .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, |
|---|
| 635 | 751 | }; |
|---|
| 636 | 752 | |
|---|
| 637 | 753 | #define RPMH_VREG(_name, _resource_name, _hw_data, _supply_name) \ |
|---|
| .. | .. |
|---|
| 702 | 818 | {}, |
|---|
| 703 | 819 | }; |
|---|
| 704 | 820 | |
|---|
| 821 | +static const struct rpmh_vreg_init_data pm8150_vreg_data[] = { |
|---|
| 822 | + RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), |
|---|
| 823 | + RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), |
|---|
| 824 | + RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), |
|---|
| 825 | + RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), |
|---|
| 826 | + RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), |
|---|
| 827 | + RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), |
|---|
| 828 | + RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), |
|---|
| 829 | + RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps510, "vdd-s8"), |
|---|
| 830 | + RPMH_VREG("smps9", "smp%s9", &pmic5_ftsmps510, "vdd-s9"), |
|---|
| 831 | + RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"), |
|---|
| 832 | + RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1-l8-l11"), |
|---|
| 833 | + RPMH_VREG("ldo2", "ldo%s2", &pmic5_pldo, "vdd-l2-l10"), |
|---|
| 834 | + RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3-l4-l5-l18"), |
|---|
| 835 | + RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l3-l4-l5-l18"), |
|---|
| 836 | + RPMH_VREG("ldo5", "ldo%s5", &pmic5_nldo, "vdd-l3-l4-l5-l18"), |
|---|
| 837 | + RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6-l9"), |
|---|
| 838 | + RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l12-l14-l15"), |
|---|
| 839 | + RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l1-l8-l11"), |
|---|
| 840 | + RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l6-l9"), |
|---|
| 841 | + RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l2-l10"), |
|---|
| 842 | + RPMH_VREG("ldo11", "ldo%s11", &pmic5_nldo, "vdd-l1-l8-l11"), |
|---|
| 843 | + RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), |
|---|
| 844 | + RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo, "vdd-l13-l16-l17"), |
|---|
| 845 | + RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), |
|---|
| 846 | + RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l7-l12-l14-l15"), |
|---|
| 847 | + RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l13-l16-l17"), |
|---|
| 848 | + RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l13-l16-l17"), |
|---|
| 849 | + RPMH_VREG("ldo18", "ldo%s18", &pmic5_nldo, "vdd-l3-l4-l5-l18"), |
|---|
| 850 | + {}, |
|---|
| 851 | +}; |
|---|
| 852 | + |
|---|
| 853 | +static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = { |
|---|
| 854 | + RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), |
|---|
| 855 | + RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), |
|---|
| 856 | + RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), |
|---|
| 857 | + RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"), |
|---|
| 858 | + RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"), |
|---|
| 859 | + RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), |
|---|
| 860 | + RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), |
|---|
| 861 | + RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"), |
|---|
| 862 | + RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l8"), |
|---|
| 863 | + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"), |
|---|
| 864 | + RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"), |
|---|
| 865 | + RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l4-l5-l6"), |
|---|
| 866 | + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l4-l5-l6"), |
|---|
| 867 | + RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l4-l5-l6"), |
|---|
| 868 | + RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l11"), |
|---|
| 869 | + RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo_lv, "vdd-l1-l8"), |
|---|
| 870 | + RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l9-l10"), |
|---|
| 871 | + RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l9-l10"), |
|---|
| 872 | + RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l7-l11"), |
|---|
| 873 | + RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"), |
|---|
| 874 | + {}, |
|---|
| 875 | +}; |
|---|
| 876 | + |
|---|
| 877 | +static const struct rpmh_vreg_init_data pm8009_vreg_data[] = { |
|---|
| 878 | + RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"), |
|---|
| 879 | + RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps515, "vdd-s2"), |
|---|
| 880 | + RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), |
|---|
| 881 | + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"), |
|---|
| 882 | + RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), |
|---|
| 883 | + RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"), |
|---|
| 884 | + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"), |
|---|
| 885 | + RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"), |
|---|
| 886 | + RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo_lv, "vdd-l7"), |
|---|
| 887 | + {}, |
|---|
| 888 | +}; |
|---|
| 889 | + |
|---|
| 890 | +static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = { |
|---|
| 891 | + RPMH_VREG("smps1", "smp%s1", &pmic5_hfsmps510, "vdd-s1"), |
|---|
| 892 | + RPMH_VREG("smps2", "smp%s2", &pmic5_hfsmps515_1, "vdd-s2"), |
|---|
| 893 | + RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), |
|---|
| 894 | + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2"), |
|---|
| 895 | + RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l3"), |
|---|
| 896 | + RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4"), |
|---|
| 897 | + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l6"), |
|---|
| 898 | + RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l5-l6"), |
|---|
| 899 | + RPMH_VREG("ldo7", "ldo%s6", &pmic5_pldo_lv, "vdd-l7"), |
|---|
| 900 | + {}, |
|---|
| 901 | +}; |
|---|
| 902 | + |
|---|
| 903 | +static const struct rpmh_vreg_init_data pm6150_vreg_data[] = { |
|---|
| 904 | + RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), |
|---|
| 905 | + RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), |
|---|
| 906 | + RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), |
|---|
| 907 | + RPMH_VREG("smps4", "smp%s4", &pmic5_hfsmps510, "vdd-s4"), |
|---|
| 908 | + RPMH_VREG("smps5", "smp%s5", &pmic5_hfsmps510, "vdd-s5"), |
|---|
| 909 | + RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo, "vdd-l1"), |
|---|
| 910 | + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"), |
|---|
| 911 | + RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"), |
|---|
| 912 | + RPMH_VREG("ldo4", "ldo%s4", &pmic5_nldo, "vdd-l4-l7-l8"), |
|---|
| 913 | + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), |
|---|
| 914 | + RPMH_VREG("ldo6", "ldo%s6", &pmic5_nldo, "vdd-l6"), |
|---|
| 915 | + RPMH_VREG("ldo7", "ldo%s7", &pmic5_nldo, "vdd-l4-l7-l8"), |
|---|
| 916 | + RPMH_VREG("ldo8", "ldo%s8", &pmic5_nldo, "vdd-l4-l7-l8"), |
|---|
| 917 | + RPMH_VREG("ldo9", "ldo%s9", &pmic5_nldo, "vdd-l9"), |
|---|
| 918 | + RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo_lv, "vdd-l10-l14-l15"), |
|---|
| 919 | + RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo_lv, "vdd-l11-l12-l13"), |
|---|
| 920 | + RPMH_VREG("ldo12", "ldo%s12", &pmic5_pldo_lv, "vdd-l11-l12-l13"), |
|---|
| 921 | + RPMH_VREG("ldo13", "ldo%s13", &pmic5_pldo_lv, "vdd-l11-l12-l13"), |
|---|
| 922 | + RPMH_VREG("ldo14", "ldo%s14", &pmic5_pldo_lv, "vdd-l10-l14-l15"), |
|---|
| 923 | + RPMH_VREG("ldo15", "ldo%s15", &pmic5_pldo_lv, "vdd-l10-l14-l15"), |
|---|
| 924 | + RPMH_VREG("ldo16", "ldo%s16", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), |
|---|
| 925 | + RPMH_VREG("ldo17", "ldo%s17", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), |
|---|
| 926 | + RPMH_VREG("ldo18", "ldo%s18", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), |
|---|
| 927 | + RPMH_VREG("ldo19", "ldo%s19", &pmic5_pldo, "vdd-l5-l16-l17-l18-l19"), |
|---|
| 928 | + {}, |
|---|
| 929 | +}; |
|---|
| 930 | + |
|---|
| 931 | +static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = { |
|---|
| 932 | + RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), |
|---|
| 933 | + RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), |
|---|
| 934 | + RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps510, "vdd-s3"), |
|---|
| 935 | + RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps510, "vdd-s4"), |
|---|
| 936 | + RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps510, "vdd-s5"), |
|---|
| 937 | + RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps510, "vdd-s6"), |
|---|
| 938 | + RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps510, "vdd-s7"), |
|---|
| 939 | + RPMH_VREG("smps8", "smp%s8", &pmic5_hfsmps510, "vdd-s8"), |
|---|
| 940 | + RPMH_VREG("ldo1", "ldo%s1", &pmic5_pldo_lv, "vdd-l1-l8"), |
|---|
| 941 | + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo, "vdd-l2-l3"), |
|---|
| 942 | + RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo, "vdd-l2-l3"), |
|---|
| 943 | + RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo, "vdd-l4-l5-l6"), |
|---|
| 944 | + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo, "vdd-l4-l5-l6"), |
|---|
| 945 | + RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo, "vdd-l4-l5-l6"), |
|---|
| 946 | + RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo, "vdd-l7-l11"), |
|---|
| 947 | + RPMH_VREG("ldo8", "ldo%s8", &pmic5_pldo, "vdd-l1-l8"), |
|---|
| 948 | + RPMH_VREG("ldo9", "ldo%s9", &pmic5_pldo, "vdd-l9-l10"), |
|---|
| 949 | + RPMH_VREG("ldo10", "ldo%s10", &pmic5_pldo, "vdd-l9-l10"), |
|---|
| 950 | + RPMH_VREG("ldo11", "ldo%s11", &pmic5_pldo, "vdd-l7-l11"), |
|---|
| 951 | + RPMH_VREG("bob", "bob%s1", &pmic5_bob, "vdd-bob"), |
|---|
| 952 | + {}, |
|---|
| 953 | +}; |
|---|
| 954 | + |
|---|
| 705 | 955 | static int rpmh_regulator_probe(struct platform_device *pdev) |
|---|
| 706 | 956 | { |
|---|
| 707 | 957 | struct device *dev = &pdev->dev; |
|---|
| .. | .. |
|---|
| 739 | 989 | return 0; |
|---|
| 740 | 990 | } |
|---|
| 741 | 991 | |
|---|
| 742 | | -static const struct of_device_id rpmh_regulator_match_table[] = { |
|---|
| 992 | +static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = { |
|---|
| 993 | + { |
|---|
| 994 | + .compatible = "qcom,pm8005-rpmh-regulators", |
|---|
| 995 | + .data = pm8005_vreg_data, |
|---|
| 996 | + }, |
|---|
| 997 | + { |
|---|
| 998 | + .compatible = "qcom,pm8009-rpmh-regulators", |
|---|
| 999 | + .data = pm8009_vreg_data, |
|---|
| 1000 | + }, |
|---|
| 1001 | + { |
|---|
| 1002 | + .compatible = "qcom,pm8009-1-rpmh-regulators", |
|---|
| 1003 | + .data = pm8009_1_vreg_data, |
|---|
| 1004 | + }, |
|---|
| 1005 | + { |
|---|
| 1006 | + .compatible = "qcom,pm8150-rpmh-regulators", |
|---|
| 1007 | + .data = pm8150_vreg_data, |
|---|
| 1008 | + }, |
|---|
| 1009 | + { |
|---|
| 1010 | + .compatible = "qcom,pm8150l-rpmh-regulators", |
|---|
| 1011 | + .data = pm8150l_vreg_data, |
|---|
| 1012 | + }, |
|---|
| 743 | 1013 | { |
|---|
| 744 | 1014 | .compatible = "qcom,pm8998-rpmh-regulators", |
|---|
| 745 | 1015 | .data = pm8998_vreg_data, |
|---|
| .. | .. |
|---|
| 749 | 1019 | .data = pmi8998_vreg_data, |
|---|
| 750 | 1020 | }, |
|---|
| 751 | 1021 | { |
|---|
| 752 | | - .compatible = "qcom,pm8005-rpmh-regulators", |
|---|
| 753 | | - .data = pm8005_vreg_data, |
|---|
| 1022 | + .compatible = "qcom,pm6150-rpmh-regulators", |
|---|
| 1023 | + .data = pm6150_vreg_data, |
|---|
| 1024 | + }, |
|---|
| 1025 | + { |
|---|
| 1026 | + .compatible = "qcom,pm6150l-rpmh-regulators", |
|---|
| 1027 | + .data = pm6150l_vreg_data, |
|---|
| 754 | 1028 | }, |
|---|
| 755 | 1029 | {} |
|---|
| 756 | 1030 | }; |
|---|