@@ -306,27 +306,26 @@ static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev)
306306}
307307
308308/**
309- * rpmh_regulator_vrm_set_load() - set the regulator mode based upon the load
310- * current requested
309+ * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the load
311310 * @rdev: Regulator device pointer for the rpmh-regulator
311+ * @input_uV: Input voltage
312+ * @output_uV: Output voltage
312313 * @load_uA: Aggregated load current in microamps
313314 *
314315 * This function is used in the regulator_ops for VRM type RPMh regulator
315316 * devices.
316317 *
317318 * Return: 0 on success, errno on failure
318319 */
319- static int rpmh_regulator_vrm_set_load (struct regulator_dev * rdev , int load_uA )
320+ static unsigned int rpmh_regulator_vrm_get_optimum_mode (
321+ struct regulator_dev * rdev , int input_uV , int output_uV , int load_uA )
320322{
321323 struct rpmh_vreg * vreg = rdev_get_drvdata (rdev );
322- unsigned int mode ;
323324
324325 if (load_uA >= vreg -> hw_data -> hpm_min_load_uA )
325- mode = REGULATOR_MODE_NORMAL ;
326+ return REGULATOR_MODE_NORMAL ;
326327 else
327- mode = REGULATOR_MODE_IDLE ;
328-
329- return rpmh_regulator_vrm_set_mode (rdev , mode );
328+ return REGULATOR_MODE_IDLE ;
330329}
331330
332331static int rpmh_regulator_vrm_set_bypass (struct regulator_dev * rdev ,
@@ -375,7 +374,7 @@ static const struct regulator_ops rpmh_regulator_vrm_drms_ops = {
375374 .list_voltage = regulator_list_voltage_linear_range ,
376375 .set_mode = rpmh_regulator_vrm_set_mode ,
377376 .get_mode = rpmh_regulator_vrm_get_mode ,
378- .set_load = rpmh_regulator_vrm_set_load ,
377+ .get_optimum_mode = rpmh_regulator_vrm_get_optimum_mode ,
379378};
380379
381380static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = {
@@ -732,6 +731,24 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = {
732731 .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode ,
733732};
734733
734+ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = {
735+ .regulator_type = VRM ,
736+ .ops = & rpmh_regulator_vrm_ops ,
737+ .voltage_range = REGULATOR_LINEAR_RANGE (300000 , 0 , 267 , 4000 ),
738+ .n_voltages = 268 ,
739+ .pmic_mode_map = pmic_mode_map_pmic5_smps ,
740+ .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode ,
741+ };
742+
743+ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = {
744+ .regulator_type = VRM ,
745+ .ops = & rpmh_regulator_vrm_ops ,
746+ .voltage_range = REGULATOR_LINEAR_RANGE (600000 , 0 , 267 , 8000 ),
747+ .n_voltages = 268 ,
748+ .pmic_mode_map = pmic_mode_map_pmic5_smps ,
749+ .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode ,
750+ };
751+
735752static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = {
736753 .regulator_type = VRM ,
737754 .ops = & rpmh_regulator_vrm_ops ,
@@ -988,6 +1005,57 @@ static const struct rpmh_vreg_init_data pm8450_vreg_data[] = {
9881005 {}
9891006};
9901007
1008+ static const struct rpmh_vreg_init_data pm8550_vreg_data [] = {
1009+ RPMH_VREG ("ldo1" , "ldo%s1" , & pmic5_pldo , "vdd-l1-l4-l10" ),
1010+ RPMH_VREG ("ldo2" , "ldo%s2" , & pmic5_pldo , "vdd-l2-l13-l14" ),
1011+ RPMH_VREG ("ldo3" , "ldo%s3" , & pmic5_nldo , "vdd-l3" ),
1012+ RPMH_VREG ("ldo4" , "ldo%s4" , & pmic5_nldo , "vdd-l1-l4-l10" ),
1013+ RPMH_VREG ("ldo5" , "ldo%s5" , & pmic5_pldo , "vdd-l5-l16" ),
1014+ RPMH_VREG ("ldo6" , "ldo%s6" , & pmic5_pldo_lv , "vdd-l6-l7" ),
1015+ RPMH_VREG ("ldo7" , "ldo%s7" , & pmic5_pldo_lv , "vdd-l6-l7" ),
1016+ RPMH_VREG ("ldo8" , "ldo%s8" , & pmic5_pldo_lv , "vdd-l8-l9" ),
1017+ RPMH_VREG ("ldo9" , "ldo%s9" , & pmic5_pldo , "vdd-l8-l9" ),
1018+ RPMH_VREG ("ldo10" , "ldo%s10" , & pmic5_nldo , "vdd-l1-l4-l10" ),
1019+ RPMH_VREG ("ldo11" , "ldo%s11" , & pmic5_pldo , "vdd-l11" ),
1020+ RPMH_VREG ("ldo12" , "ldo%s12" , & pmic5_pldo , "vdd-l12" ),
1021+ RPMH_VREG ("ldo13" , "ldo%s13" , & pmic5_pldo , "vdd-l2-l13-l14" ),
1022+ RPMH_VREG ("ldo14" , "ldo%s14" , & pmic5_pldo , "vdd-l2-l13-l14" ),
1023+ RPMH_VREG ("ldo15" , "ldo%s15" , & pmic5_pldo , "vdd-l15" ),
1024+ RPMH_VREG ("ldo16" , "ldo%s16" , & pmic5_pldo , "vdd-l5-l16" ),
1025+ RPMH_VREG ("ldo17" , "ldo%s17" , & pmic5_pldo , "vdd-l17" ),
1026+ RPMH_VREG ("bob1" , "bob%s1" , & pmic5_bob , "vdd-bob1" ),
1027+ RPMH_VREG ("bob2" , "bob%s2" , & pmic5_bob , "vdd-bob2" ),
1028+ {}
1029+ };
1030+
1031+ static const struct rpmh_vreg_init_data pm8550vs_vreg_data [] = {
1032+ RPMH_VREG ("smps1" , "smp%s1" , & pmic5_ftsmps525_lv , "vdd-s1" ),
1033+ RPMH_VREG ("smps2" , "smp%s2" , & pmic5_ftsmps525_lv , "vdd-s2" ),
1034+ RPMH_VREG ("smps3" , "smp%s3" , & pmic5_ftsmps525_lv , "vdd-s3" ),
1035+ RPMH_VREG ("smps4" , "smp%s4" , & pmic5_ftsmps525_lv , "vdd-s4" ),
1036+ RPMH_VREG ("smps5" , "smp%s5" , & pmic5_ftsmps525_lv , "vdd-s5" ),
1037+ RPMH_VREG ("smps6" , "smp%s6" , & pmic5_ftsmps525_mv , "vdd-s6" ),
1038+ RPMH_VREG ("ldo1" , "ldo%s1" , & pmic5_nldo , "vdd-l1" ),
1039+ RPMH_VREG ("ldo2" , "ldo%s2" , & pmic5_nldo , "vdd-l2" ),
1040+ RPMH_VREG ("ldo3" , "ldo%s3" , & pmic5_nldo , "vdd-l3" ),
1041+ {}
1042+ };
1043+
1044+ static const struct rpmh_vreg_init_data pm8550ve_vreg_data [] = {
1045+ RPMH_VREG ("smps1" , "smp%s1" , & pmic5_ftsmps525_lv , "vdd-s1" ),
1046+ RPMH_VREG ("smps2" , "smp%s2" , & pmic5_ftsmps525_lv , "vdd-s2" ),
1047+ RPMH_VREG ("smps3" , "smp%s3" , & pmic5_ftsmps525_lv , "vdd-s3" ),
1048+ RPMH_VREG ("smps4" , "smp%s4" , & pmic5_ftsmps525_lv , "vdd-s4" ),
1049+ RPMH_VREG ("smps5" , "smp%s5" , & pmic5_ftsmps525_lv , "vdd-s5" ),
1050+ RPMH_VREG ("smps6" , "smp%s6" , & pmic5_ftsmps525_lv , "vdd-s6" ),
1051+ RPMH_VREG ("smps7" , "smp%s7" , & pmic5_ftsmps525_lv , "vdd-s7" ),
1052+ RPMH_VREG ("smps8" , "smp%s8" , & pmic5_ftsmps525_lv , "vdd-s8" ),
1053+ RPMH_VREG ("ldo1" , "ldo%s1" , & pmic5_nldo , "vdd-l1" ),
1054+ RPMH_VREG ("ldo2" , "ldo%s2" , & pmic5_nldo , "vdd-l2" ),
1055+ RPMH_VREG ("ldo3" , "ldo%s3" , & pmic5_nldo , "vdd-l3" ),
1056+ {}
1057+ };
1058+
9911059static const struct rpmh_vreg_init_data pm8009_vreg_data [] = {
9921060 RPMH_VREG ("smps1" , "smp%s1" , & pmic5_hfsmps510 , "vdd-s1" ),
9931061 RPMH_VREG ("smps2" , "smp%s2" , & pmic5_hfsmps515 , "vdd-s2" ),
@@ -1188,7 +1256,7 @@ static const struct rpmh_vreg_init_data pm7325_vreg_data[] = {
11881256static const struct rpmh_vreg_init_data pmr735a_vreg_data [] = {
11891257 RPMH_VREG ("smps1" , "smp%s1" , & pmic5_ftsmps520 , "vdd-s1" ),
11901258 RPMH_VREG ("smps2" , "smp%s2" , & pmic5_ftsmps520 , "vdd-s2" ),
1191- RPMH_VREG ("smps3" , "smp%s3" , & pmic5_hfsmps510 , "vdd-s3" ),
1259+ RPMH_VREG ("smps3" , "smp%s3" , & pmic5_hfsmps515 , "vdd-s3" ),
11921260 RPMH_VREG ("ldo1" , "ldo%s1" , & pmic5_nldo , "vdd-l1-l2" ),
11931261 RPMH_VREG ("ldo2" , "ldo%s2" , & pmic5_nldo , "vdd-l1-l2" ),
11941262 RPMH_VREG ("ldo3" , "ldo%s3" , & pmic5_nldo , "vdd-l3" ),
@@ -1199,6 +1267,52 @@ static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = {
11991267 {}
12001268};
12011269
1270+ static const struct rpmh_vreg_init_data pm660_vreg_data [] = {
1271+ RPMH_VREG ("smps1" , "smp%s1" , & pmic4_ftsmps426 , "vdd-s1" ),
1272+ RPMH_VREG ("smps2" , "smp%s2" , & pmic4_ftsmps426 , "vdd-s2" ),
1273+ RPMH_VREG ("smps3" , "smp%s3" , & pmic4_ftsmps426 , "vdd-s3" ),
1274+ RPMH_VREG ("smps4" , "smp%s4" , & pmic4_hfsmps3 , "vdd-s4" ),
1275+ RPMH_VREG ("smps5" , "smp%s5" , & pmic4_hfsmps3 , "vdd-s5" ),
1276+ RPMH_VREG ("smps6" , "smp%s6" , & pmic4_hfsmps3 , "vdd-s6" ),
1277+ RPMH_VREG ("ldo1" , "ldo%s1" , & pmic4_nldo , "vdd-l1-l6-l7" ),
1278+ RPMH_VREG ("ldo2" , "ldo%s2" , & pmic4_nldo , "vdd-l2-l3" ),
1279+ RPMH_VREG ("ldo3" , "ldo%s3" , & pmic4_nldo , "vdd-l2-l3" ),
1280+ /* ldo4 is inaccessible on PM660 */
1281+ RPMH_VREG ("ldo5" , "ldo%s5" , & pmic4_nldo , "vdd-l5" ),
1282+ RPMH_VREG ("ldo6" , "ldo%s6" , & pmic4_nldo , "vdd-l1-l6-l7" ),
1283+ RPMH_VREG ("ldo7" , "ldo%s7" , & pmic4_nldo , "vdd-l1-l6-l7" ),
1284+ RPMH_VREG ("ldo8" , "ldo%s8" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1285+ RPMH_VREG ("ldo9" , "ldo%s9" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1286+ RPMH_VREG ("ldo10" , "ldo%s10" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1287+ RPMH_VREG ("ldo11" , "ldo%s11" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1288+ RPMH_VREG ("ldo12" , "ldo%s12" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1289+ RPMH_VREG ("ldo13" , "ldo%s13" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1290+ RPMH_VREG ("ldo14" , "ldo%s14" , & pmic4_pldo_lv , "vdd-l8-l9-l10-l11-l12-l13-l14" ),
1291+ RPMH_VREG ("ldo15" , "ldo%s15" , & pmic4_pldo , "vdd-l15-l16-l17-l18-l19" ),
1292+ RPMH_VREG ("ldo16" , "ldo%s16" , & pmic4_pldo , "vdd-l15-l16-l17-l18-l19" ),
1293+ RPMH_VREG ("ldo17" , "ldo%s17" , & pmic4_pldo , "vdd-l15-l16-l17-l18-l19" ),
1294+ RPMH_VREG ("ldo18" , "ldo%s18" , & pmic4_pldo , "vdd-l15-l16-l17-l18-l19" ),
1295+ RPMH_VREG ("ldo19" , "ldo%s19" , & pmic4_pldo , "vdd-l15-l16-l17-l18-l19" ),
1296+ {}
1297+ };
1298+
1299+ static const struct rpmh_vreg_init_data pm660l_vreg_data [] = {
1300+ RPMH_VREG ("smps1" , "smp%s1" , & pmic4_ftsmps426 , "vdd-s1" ),
1301+ RPMH_VREG ("smps2" , "smp%s2" , & pmic4_ftsmps426 , "vdd-s2" ),
1302+ RPMH_VREG ("smps3" , "smp%s3" , & pmic4_ftsmps426 , "vdd-s3-s4" ),
1303+ RPMH_VREG ("smps5" , "smp%s5" , & pmic4_ftsmps426 , "vdd-s5" ),
1304+ RPMH_VREG ("ldo1" , "ldo%s1" , & pmic4_nldo , "vdd-l1-l9-l10" ),
1305+ RPMH_VREG ("ldo2" , "ldo%s2" , & pmic4_pldo , "vdd-l2" ),
1306+ RPMH_VREG ("ldo3" , "ldo%s3" , & pmic4_pldo , "vdd-l3-l5-l7-l8" ),
1307+ RPMH_VREG ("ldo4" , "ldo%s4" , & pmic4_pldo , "vdd-l4-l6" ),
1308+ RPMH_VREG ("ldo5" , "ldo%s5" , & pmic4_pldo , "vdd-l3-l5-l7-l8" ),
1309+ RPMH_VREG ("ldo6" , "ldo%s6" , & pmic4_pldo , "vdd-l4-l6" ),
1310+ RPMH_VREG ("ldo7" , "ldo%s7" , & pmic4_pldo , "vdd-l3-l5-l7-l8" ),
1311+ RPMH_VREG ("ldo8" , "ldo%s8" , & pmic4_pldo , "vdd-l3-l5-l7-l8" ),
1312+ RPMH_VREG ("bob" , "bob%s1" , & pmic4_bob , "vdd-bob" ),
1313+ {}
1314+ };
1315+
12021316static int rpmh_regulator_probe (struct platform_device * pdev )
12031317{
12041318 struct device * dev = & pdev -> dev ;
@@ -1269,6 +1383,18 @@ static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = {
12691383 .compatible = "qcom,pm8450-rpmh-regulators" ,
12701384 .data = pm8450_vreg_data ,
12711385 },
1386+ {
1387+ .compatible = "qcom,pm8550-rpmh-regulators" ,
1388+ .data = pm8550_vreg_data ,
1389+ },
1390+ {
1391+ .compatible = "qcom,pm8550ve-rpmh-regulators" ,
1392+ .data = pm8550ve_vreg_data ,
1393+ },
1394+ {
1395+ .compatible = "qcom,pm8550vs-rpmh-regulators" ,
1396+ .data = pm8550vs_vreg_data ,
1397+ },
12721398 {
12731399 .compatible = "qcom,pm8998-rpmh-regulators" ,
12741400 .data = pm8998_vreg_data ,
@@ -1321,6 +1447,14 @@ static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = {
13211447 .compatible = "qcom,pmr735a-rpmh-regulators" ,
13221448 .data = pmr735a_vreg_data ,
13231449 },
1450+ {
1451+ .compatible = "qcom,pm660-rpmh-regulators" ,
1452+ .data = pm660_vreg_data ,
1453+ },
1454+ {
1455+ .compatible = "qcom,pm660l-rpmh-regulators" ,
1456+ .data = pm660l_vreg_data ,
1457+ },
13241458 {}
13251459};
13261460MODULE_DEVICE_TABLE (of , rpmh_regulator_match_table );
0 commit comments