Skip to content

Commit 979dd8d

Browse files
andredbroonie
authored andcommitted
regulator: s2mps11: add S2MPG11 regulator
The S2MPG11 PMIC is a Power Management IC for mobile applications with buck converters, various LDOs, power meters, and additional GPIO interfaces. It typically complements an S2MPG10 PMIC in a main/sub configuration as the sub-PMIC. It has 12 buck, 1 buck-boost, and 15 LDO rails. Several of these can either be controlled via software (register writes) or via external signals, in particular by: * input pins connected to a main processor's: * GPIO pins * other pins that are e.g. firmware- or power-domain-controlled without explicit driver intervention * a combination of input pins and register writes. Control via input pins allows PMIC rails to be controlled by firmware, e.g. during standby/suspend or as part of power domain handling where otherwise that would not be possible. Additionally toggling a pin is faster than register writes, and it also allows the PMIC to ensure that any necessary timing requirements between rails are respected automatically if multiple rails are to be enabled or disabled quasi simultaneously. This commit implements support for all these rails and control combination. Note1: For an externally controlled rail, the regulator_ops provide an empty ::enable() and no ::disable() implementations, even though Linux can not enable the rail and one might think ::enable could be NULL. Without ops->enable(), the regulator core will assume enabling such a rail failed, though, and in turn never add a reference to its parent (supplier) rail. Once a different (Linux-controlled) sibling (consumer) rail on that same parent rail gets disabled, the parent gets disabled (cutting power to the externally controlled rail although it should stay on), and the system will misbehave. Note2: While external control via input pins appears to exist on other versions of this PMIC, there is more flexibility in this version, in particular there is a selection of input pins to choose from for each rail (which must therefore be configured accordingly if in use), whereas other versions don't have this flexibility. Signed-off-by: André Draszik <andre.draszik@linaro.org> Link: https://patch.msgid.link/20260122-s2mpg1x-regulators-v7-19-3b1f9831fffd@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 102dd11 commit 979dd8d

1 file changed

Lines changed: 301 additions & 1 deletion

File tree

drivers/regulator/s2mps11.c

Lines changed: 301 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <linux/regulator/of_regulator.h>
1919
#include <linux/mfd/samsung/core.h>
2020
#include <linux/mfd/samsung/s2mpg10.h>
21+
#include <linux/mfd/samsung/s2mpg11.h>
2122
#include <linux/mfd/samsung/s2mps11.h>
2223
#include <linux/mfd/samsung/s2mps13.h>
2324
#include <linux/mfd/samsung/s2mps14.h>
@@ -437,9 +438,20 @@ static int s2mpg10_of_parse_cb(struct device_node *np,
437438
[S2MPG10_EXTCTRL_LDO20M_EN2] = S2MPG10_PCTRLSEL_LDO20M_EN2,
438439
[S2MPG10_EXTCTRL_LDO20M_EN] = S2MPG10_PCTRLSEL_LDO20M_EN,
439440
};
441+
static const u32 ext_control_s2mpg11[] = {
442+
[S2MPG11_EXTCTRL_PWREN] = S2MPG10_PCTRLSEL_PWREN,
443+
[S2MPG11_EXTCTRL_PWREN_MIF] = S2MPG10_PCTRLSEL_PWREN_MIF,
444+
[S2MPG11_EXTCTRL_AP_ACTIVE_N] = S2MPG10_PCTRLSEL_AP_ACTIVE_N,
445+
[S2MPG11_EXTCTRL_G3D_EN] = S2MPG10_PCTRLSEL_CPUCL1_EN,
446+
[S2MPG11_EXTCTRL_G3D_EN2] = S2MPG10_PCTRLSEL_CPUCL1_EN2,
447+
[S2MPG11_EXTCTRL_AOC_VDD] = S2MPG10_PCTRLSEL_CPUCL2_EN,
448+
[S2MPG11_EXTCTRL_AOC_RET] = S2MPG10_PCTRLSEL_CPUCL2_EN2,
449+
[S2MPG11_EXTCTRL_UFS_EN] = S2MPG10_PCTRLSEL_TPU_EN,
450+
[S2MPG11_EXTCTRL_LDO13S_EN] = S2MPG10_PCTRLSEL_TPU_EN2,
451+
};
440452
u32 ext_control;
441453

442-
if (s2mps11->dev_type != S2MPG10)
454+
if (s2mps11->dev_type != S2MPG10 && s2mps11->dev_type != S2MPG11)
443455
return 0;
444456

445457
if (of_property_read_u32(np, "samsung,ext-control", &ext_control))
@@ -470,6 +482,31 @@ static int s2mpg10_of_parse_cb(struct device_node *np,
470482
ext_control = ext_control_s2mpg10[ext_control];
471483
break;
472484

485+
case S2MPG11:
486+
switch (desc->id) {
487+
case S2MPG11_BUCK1 ... S2MPG11_BUCK3:
488+
case S2MPG11_BUCK5:
489+
case S2MPG11_BUCK8:
490+
case S2MPG11_BUCK9:
491+
case S2MPG11_BUCKD:
492+
case S2MPG11_BUCKA:
493+
case S2MPG11_LDO1:
494+
case S2MPG11_LDO2:
495+
case S2MPG11_LDO8:
496+
case S2MPG11_LDO13:
497+
if (ext_control > S2MPG11_EXTCTRL_LDO13S_EN)
498+
return -EINVAL;
499+
break;
500+
501+
default:
502+
return -EINVAL;
503+
}
504+
505+
if (ext_control > ARRAY_SIZE(ext_control_s2mpg11))
506+
return -EINVAL;
507+
ext_control = ext_control_s2mpg11[ext_control];
508+
break;
509+
473510
default:
474511
return -EINVAL;
475512
}
@@ -507,6 +544,7 @@ static int s2mpg10_enable_ext_control(struct s2mps11_info *s2mps11,
507544

508545
switch (s2mps11->dev_type) {
509546
case S2MPG10:
547+
case S2MPG11:
510548
s2mpg10_desc = to_s2mpg10_regulator_desc(rdev->desc);
511549
break;
512550

@@ -607,6 +645,21 @@ static int s2mpg10_regulator_buck_set_voltage_time(struct regulator_dev *rdev,
607645
rdev->desc->ramp_mask);
608646
}
609647

648+
static int s2mpg11_regulator_buck_set_voltage_time(struct regulator_dev *rdev,
649+
int old_uV, int new_uV)
650+
{
651+
unsigned int ramp_mask;
652+
653+
ramp_mask = rdev->desc->ramp_mask;
654+
if (old_uV > new_uV)
655+
/* The downwards mask is at a different position. */
656+
ramp_mask >>= 2;
657+
658+
return s2mpg1x_regulator_buck_set_voltage_time(rdev, old_uV, new_uV,
659+
rdev->desc->ramp_reg,
660+
ramp_mask);
661+
}
662+
610663
/*
611664
* We assign both, ::set_voltage_time() and ::set_voltage_time_sel(), because
612665
* only if the latter is != NULL, the regulator core will call neither during
@@ -967,6 +1020,246 @@ static const struct s2mpg10_regulator_desc s2mpg10_regulators[] = {
9671020
s2mpg10_regulator_desc_ldo(31, "vinl11m", s2mpg10_ldo_vranges2)
9681021
};
9691022

1023+
static const struct regulator_ops s2mpg11_reg_buck_ops[] = {
1024+
[S2MPG10_REGULATOR_OPS_STD] = {
1025+
.list_voltage = regulator_list_voltage_linear_range,
1026+
.map_voltage = regulator_map_voltage_linear_range,
1027+
.is_enabled = regulator_is_enabled_regmap,
1028+
.enable = regulator_enable_regmap,
1029+
.disable = regulator_disable_regmap,
1030+
.get_voltage_sel = regulator_get_voltage_sel_regmap,
1031+
.set_voltage_sel = regulator_set_voltage_sel_regmap,
1032+
.set_voltage_time = s2mpg11_regulator_buck_set_voltage_time,
1033+
.set_voltage_time_sel = regulator_set_voltage_time_sel,
1034+
.enable_time = s2mpg10_regulator_buck_enable_time,
1035+
.set_ramp_delay = regulator_set_ramp_delay_regmap,
1036+
},
1037+
[S2MPG10_REGULATOR_OPS_EXTCONTROL] = {
1038+
.list_voltage = regulator_list_voltage_linear_range,
1039+
.map_voltage = regulator_map_voltage_linear_range,
1040+
.enable = s2mpg10_regulator_enable_nop,
1041+
.get_voltage_sel = regulator_get_voltage_sel_regmap,
1042+
.set_voltage_sel = regulator_set_voltage_sel_regmap,
1043+
.set_voltage_time = s2mpg11_regulator_buck_set_voltage_time,
1044+
.set_voltage_time_sel = regulator_set_voltage_time_sel,
1045+
.enable_time = s2mpg10_regulator_buck_enable_time,
1046+
.set_ramp_delay = regulator_set_ramp_delay_regmap,
1047+
}
1048+
};
1049+
1050+
#define s2mpg11_buck_to_ramp_mask(n) (GENMASK(3, 2) << (((n) % 2) * 4))
1051+
1052+
#define regulator_desc_s2mpg11_buckx(_name, _id, _supply, _vrange, \
1053+
_vsel_reg, _en_reg, _en_mask, _r_reg) \
1054+
regulator_desc_s2mpg1x_buck_cmn(_name, _id, _supply, \
1055+
s2mpg11_reg_buck_ops, _vrange, \
1056+
S2MPG11_PMIC_##_vsel_reg, GENMASK(7, 0), \
1057+
S2MPG11_PMIC_##_en_reg, _en_mask, \
1058+
S2MPG11_PMIC_##_r_reg, \
1059+
s2mpg11_buck_to_ramp_mask(_id - S2MPG11_BUCK1), \
1060+
s2mpg10_buck_ramp_table, \
1061+
ARRAY_SIZE(s2mpg10_buck_ramp_table), 30)
1062+
1063+
#define s2mpg11_regulator_desc_buck_xm(_num, _vrange, _vsel_reg_sfx, \
1064+
_en_mask, _r_reg, _en_rrate) \
1065+
.desc = regulator_desc_s2mpg11_buckx(#_num"s", \
1066+
S2MPG11_BUCK##_num, "vinb"#_num"s", \
1067+
_vrange, \
1068+
B##_num##S_##_vsel_reg_sfx, \
1069+
B##_num##S_CTRL, _en_mask, \
1070+
_r_reg), \
1071+
.enable_ramp_rate = _en_rrate
1072+
1073+
#define s2mpg11_regulator_desc_buck_cm(_num, _vrange, _vsel_reg_sfx, \
1074+
_en_mask, _r_reg) \
1075+
[S2MPG11_BUCK##_num] = { \
1076+
s2mpg11_regulator_desc_buck_xm(_num, _vrange, \
1077+
_vsel_reg_sfx, _en_mask, _r_reg, 12500), \
1078+
}
1079+
1080+
#define s2mpg11_regulator_desc_buckn_cm_gpio(_num, _vrange, \
1081+
_vsel_reg_sfx, _en_mask, _r_reg, _pc_reg, _pc_mask) \
1082+
[S2MPG11_BUCK##_num] = { \
1083+
s2mpg11_regulator_desc_buck_xm(_num, _vrange, \
1084+
_vsel_reg_sfx, _en_mask, _r_reg, 12500), \
1085+
.pctrlsel_reg = S2MPG11_PMIC_##_pc_reg, \
1086+
.pctrlsel_mask = _pc_mask, \
1087+
}
1088+
1089+
#define s2mpg11_regulator_desc_buck_vm(_num, _vrange, _vsel_reg_sfx, \
1090+
_en_mask, _r_reg) \
1091+
[S2MPG11_BUCK##_num] = { \
1092+
s2mpg11_regulator_desc_buck_xm(_num, _vrange, \
1093+
_vsel_reg_sfx, _en_mask, _r_reg, 25000), \
1094+
}
1095+
1096+
#define s2mpg11_regulator_desc_bucka(_num, _num_lower, _r_reg, \
1097+
_pc_reg, _pc_mask) \
1098+
[S2MPG11_BUCK##_num] = { \
1099+
.desc = regulator_desc_s2mpg11_buckx(#_num_lower, \
1100+
S2MPG11_BUCK##_num, "vinb"#_num_lower, \
1101+
s2mpg11_buck_vranges##_num_lower, \
1102+
BUCK##_num##_OUT, \
1103+
BUCK##_num##_CTRL, GENMASK(7, 6), \
1104+
_r_reg), \
1105+
.enable_ramp_rate = 25000, \
1106+
.pctrlsel_reg = S2MPG11_PMIC_##_pc_reg, \
1107+
.pctrlsel_mask = _pc_mask, \
1108+
}
1109+
1110+
#define s2mpg11_regulator_desc_buckboost() \
1111+
[S2MPG11_BUCKBOOST] = { \
1112+
.desc = regulator_desc_s2mpg1x_buck_cmn("boost", \
1113+
S2MPG11_BUCKBOOST, "vinbb", \
1114+
s2mpg10_reg_ldo_ops, \
1115+
s2mpg11_buck_vrangesboost, \
1116+
S2MPG11_PMIC_BB_OUT1, GENMASK(6, 0), \
1117+
S2MPG11_PMIC_BB_CTRL, BIT(7), \
1118+
0, 0, NULL, 0, 35), \
1119+
.enable_ramp_rate = 17500, \
1120+
}
1121+
1122+
#define s2mpg11_regulator_desc_ldo_cmn(_num, _supply, _ops, \
1123+
_vrange, _vsel_reg_sfx, _vsel_mask, _en_reg, _en_mask, \
1124+
_ramp_delay, _r_reg, _r_mask, _r_table, _r_table_sz, \
1125+
_pc_reg, _pc_mask) \
1126+
[S2MPG11_LDO##_num] = { \
1127+
.desc = regulator_desc_s2mpg1x_ldo_cmn(#_num "s", \
1128+
S2MPG11_LDO##_num, _supply, _ops, \
1129+
_vrange, \
1130+
S2MPG11_PMIC_L##_num##S_##_vsel_reg_sfx, \
1131+
_vsel_mask, \
1132+
S2MPG11_PMIC_##_en_reg, _en_mask, \
1133+
_ramp_delay, _r_reg, _r_mask, _r_table, \
1134+
_r_table_sz), \
1135+
.pctrlsel_reg = _pc_reg, \
1136+
.pctrlsel_mask = _pc_mask, \
1137+
}
1138+
1139+
/* standard LDO via LxM_CTRL */
1140+
#define s2mpg11_regulator_desc_ldo(_num, _supply, _vrange) \
1141+
s2mpg11_regulator_desc_ldo_cmn(_num, _supply, \
1142+
s2mpg10_reg_ldo_ops, _vrange, CTRL, GENMASK(5, 0), \
1143+
L##_num##S_CTRL, BIT(7), \
1144+
0, 0, 0, NULL, 0, \
1145+
0, 0)
1146+
1147+
/* standard LDO but possibly GPIO controlled */
1148+
#define s2mpg11_regulator_desc_ldo_gpio(_num, _supply, _vrange, \
1149+
_pc_reg, _pc_mask) \
1150+
s2mpg11_regulator_desc_ldo_cmn(_num, _supply, \
1151+
s2mpg10_reg_ldo_ops, _vrange, CTRL, GENMASK(5, 0), \
1152+
L##_num##S_CTRL, GENMASK(7, 6), \
1153+
0, 0, 0, NULL, 0, \
1154+
S2MPG11_PMIC_##_pc_reg, _pc_mask)
1155+
1156+
/* LDO with ramp support and possibly GPIO controlled */
1157+
#define s2mpg11_regulator_desc_ldo_ramp(_num, _supply, _vrange, \
1158+
_en_mask, _r_reg, _pc_reg, _pc_mask) \
1159+
s2mpg11_regulator_desc_ldo_cmn(_num, _supply, \
1160+
s2mpg10_reg_ldo_ramp_ops, _vrange, CTRL1, GENMASK(6, 0), \
1161+
LDO_CTRL1, _en_mask, \
1162+
6250, S2MPG11_PMIC_##_r_reg, GENMASK(1, 0), \
1163+
s2mpg10_ldo_ramp_table, \
1164+
ARRAY_SIZE(s2mpg10_ldo_ramp_table), \
1165+
S2MPG11_PMIC_##_pc_reg, _pc_mask)
1166+
1167+
/* voltage range for s2mpg11 BUCK 1, 2, 3, 4, 8, 9, 10 */
1168+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, 1, 200000, 450000, 1300000, STEP_6_25_MV);
1169+
1170+
/* voltage range for s2mpg11 BUCK 5 */
1171+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, 5, 200000, 400000, 1300000, STEP_6_25_MV);
1172+
1173+
/* voltage range for s2mpg11 BUCK 6 */
1174+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, 6, 200000, 1000000, 1500000, STEP_6_25_MV);
1175+
1176+
/* voltage range for s2mpg11 BUCK 7 */
1177+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, 7, 600000, 1500000, 2200000, STEP_12_5_MV);
1178+
1179+
/* voltage range for s2mpg11 BUCK D */
1180+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, d, 600000, 2400000, 3300000, STEP_12_5_MV);
1181+
1182+
/* voltage range for s2mpg11 BUCK A */
1183+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, a, 600000, 1700000, 2100000, STEP_12_5_MV);
1184+
1185+
/* voltage range for s2mpg11 BUCK BOOST */
1186+
S2MPG10_VOLTAGE_RANGE(s2mpg11_buck, boost,
1187+
2600000, 3000000, 3600000, STEP_12_5_MV);
1188+
1189+
/* voltage range for s2mpg11 LDO 1, 2 */
1190+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 1, 300000, 450000, 950000, STEP_12_5_MV);
1191+
1192+
/* voltage range for s2mpg11 LDO 3, 7, 10, 11, 12, 14, 15 */
1193+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 3, 700000, 1600000, 1950000, STEP_25_MV);
1194+
1195+
/* voltage range for s2mpg11 LDO 4, 6 */
1196+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 4, 1800000, 2500000, 3300000, STEP_25_MV);
1197+
1198+
/* voltage range for s2mpg11 LDO 5 */
1199+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 5, 1600000, 1600000, 1950000, STEP_12_5_MV);
1200+
1201+
/* voltage range for s2mpg11 LDO 8 */
1202+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 8, 979600, 1130400, 1281200, 5800);
1203+
1204+
/* voltage range for s2mpg11 LDO 9 */
1205+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 9, 725000, 725000, 1300000, STEP_12_5_MV);
1206+
1207+
/* voltage range for s2mpg11 LDO 13 */
1208+
S2MPG10_VOLTAGE_RANGE(s2mpg11_ldo, 13, 1800000, 1800000, 3350000, STEP_25_MV);
1209+
1210+
static const struct s2mpg10_regulator_desc s2mpg11_regulators[] = {
1211+
s2mpg11_regulator_desc_buckboost(),
1212+
s2mpg11_regulator_desc_buckn_cm_gpio(1, s2mpg11_buck_vranges1,
1213+
OUT1, GENMASK(7, 6), DVS_RAMP1,
1214+
PCTRLSEL1, GENMASK(3, 0)),
1215+
s2mpg11_regulator_desc_buckn_cm_gpio(2, s2mpg11_buck_vranges1,
1216+
OUT1, GENMASK(7, 6), DVS_RAMP1,
1217+
PCTRLSEL1, GENMASK(7, 4)),
1218+
s2mpg11_regulator_desc_buckn_cm_gpio(3, s2mpg11_buck_vranges1,
1219+
OUT1, GENMASK(7, 6), DVS_RAMP2,
1220+
PCTRLSEL2, GENMASK(3, 0)),
1221+
s2mpg11_regulator_desc_buck_cm(4, s2mpg11_buck_vranges1,
1222+
OUT, BIT(7), DVS_RAMP2),
1223+
s2mpg11_regulator_desc_buckn_cm_gpio(5, s2mpg11_buck_vranges5,
1224+
OUT, GENMASK(7, 6), DVS_RAMP3,
1225+
PCTRLSEL2, GENMASK(7, 4)),
1226+
s2mpg11_regulator_desc_buck_cm(6, s2mpg11_buck_vranges6,
1227+
OUT1, BIT(7), DVS_RAMP3),
1228+
s2mpg11_regulator_desc_buck_vm(7, s2mpg11_buck_vranges7,
1229+
OUT1, BIT(7), DVS_RAMP4),
1230+
s2mpg11_regulator_desc_buckn_cm_gpio(8, s2mpg11_buck_vranges1,
1231+
OUT1, GENMASK(7, 6), DVS_RAMP4,
1232+
PCTRLSEL3, GENMASK(3, 0)),
1233+
s2mpg11_regulator_desc_buckn_cm_gpio(9, s2mpg11_buck_vranges1,
1234+
OUT1, GENMASK(7, 6), DVS_RAMP5,
1235+
PCTRLSEL3, GENMASK(7, 4)),
1236+
s2mpg11_regulator_desc_buck_cm(10, s2mpg11_buck_vranges1,
1237+
OUT, BIT(7), DVS_RAMP5),
1238+
s2mpg11_regulator_desc_bucka(D, d, DVS_RAMP6, PCTRLSEL4, GENMASK(3, 0)),
1239+
s2mpg11_regulator_desc_bucka(A, a, DVS_RAMP6, PCTRLSEL4, GENMASK(7, 4)),
1240+
s2mpg11_regulator_desc_ldo_ramp(1, "vinl1s", s2mpg11_ldo_vranges1,
1241+
GENMASK(5, 4), DVS_SYNC_CTRL1,
1242+
PCTRLSEL5, GENMASK(3, 0)),
1243+
s2mpg11_regulator_desc_ldo_ramp(2, "vinl1s", s2mpg11_ldo_vranges1,
1244+
GENMASK(7, 6), DVS_SYNC_CTRL2,
1245+
PCTRLSEL5, GENMASK(7, 4)),
1246+
s2mpg11_regulator_desc_ldo(3, "vinl3s", s2mpg11_ldo_vranges3),
1247+
s2mpg11_regulator_desc_ldo(4, "vinl5s", s2mpg11_ldo_vranges4),
1248+
s2mpg11_regulator_desc_ldo(5, "vinl3s", s2mpg11_ldo_vranges5),
1249+
s2mpg11_regulator_desc_ldo(6, "vinl5s", s2mpg11_ldo_vranges4),
1250+
s2mpg11_regulator_desc_ldo(7, "vinl3s", s2mpg11_ldo_vranges3),
1251+
s2mpg11_regulator_desc_ldo_gpio(8, "vinl2s", s2mpg11_ldo_vranges8,
1252+
PCTRLSEL6, GENMASK(3, 0)),
1253+
s2mpg11_regulator_desc_ldo(9, "vinl2s", s2mpg11_ldo_vranges9),
1254+
s2mpg11_regulator_desc_ldo(10, "vinl4s", s2mpg11_ldo_vranges3),
1255+
s2mpg11_regulator_desc_ldo(11, "vinl4s", s2mpg11_ldo_vranges3),
1256+
s2mpg11_regulator_desc_ldo(12, "vinl4s", s2mpg11_ldo_vranges3),
1257+
s2mpg11_regulator_desc_ldo_gpio(13, "vinl6s", s2mpg11_ldo_vranges13,
1258+
PCTRLSEL6, GENMASK(7, 4)),
1259+
s2mpg11_regulator_desc_ldo(14, "vinl4s", s2mpg11_ldo_vranges3),
1260+
s2mpg11_regulator_desc_ldo(15, "vinl3s", s2mpg11_ldo_vranges3)
1261+
};
1262+
9701263
static const struct regulator_ops s2mps11_ldo_ops = {
9711264
.list_voltage = regulator_list_voltage_linear,
9721265
.map_voltage = regulator_map_voltage_linear,
@@ -1851,6 +2144,7 @@ static int s2mps11_handle_ext_control(struct s2mps11_info *s2mps11,
18512144
break;
18522145

18532146
case S2MPG10:
2147+
case S2MPG11:
18542148
/*
18552149
* If desc.enable_val is != 0, then external control was
18562150
* requested. We can not test s2mpg10_desc::ext_control,
@@ -1891,6 +2185,11 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
18912185
s2mpg1x_regulators = s2mpg10_regulators;
18922186
BUILD_BUG_ON(ARRAY_SIZE(s2mpg10_regulators) > S2MPS_REGULATOR_MAX);
18932187
break;
2188+
case S2MPG11:
2189+
rdev_num = ARRAY_SIZE(s2mpg11_regulators);
2190+
s2mpg1x_regulators = s2mpg11_regulators;
2191+
BUILD_BUG_ON(ARRAY_SIZE(s2mpg11_regulators) > S2MPS_REGULATOR_MAX);
2192+
break;
18942193
case S2MPS11X:
18952194
rdev_num = ARRAY_SIZE(s2mps11_regulators);
18962195
regulators = s2mps11_regulators;
@@ -1971,6 +2270,7 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
19712270

19722271
static const struct platform_device_id s2mps11_pmic_id[] = {
19732272
{ "s2mpg10-regulator", S2MPG10},
2273+
{ "s2mpg11-regulator", S2MPG11},
19742274
{ "s2mps11-regulator", S2MPS11X},
19752275
{ "s2mps13-regulator", S2MPS13X},
19762276
{ "s2mps14-regulator", S2MPS14X},

0 commit comments

Comments
 (0)