Skip to content

Commit 604efe5

Browse files
committed
regulator: Merge axp20x changes
There will be at least one incremental change on top of some MFD overlapping device additions for this driver so merge now. Merge tag 'ib-mfd-regulator-v6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd into regulator-6.10
2 parents 54b8d09 + d2ac3df commit 604efe5

File tree

6 files changed

+277
-10
lines changed

6 files changed

+277
-10
lines changed

Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ allOf:
8383
enum:
8484
- x-powers,axp313a
8585
- x-powers,axp15060
86+
- x-powers,axp717
8687

8788
then:
8889
properties:
@@ -99,6 +100,7 @@ properties:
99100
- x-powers,axp221
100101
- x-powers,axp223
101102
- x-powers,axp313a
103+
- x-powers,axp717
102104
- x-powers,axp803
103105
- x-powers,axp806
104106
- x-powers,axp809

drivers/mfd/axp20x-i2c.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ static const struct of_device_id axp20x_i2c_of_match[] = {
6565
{ .compatible = "x-powers,axp221", .data = (void *)AXP221_ID },
6666
{ .compatible = "x-powers,axp223", .data = (void *)AXP223_ID },
6767
{ .compatible = "x-powers,axp313a", .data = (void *)AXP313A_ID },
68+
{ .compatible = "x-powers,axp717", .data = (void *)AXP717_ID },
6869
{ .compatible = "x-powers,axp803", .data = (void *)AXP803_ID },
6970
{ .compatible = "x-powers,axp806", .data = (void *)AXP806_ID },
7071
{ .compatible = "x-powers,axp15060", .data = (void *)AXP15060_ID },
@@ -81,6 +82,7 @@ static const struct i2c_device_id axp20x_i2c_id[] = {
8182
{ "axp221", 0 },
8283
{ "axp223", 0 },
8384
{ "axp313a", 0 },
85+
{ "axp717", 0 },
8486
{ "axp803", 0 },
8587
{ "axp806", 0 },
8688
{ "axp15060", 0 },

drivers/mfd/axp20x-rsb.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ static void axp20x_rsb_remove(struct sunxi_rsb_device *rdev)
5858

5959
static const struct of_device_id axp20x_rsb_of_match[] = {
6060
{ .compatible = "x-powers,axp223", .data = (void *)AXP223_ID },
61+
{ .compatible = "x-powers,axp717", .data = (void *)AXP717_ID },
6162
{ .compatible = "x-powers,axp803", .data = (void *)AXP803_ID },
6263
{ .compatible = "x-powers,axp806", .data = (void *)AXP806_ID },
6364
{ .compatible = "x-powers,axp809", .data = (void *)AXP809_ID },

drivers/mfd/axp20x.c

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static const char * const axp20x_model_names[] = {
4242
"AXP223",
4343
"AXP288",
4444
"AXP313a",
45+
"AXP717",
4546
"AXP803",
4647
"AXP806",
4748
"AXP809",
@@ -207,6 +208,25 @@ static const struct regmap_access_table axp313a_volatile_table = {
207208
.n_yes_ranges = ARRAY_SIZE(axp313a_volatile_ranges),
208209
};
209210

211+
static const struct regmap_range axp717_writeable_ranges[] = {
212+
regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN),
213+
regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL),
214+
};
215+
216+
static const struct regmap_range axp717_volatile_ranges[] = {
217+
regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE),
218+
};
219+
220+
static const struct regmap_access_table axp717_writeable_table = {
221+
.yes_ranges = axp717_writeable_ranges,
222+
.n_yes_ranges = ARRAY_SIZE(axp717_writeable_ranges),
223+
};
224+
225+
static const struct regmap_access_table axp717_volatile_table = {
226+
.yes_ranges = axp717_volatile_ranges,
227+
.n_yes_ranges = ARRAY_SIZE(axp717_volatile_ranges),
228+
};
229+
210230
static const struct regmap_range axp806_volatile_ranges[] = {
211231
regmap_reg_range(AXP20X_IRQ1_STATE, AXP20X_IRQ2_STATE),
212232
};
@@ -317,6 +337,11 @@ static const struct resource axp313a_pek_resources[] = {
317337
DEFINE_RES_IRQ_NAMED(AXP313A_IRQ_PEK_FAL_EDGE, "PEK_DBF"),
318338
};
319339

340+
static const struct resource axp717_pek_resources[] = {
341+
DEFINE_RES_IRQ_NAMED(AXP717_IRQ_PEK_RIS_EDGE, "PEK_DBR"),
342+
DEFINE_RES_IRQ_NAMED(AXP717_IRQ_PEK_FAL_EDGE, "PEK_DBF"),
343+
};
344+
320345
static const struct resource axp803_pek_resources[] = {
321346
DEFINE_RES_IRQ_NAMED(AXP803_IRQ_PEK_RIS_EDGE, "PEK_DBR"),
322347
DEFINE_RES_IRQ_NAMED(AXP803_IRQ_PEK_FAL_EDGE, "PEK_DBF"),
@@ -391,6 +416,15 @@ static const struct regmap_config axp313a_regmap_config = {
391416
.cache_type = REGCACHE_MAPLE,
392417
};
393418

419+
static const struct regmap_config axp717_regmap_config = {
420+
.reg_bits = 8,
421+
.val_bits = 8,
422+
.wr_table = &axp717_writeable_table,
423+
.volatile_table = &axp717_volatile_table,
424+
.max_register = AXP717_CPUSLDO_CONTROL,
425+
.cache_type = REGCACHE_RBTREE,
426+
};
427+
394428
static const struct regmap_config axp806_regmap_config = {
395429
.reg_bits = 8,
396430
.val_bits = 8,
@@ -589,6 +623,40 @@ static const struct regmap_irq axp313a_regmap_irqs[] = {
589623
INIT_REGMAP_IRQ(AXP313A, DIE_TEMP_HIGH, 0, 0),
590624
};
591625

626+
static const struct regmap_irq axp717_regmap_irqs[] = {
627+
INIT_REGMAP_IRQ(AXP717, SOC_DROP_LVL2, 0, 7),
628+
INIT_REGMAP_IRQ(AXP717, SOC_DROP_LVL1, 0, 6),
629+
INIT_REGMAP_IRQ(AXP717, GAUGE_NEW_SOC, 0, 4),
630+
INIT_REGMAP_IRQ(AXP717, BOOST_OVER_V, 0, 2),
631+
INIT_REGMAP_IRQ(AXP717, VBUS_OVER_V, 0, 1),
632+
INIT_REGMAP_IRQ(AXP717, VBUS_FAULT, 0, 0),
633+
INIT_REGMAP_IRQ(AXP717, VBUS_PLUGIN, 1, 7),
634+
INIT_REGMAP_IRQ(AXP717, VBUS_REMOVAL, 1, 6),
635+
INIT_REGMAP_IRQ(AXP717, BATT_PLUGIN, 1, 5),
636+
INIT_REGMAP_IRQ(AXP717, BATT_REMOVAL, 1, 4),
637+
INIT_REGMAP_IRQ(AXP717, PEK_SHORT, 1, 3),
638+
INIT_REGMAP_IRQ(AXP717, PEK_LONG, 1, 2),
639+
INIT_REGMAP_IRQ(AXP717, PEK_FAL_EDGE, 1, 1),
640+
INIT_REGMAP_IRQ(AXP717, PEK_RIS_EDGE, 1, 0),
641+
INIT_REGMAP_IRQ(AXP717, WDOG_EXPIRE, 2, 7),
642+
INIT_REGMAP_IRQ(AXP717, LDO_OVER_CURR, 2, 6),
643+
INIT_REGMAP_IRQ(AXP717, BATT_OVER_CURR, 2, 5),
644+
INIT_REGMAP_IRQ(AXP717, CHARG_DONE, 2, 4),
645+
INIT_REGMAP_IRQ(AXP717, CHARG, 2, 3),
646+
INIT_REGMAP_IRQ(AXP717, DIE_TEMP_HIGH, 2, 2),
647+
INIT_REGMAP_IRQ(AXP717, CHARG_TIMER, 2, 1),
648+
INIT_REGMAP_IRQ(AXP717, BATT_OVER_V, 2, 0),
649+
INIT_REGMAP_IRQ(AXP717, BC_USB_DONE, 3, 7),
650+
INIT_REGMAP_IRQ(AXP717, BC_USB_CHNG, 3, 6),
651+
INIT_REGMAP_IRQ(AXP717, BATT_QUIT_TEMP_HIGH, 3, 4),
652+
INIT_REGMAP_IRQ(AXP717, BATT_CHG_TEMP_HIGH, 3, 3),
653+
INIT_REGMAP_IRQ(AXP717, BATT_CHG_TEMP_LOW, 3, 2),
654+
INIT_REGMAP_IRQ(AXP717, BATT_ACT_TEMP_HIGH, 3, 1),
655+
INIT_REGMAP_IRQ(AXP717, BATT_ACT_TEMP_LOW, 3, 0),
656+
INIT_REGMAP_IRQ(AXP717, TYPEC_REMOVE, 4, 6),
657+
INIT_REGMAP_IRQ(AXP717, TYPEC_PLUGIN, 4, 5),
658+
};
659+
592660
static const struct regmap_irq axp803_regmap_irqs[] = {
593661
INIT_REGMAP_IRQ(AXP803, ACIN_OVER_V, 0, 7),
594662
INIT_REGMAP_IRQ(AXP803, ACIN_PLUGIN, 0, 6),
@@ -776,6 +844,17 @@ static const struct regmap_irq_chip axp313a_regmap_irq_chip = {
776844
.num_regs = 1,
777845
};
778846

847+
static const struct regmap_irq_chip axp717_regmap_irq_chip = {
848+
.name = "axp717_irq_chip",
849+
.status_base = AXP717_IRQ0_STATE,
850+
.ack_base = AXP717_IRQ0_STATE,
851+
.unmask_base = AXP717_IRQ0_EN,
852+
.init_ack_masked = true,
853+
.irqs = axp717_regmap_irqs,
854+
.num_irqs = ARRAY_SIZE(axp717_regmap_irqs),
855+
.num_regs = 5,
856+
};
857+
779858
static const struct regmap_irq_chip axp803_regmap_irq_chip = {
780859
.name = "axp803",
781860
.status_base = AXP20X_IRQ1_STATE,
@@ -941,6 +1020,11 @@ static struct mfd_cell axp313a_cells[] = {
9411020
MFD_CELL_RES("axp313a-pek", axp313a_pek_resources),
9421021
};
9431022

1023+
static struct mfd_cell axp717_cells[] = {
1024+
MFD_CELL_NAME("axp20x-regulator"),
1025+
MFD_CELL_RES("axp20x-pek", axp717_pek_resources),
1026+
};
1027+
9441028
static const struct resource axp288_adc_resources[] = {
9451029
DEFINE_RES_IRQ_NAMED(AXP288_IRQ_GPADC, "GPADC"),
9461030
};
@@ -1181,6 +1265,12 @@ int axp20x_match_device(struct axp20x_dev *axp20x)
11811265
axp20x->regmap_cfg = &axp313a_regmap_config;
11821266
axp20x->regmap_irq_chip = &axp313a_regmap_irq_chip;
11831267
break;
1268+
case AXP717_ID:
1269+
axp20x->nr_cells = ARRAY_SIZE(axp717_cells);
1270+
axp20x->cells = axp717_cells;
1271+
axp20x->regmap_cfg = &axp717_regmap_config;
1272+
axp20x->regmap_irq_chip = &axp717_regmap_irq_chip;
1273+
break;
11841274
case AXP803_ID:
11851275
axp20x->nr_cells = ARRAY_SIZE(axp803_cells);
11861276
axp20x->cells = axp803_cells;

drivers/regulator/axp20x-regulator.c

Lines changed: 89 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@
138138
#define AXP313A_DCDC_V_OUT_MASK GENMASK(6, 0)
139139
#define AXP313A_LDO_V_OUT_MASK GENMASK(4, 0)
140140

141+
#define AXP717_DCDC1_NUM_VOLTAGES 88
142+
#define AXP717_DCDC2_NUM_VOLTAGES 107
143+
#define AXP717_DCDC3_NUM_VOLTAGES 104
144+
#define AXP717_DCDC_V_OUT_MASK GENMASK(6, 0)
145+
#define AXP717_LDO_V_OUT_MASK GENMASK(4, 0)
146+
141147
#define AXP803_PWR_OUT_DCDC1_MASK BIT_MASK(0)
142148
#define AXP803_PWR_OUT_DCDC2_MASK BIT_MASK(1)
143149
#define AXP803_PWR_OUT_DCDC3_MASK BIT_MASK(2)
@@ -733,25 +739,98 @@ static const struct linear_range axp313a_dcdc3_ranges[] = {
733739
static const struct regulator_desc axp313a_regulators[] = {
734740
AXP_DESC_RANGES(AXP313A, DCDC1, "dcdc1", "vin1",
735741
axp313a_dcdc1_ranges, AXP313A_DCDC1_NUM_VOLTAGES,
736-
AXP313A_DCDC1_CONRTOL, AXP313A_DCDC_V_OUT_MASK,
742+
AXP313A_DCDC1_CONTROL, AXP313A_DCDC_V_OUT_MASK,
737743
AXP313A_OUTPUT_CONTROL, BIT(0)),
738744
AXP_DESC_RANGES(AXP313A, DCDC2, "dcdc2", "vin2",
739745
axp313a_dcdc2_ranges, AXP313A_DCDC23_NUM_VOLTAGES,
740-
AXP313A_DCDC2_CONRTOL, AXP313A_DCDC_V_OUT_MASK,
746+
AXP313A_DCDC2_CONTROL, AXP313A_DCDC_V_OUT_MASK,
741747
AXP313A_OUTPUT_CONTROL, BIT(1)),
742748
AXP_DESC_RANGES(AXP313A, DCDC3, "dcdc3", "vin3",
743749
axp313a_dcdc3_ranges, AXP313A_DCDC23_NUM_VOLTAGES,
744-
AXP313A_DCDC3_CONRTOL, AXP313A_DCDC_V_OUT_MASK,
750+
AXP313A_DCDC3_CONTROL, AXP313A_DCDC_V_OUT_MASK,
745751
AXP313A_OUTPUT_CONTROL, BIT(2)),
746752
AXP_DESC(AXP313A, ALDO1, "aldo1", "vin1", 500, 3500, 100,
747-
AXP313A_ALDO1_CONRTOL, AXP313A_LDO_V_OUT_MASK,
753+
AXP313A_ALDO1_CONTROL, AXP313A_LDO_V_OUT_MASK,
748754
AXP313A_OUTPUT_CONTROL, BIT(3)),
749755
AXP_DESC(AXP313A, DLDO1, "dldo1", "vin1", 500, 3500, 100,
750-
AXP313A_DLDO1_CONRTOL, AXP313A_LDO_V_OUT_MASK,
756+
AXP313A_DLDO1_CONTROL, AXP313A_LDO_V_OUT_MASK,
751757
AXP313A_OUTPUT_CONTROL, BIT(4)),
752758
AXP_DESC_FIXED(AXP313A, RTC_LDO, "rtc-ldo", "vin1", 1800),
753759
};
754760

761+
static const struct linear_range axp717_dcdc1_ranges[] = {
762+
REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000),
763+
REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000),
764+
};
765+
766+
static const struct linear_range axp717_dcdc2_ranges[] = {
767+
REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000),
768+
REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000),
769+
REGULATOR_LINEAR_RANGE(1600000, 88, 107, 100000),
770+
};
771+
772+
static const struct linear_range axp717_dcdc3_ranges[] = {
773+
REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000),
774+
REGULATOR_LINEAR_RANGE(1220000, 71, 102, 20000),
775+
};
776+
777+
static const struct regulator_desc axp717_regulators[] = {
778+
AXP_DESC_RANGES(AXP717, DCDC1, "dcdc1", "vin1",
779+
axp717_dcdc1_ranges, AXP717_DCDC1_NUM_VOLTAGES,
780+
AXP717_DCDC1_CONTROL, AXP717_DCDC_V_OUT_MASK,
781+
AXP717_DCDC_OUTPUT_CONTROL, BIT(0)),
782+
AXP_DESC_RANGES(AXP717, DCDC2, "dcdc2", "vin2",
783+
axp717_dcdc2_ranges, AXP717_DCDC2_NUM_VOLTAGES,
784+
AXP717_DCDC2_CONTROL, AXP717_DCDC_V_OUT_MASK,
785+
AXP717_DCDC_OUTPUT_CONTROL, BIT(1)),
786+
AXP_DESC_RANGES(AXP717, DCDC3, "dcdc3", "vin3",
787+
axp717_dcdc3_ranges, AXP717_DCDC3_NUM_VOLTAGES,
788+
AXP717_DCDC3_CONTROL, AXP717_DCDC_V_OUT_MASK,
789+
AXP717_DCDC_OUTPUT_CONTROL, BIT(2)),
790+
AXP_DESC(AXP717, DCDC4, "dcdc4", "vin4", 1000, 3700, 100,
791+
AXP717_DCDC4_CONTROL, AXP717_DCDC_V_OUT_MASK,
792+
AXP717_DCDC_OUTPUT_CONTROL, BIT(3)),
793+
AXP_DESC(AXP717, ALDO1, "aldo1", "vin1", 500, 3500, 100,
794+
AXP717_ALDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
795+
AXP717_LDO0_OUTPUT_CONTROL, BIT(0)),
796+
AXP_DESC(AXP717, ALDO2, "aldo2", "vin1", 500, 3500, 100,
797+
AXP717_ALDO2_CONTROL, AXP717_LDO_V_OUT_MASK,
798+
AXP717_LDO0_OUTPUT_CONTROL, BIT(1)),
799+
AXP_DESC(AXP717, ALDO3, "aldo3", "vin1", 500, 3500, 100,
800+
AXP717_ALDO3_CONTROL, AXP717_LDO_V_OUT_MASK,
801+
AXP717_LDO0_OUTPUT_CONTROL, BIT(2)),
802+
AXP_DESC(AXP717, ALDO4, "aldo4", "vin1", 500, 3500, 100,
803+
AXP717_ALDO4_CONTROL, AXP717_LDO_V_OUT_MASK,
804+
AXP717_LDO0_OUTPUT_CONTROL, BIT(3)),
805+
AXP_DESC(AXP717, BLDO1, "bldo1", "vin1", 500, 3500, 100,
806+
AXP717_BLDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
807+
AXP717_LDO0_OUTPUT_CONTROL, BIT(4)),
808+
AXP_DESC(AXP717, BLDO2, "bldo2", "vin1", 500, 3500, 100,
809+
AXP717_BLDO2_CONTROL, AXP717_LDO_V_OUT_MASK,
810+
AXP717_LDO0_OUTPUT_CONTROL, BIT(5)),
811+
AXP_DESC(AXP717, BLDO3, "bldo3", "vin1", 500, 3500, 100,
812+
AXP717_BLDO3_CONTROL, AXP717_LDO_V_OUT_MASK,
813+
AXP717_LDO0_OUTPUT_CONTROL, BIT(6)),
814+
AXP_DESC(AXP717, BLDO4, "bldo4", "vin1", 500, 3500, 100,
815+
AXP717_BLDO4_CONTROL, AXP717_LDO_V_OUT_MASK,
816+
AXP717_LDO0_OUTPUT_CONTROL, BIT(7)),
817+
AXP_DESC(AXP717, CLDO1, "cldo1", "vin1", 500, 3500, 100,
818+
AXP717_CLDO1_CONTROL, AXP717_LDO_V_OUT_MASK,
819+
AXP717_LDO1_OUTPUT_CONTROL, BIT(0)),
820+
AXP_DESC(AXP717, CLDO2, "cldo2", "vin1", 500, 3500, 100,
821+
AXP717_CLDO2_CONTROL, AXP717_LDO_V_OUT_MASK,
822+
AXP717_LDO1_OUTPUT_CONTROL, BIT(1)),
823+
AXP_DESC(AXP717, CLDO3, "cldo3", "vin1", 500, 3500, 100,
824+
AXP717_CLDO3_CONTROL, AXP717_LDO_V_OUT_MASK,
825+
AXP717_LDO1_OUTPUT_CONTROL, BIT(2)),
826+
AXP_DESC(AXP717, CLDO4, "cldo4", "vin1", 500, 3500, 100,
827+
AXP717_CLDO4_CONTROL, AXP717_LDO_V_OUT_MASK,
828+
AXP717_LDO1_OUTPUT_CONTROL, BIT(3)),
829+
AXP_DESC(AXP717, CPUSLDO, "cpusldo", "vin1", 500, 1400, 50,
830+
AXP717_CPUSLDO_CONTROL, AXP717_LDO_V_OUT_MASK,
831+
AXP717_LDO1_OUTPUT_CONTROL, BIT(4)),
832+
};
833+
755834
/* DCDC ranges shared with AXP813 */
756835
static const struct linear_range axp803_dcdc234_ranges[] = {
757836
REGULATOR_LINEAR_RANGE(500000,
@@ -1253,6 +1332,7 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
12531332
step = 150;
12541333
break;
12551334
case AXP313A_ID:
1335+
case AXP717_ID:
12561336
case AXP15060_ID:
12571337
/* The DCDC PWM frequency seems to be fixed to 3 MHz. */
12581338
if (dcdcfreq != 0) {
@@ -1479,6 +1559,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
14791559
regulators = axp313a_regulators;
14801560
nregulators = AXP313A_REG_ID_MAX;
14811561
break;
1562+
case AXP717_ID:
1563+
regulators = axp717_regulators;
1564+
nregulators = AXP717_REG_ID_MAX;
1565+
break;
14821566
case AXP803_ID:
14831567
regulators = axp803_regulators;
14841568
nregulators = AXP803_REG_ID_MAX;

0 commit comments

Comments
 (0)