Skip to content

Commit 0bbefa6

Browse files
committed
Merge remote-tracking branch 'regulator/for-5.12' into regulator-linus
2 parents bf05bf1 + a5ccccb commit 0bbefa6

3 files changed

Lines changed: 67 additions & 28 deletions

File tree

drivers/regulator/core.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,6 +1439,8 @@ static int set_machine_constraints(struct regulator_dev *rdev)
14391439

14401440
if (rdev->constraints->always_on)
14411441
rdev->use_count++;
1442+
} else if (rdev->desc->off_on_delay) {
1443+
rdev->last_off_jiffy = jiffies;
14421444
}
14431445

14441446
print_constraints(rdev);

drivers/regulator/da9121-regulator.c

Lines changed: 52 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ struct da9121 {
4040
unsigned int passive_delay;
4141
int chip_irq;
4242
int variant_id;
43+
int subvariant_id;
4344
};
4445

4546
/* Define ranges for different variants, enabling translation to/from
@@ -812,7 +813,6 @@ static struct regmap_config da9121_2ch_regmap_config = {
812813
static int da9121_check_device_type(struct i2c_client *i2c, struct da9121 *chip)
813814
{
814815
u32 device_id;
815-
u8 chip_id = chip->variant_id;
816816
u32 variant_id;
817817
u8 variant_mrc, variant_vrc;
818818
char *type;
@@ -839,22 +839,34 @@ static int da9121_check_device_type(struct i2c_client *i2c, struct da9121 *chip)
839839

840840
variant_vrc = variant_id & DA9121_MASK_OTP_VARIANT_ID_VRC;
841841

842-
switch (variant_vrc) {
843-
case DA9121_VARIANT_VRC:
844-
type = "DA9121/DA9130";
845-
config_match = (chip_id == DA9121_TYPE_DA9121_DA9130);
842+
switch (chip->subvariant_id) {
843+
case DA9121_SUBTYPE_DA9121:
844+
type = "DA9121";
845+
config_match = (variant_vrc == DA9121_VARIANT_VRC);
846846
break;
847-
case DA9220_VARIANT_VRC:
848-
type = "DA9220/DA9132";
849-
config_match = (chip_id == DA9121_TYPE_DA9220_DA9132);
847+
case DA9121_SUBTYPE_DA9130:
848+
type = "DA9130";
849+
config_match = (variant_vrc == DA9130_VARIANT_VRC);
850850
break;
851-
case DA9122_VARIANT_VRC:
852-
type = "DA9122/DA9131";
853-
config_match = (chip_id == DA9121_TYPE_DA9122_DA9131);
851+
case DA9121_SUBTYPE_DA9220:
852+
type = "DA9220";
853+
config_match = (variant_vrc == DA9220_VARIANT_VRC);
854854
break;
855-
case DA9217_VARIANT_VRC:
855+
case DA9121_SUBTYPE_DA9132:
856+
type = "DA9132";
857+
config_match = (variant_vrc == DA9132_VARIANT_VRC);
858+
break;
859+
case DA9121_SUBTYPE_DA9122:
860+
type = "DA9122";
861+
config_match = (variant_vrc == DA9122_VARIANT_VRC);
862+
break;
863+
case DA9121_SUBTYPE_DA9131:
864+
type = "DA9131";
865+
config_match = (variant_vrc == DA9131_VARIANT_VRC);
866+
break;
867+
case DA9121_SUBTYPE_DA9217:
856868
type = "DA9217";
857-
config_match = (chip_id == DA9121_TYPE_DA9217);
869+
config_match = (variant_vrc == DA9217_VARIANT_VRC);
858870
break;
859871
default:
860872
type = "Unknown";
@@ -892,15 +904,27 @@ static int da9121_assign_chip_model(struct i2c_client *i2c,
892904

893905
chip->dev = &i2c->dev;
894906

895-
switch (chip->variant_id) {
896-
case DA9121_TYPE_DA9121_DA9130:
897-
fallthrough;
898-
case DA9121_TYPE_DA9217:
907+
/* Use configured subtype to select the regulator descriptor index and
908+
* register map, common to both consumer and automotive grade variants
909+
*/
910+
switch (chip->subvariant_id) {
911+
case DA9121_SUBTYPE_DA9121:
912+
case DA9121_SUBTYPE_DA9130:
913+
chip->variant_id = DA9121_TYPE_DA9121_DA9130;
899914
regmap = &da9121_1ch_regmap_config;
900915
break;
901-
case DA9121_TYPE_DA9122_DA9131:
902-
fallthrough;
903-
case DA9121_TYPE_DA9220_DA9132:
916+
case DA9121_SUBTYPE_DA9217:
917+
chip->variant_id = DA9121_TYPE_DA9217;
918+
regmap = &da9121_1ch_regmap_config;
919+
break;
920+
case DA9121_SUBTYPE_DA9122:
921+
case DA9121_SUBTYPE_DA9131:
922+
chip->variant_id = DA9121_TYPE_DA9122_DA9131;
923+
regmap = &da9121_2ch_regmap_config;
924+
break;
925+
case DA9121_SUBTYPE_DA9220:
926+
case DA9121_SUBTYPE_DA9132:
927+
chip->variant_id = DA9121_TYPE_DA9220_DA9132;
904928
regmap = &da9121_2ch_regmap_config;
905929
break;
906930
}
@@ -975,13 +999,13 @@ static int da9121_config_irq(struct i2c_client *i2c,
975999
}
9761000

9771001
static const struct of_device_id da9121_dt_ids[] = {
978-
{ .compatible = "dlg,da9121", .data = (void *) DA9121_TYPE_DA9121_DA9130 },
979-
{ .compatible = "dlg,da9130", .data = (void *) DA9121_TYPE_DA9121_DA9130 },
980-
{ .compatible = "dlg,da9217", .data = (void *) DA9121_TYPE_DA9217 },
981-
{ .compatible = "dlg,da9122", .data = (void *) DA9121_TYPE_DA9122_DA9131 },
982-
{ .compatible = "dlg,da9131", .data = (void *) DA9121_TYPE_DA9122_DA9131 },
983-
{ .compatible = "dlg,da9220", .data = (void *) DA9121_TYPE_DA9220_DA9132 },
984-
{ .compatible = "dlg,da9132", .data = (void *) DA9121_TYPE_DA9220_DA9132 },
1002+
{ .compatible = "dlg,da9121", .data = (void *) DA9121_SUBTYPE_DA9121 },
1003+
{ .compatible = "dlg,da9130", .data = (void *) DA9121_SUBTYPE_DA9130 },
1004+
{ .compatible = "dlg,da9217", .data = (void *) DA9121_SUBTYPE_DA9217 },
1005+
{ .compatible = "dlg,da9122", .data = (void *) DA9121_SUBTYPE_DA9122 },
1006+
{ .compatible = "dlg,da9131", .data = (void *) DA9121_SUBTYPE_DA9131 },
1007+
{ .compatible = "dlg,da9220", .data = (void *) DA9121_SUBTYPE_DA9220 },
1008+
{ .compatible = "dlg,da9132", .data = (void *) DA9121_SUBTYPE_DA9132 },
9851009
{ }
9861010
};
9871011
MODULE_DEVICE_TABLE(of, da9121_dt_ids);
@@ -1011,7 +1035,7 @@ static int da9121_i2c_probe(struct i2c_client *i2c,
10111035
}
10121036

10131037
chip->pdata = i2c->dev.platform_data;
1014-
chip->variant_id = da9121_of_get_id(&i2c->dev);
1038+
chip->subvariant_id = da9121_of_get_id(&i2c->dev);
10151039

10161040
ret = da9121_assign_chip_model(i2c, chip);
10171041
if (ret < 0)

drivers/regulator/da9121-regulator.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ enum da9121_variant {
2929
DA9121_TYPE_DA9217
3030
};
3131

32+
enum da9121_subvariant {
33+
DA9121_SUBTYPE_DA9121,
34+
DA9121_SUBTYPE_DA9130,
35+
DA9121_SUBTYPE_DA9220,
36+
DA9121_SUBTYPE_DA9132,
37+
DA9121_SUBTYPE_DA9122,
38+
DA9121_SUBTYPE_DA9131,
39+
DA9121_SUBTYPE_DA9217
40+
};
41+
3242
/* Minimum, maximum and default polling millisecond periods are provided
3343
* here as an example. It is expected that any final implementation will
3444
* include a modification of these settings to match the required
@@ -279,6 +289,9 @@ enum da9121_variant {
279289
#define DA9220_VARIANT_VRC 0x0
280290
#define DA9122_VARIANT_VRC 0x2
281291
#define DA9217_VARIANT_VRC 0x7
292+
#define DA9130_VARIANT_VRC 0x0
293+
#define DA9131_VARIANT_VRC 0x1
294+
#define DA9132_VARIANT_VRC 0x2
282295

283296
/* DA9121_REG_OTP_CUSTOMER_ID */
284297

0 commit comments

Comments
 (0)