Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: qcom_smd: Add PM8950 regulators

The PM8950 provides 6 SMPS regulators, of which 5 HFSMPS
and one FTSMPS2.5 (s5), and 23 LDOs.
Add these to the RPM regulator driver.

Signed-off-by: Angelo G. Del Regno <kholk11@gmail.com>
Link: https://lore.kernel.org/r/20190921095043.62593-4-kholk11@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Angelo G. Del Regno and committed by
Mark Brown
e44adca5 e4ff1710

+113
+21
Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.txt
··· 22 22 "qcom,rpm-pm8841-regulators" 23 23 "qcom,rpm-pm8916-regulators" 24 24 "qcom,rpm-pm8941-regulators" 25 + "qcom,rpm-pm8950-regulators" 25 26 "qcom,rpm-pm8994-regulators" 26 27 "qcom,rpm-pm8998-regulators" 27 28 "qcom,rpm-pma8084-regulators" ··· 51 50 - vdd_l7-supply: 52 51 - vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18-supply: 53 52 Usage: optional (pm8916 only) 53 + Value type: <phandle> 54 + Definition: reference to regulator supplying the input pin, as 55 + described in the data sheet 56 + 57 + - vdd_s1-supply: 58 + - vdd_s2-supply: 59 + - vdd_s3-supply: 60 + - vdd_s4-supply: 61 + - vdd_s4-supply: 62 + - vdd_s5-supply: 63 + - vdd_s6-supply: 64 + - vdd_l1_l19-supply: 65 + - vdd_l2_l23-supply: 66 + - vdd_l3-supply: 67 + - vdd_l4_l5_l6_l7_l16-supply: 68 + - vdd_l8_l11_l12_l17_l22-supply: 69 + - vdd_l9_l10_l13_l14_l15_l18-supply: 70 + - vdd_l20-supply: 71 + - vdd_l21-supply: 72 + Usage: optional (pm8950 only) 54 73 Value type: <phandle> 55 74 Definition: reference to regulator supplying the input pin, as 56 75 described in the data sheet
+92
drivers/regulator/qcom_smd-regulator.c
··· 338 338 .ops = &rpm_smps_ldo_ops, 339 339 }; 340 340 341 + static const struct regulator_desc pm8950_hfsmps = { 342 + .linear_ranges = (struct regulator_linear_range[]) { 343 + REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), 344 + REGULATOR_LINEAR_RANGE(1550000, 96, 127, 25000), 345 + }, 346 + .n_linear_ranges = 2, 347 + .n_voltages = 128, 348 + .ops = &rpm_smps_ldo_ops, 349 + }; 350 + 351 + static const struct regulator_desc pm8950_ftsmps2p5 = { 352 + .linear_ranges = (struct regulator_linear_range[]) { 353 + REGULATOR_LINEAR_RANGE(80000, 0, 255, 5000), 354 + REGULATOR_LINEAR_RANGE(160000, 256, 460, 10000), 355 + }, 356 + .n_linear_ranges = 2, 357 + .n_voltages = 461, 358 + .ops = &rpm_smps_ldo_ops, 359 + }; 360 + 361 + static const struct regulator_desc pm8950_ult_nldo = { 362 + .linear_ranges = (struct regulator_linear_range[]) { 363 + REGULATOR_LINEAR_RANGE(375000, 0, 202, 12500), 364 + }, 365 + .n_linear_ranges = 1, 366 + .n_voltages = 203, 367 + .ops = &rpm_smps_ldo_ops, 368 + }; 369 + 370 + static const struct regulator_desc pm8950_ult_pldo = { 371 + .linear_ranges = (struct regulator_linear_range[]) { 372 + REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500), 373 + }, 374 + .n_linear_ranges = 1, 375 + .n_voltages = 128, 376 + .ops = &rpm_smps_ldo_ops, 377 + }; 378 + 379 + static const struct regulator_desc pm8950_pldo_lv = { 380 + .linear_ranges = (struct regulator_linear_range[]) { 381 + REGULATOR_LINEAR_RANGE(1500000, 0, 16, 25000), 382 + }, 383 + .n_linear_ranges = 1, 384 + .n_voltages = 17, 385 + .ops = &rpm_smps_ldo_ops, 386 + }; 387 + 388 + static const struct regulator_desc pm8950_pldo = { 389 + .linear_ranges = (struct regulator_linear_range[]) { 390 + REGULATOR_LINEAR_RANGE(975000, 0, 164, 12500), 391 + }, 392 + .n_linear_ranges = 1, 393 + .n_voltages = 165, 394 + .ops = &rpm_smps_ldo_ops, 395 + }; 396 + 397 + 341 398 static const struct regulator_desc pm8994_hfsmps = { 342 399 .linear_ranges = (struct regulator_linear_range[]) { 343 400 REGULATOR_LINEAR_RANGE( 375000, 0, 95, 12500), ··· 695 638 {} 696 639 }; 697 640 641 + static const struct rpm_regulator_data rpm_pm8950_regulators[] = { 642 + { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8950_hfsmps, "vdd_s1" }, 643 + { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8950_hfsmps, "vdd_s2" }, 644 + { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8950_hfsmps, "vdd_s3" }, 645 + { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8950_hfsmps, "vdd_s4" }, 646 + { "s5", QCOM_SMD_RPM_SMPA, 5, &pm8950_ftsmps2p5, "vdd_s5" }, 647 + { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_hfsmps, "vdd_s6" }, 648 + 649 + { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8950_ult_nldo, "vdd_l1_l19" }, 650 + { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8950_ult_nldo, "vdd_l2_l23" }, 651 + { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8950_ult_nldo, "vdd_l3" }, 652 + { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16" }, 653 + { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_pldo_lv, "vdd_l4_l5_l6_l7_l16" }, 654 + { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_pldo_lv, "vdd_l4_l5_l6_l7_l16" }, 655 + { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_pldo_lv, "vdd_l4_l5_l6_l7_l16" }, 656 + { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, 657 + { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, 658 + { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_nldo, "vdd_l9_l10_l13_l14_l15_l18"}, 659 + { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22"}, 660 + { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22"}, 661 + { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18"}, 662 + { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18"}, 663 + { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18"}, 664 + { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16"}, 665 + { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22"}, 666 + { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18"}, 667 + { "l19", QCOM_SMD_RPM_LDOA, 18, &pm8950_pldo, "vdd_l1_l19"}, 668 + { "l20", QCOM_SMD_RPM_LDOA, 18, &pm8950_pldo, "vdd_l20"}, 669 + { "l21", QCOM_SMD_RPM_LDOA, 18, &pm8950_pldo, "vdd_l21"}, 670 + { "l22", QCOM_SMD_RPM_LDOA, 18, &pm8950_pldo, "vdd_l8_l11_l12_l17_l22"}, 671 + { "l23", QCOM_SMD_RPM_LDOA, 18, &pm8950_pldo, "vdd_l2_l23"}, 672 + {} 673 + }; 674 + 698 675 static const struct rpm_regulator_data rpm_pm8994_regulators[] = { 699 676 { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8994_ftsmps, "vdd_s1" }, 700 677 { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8994_ftsmps, "vdd_s2" }, ··· 858 767 { .compatible = "qcom,rpm-pm8841-regulators", .data = &rpm_pm8841_regulators }, 859 768 { .compatible = "qcom,rpm-pm8916-regulators", .data = &rpm_pm8916_regulators }, 860 769 { .compatible = "qcom,rpm-pm8941-regulators", .data = &rpm_pm8941_regulators }, 770 + { .compatible = "qcom,rpm-pm8950-regulators", .data = &rpm_pm8950_regulators }, 861 771 { .compatible = "qcom,rpm-pm8994-regulators", .data = &rpm_pm8994_regulators }, 862 772 { .compatible = "qcom,rpm-pm8998-regulators", .data = &rpm_pm8998_regulators }, 863 773 { .compatible = "qcom,rpm-pma8084-regulators", .data = &rpm_pma8084_regulators },