On Mon, 17 Jun 2024, Chris Morgan wrote: > From: Chris Morgan <macromorgan@xxxxxxxxxxx> > > Add support for the AXP717 PMIC to utilize the ADC (for reading > voltage, current, and temperature information from the PMIC) as well > as the USB charger and battery. > > Signed-off-by: Chris Morgan <macromorgan@xxxxxxxxxxx> > --- > drivers/mfd/axp20x.c | 30 +++++++++++++++++++++++++--- > drivers/regulator/axp20x-regulator.c | 2 +- > include/linux/mfd/axp20x.h | 26 +++++++++++++++++++++++- > 3 files changed, 53 insertions(+), 5 deletions(-) > > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > index 609e7e149681..07db4a11acbc 100644 > --- a/drivers/mfd/axp20x.c > +++ b/drivers/mfd/axp20x.c > @@ -209,15 +209,23 @@ static const struct regmap_access_table axp313a_volatile_table = { > }; > > static const struct regmap_range axp717_writeable_ranges[] = { > - regmap_reg_range(AXP717_MODULE_EN_CONTROL, AXP717_MODULE_EN_CONTROL), > - regmap_reg_range(AXP717_BOOST_CONTROL, AXP717_BOOST_CONTROL), > + regmap_reg_range(AXP717_PMU_FAULT, AXP717_MODULE_EN_CONTROL_1), > + regmap_reg_range(AXP717_MIN_SYS_V_CONTROL, AXP717_BOOST_CONTROL), > + regmap_reg_range(AXP717_VSYS_V_POWEROFF, AXP717_VSYS_V_POWEROFF), > regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN), > regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE), > + regmap_reg_range(AXP717_ICC_CHG_SET, AXP717_CV_CHG_SET), > regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL), > + regmap_reg_range(AXP717_ADC_CH_EN_CONTROL, AXP717_ADC_CH_EN_CONTROL), > + regmap_reg_range(AXP717_ADC_DATA_SEL, AXP717_ADC_DATA_SEL), > }; > > static const struct regmap_range axp717_volatile_ranges[] = { > + regmap_reg_range(AXP717_ON_INDICATE, AXP717_PMU_FAULT), > regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE), > + regmap_reg_range(AXP717_BATT_PERCENT_DATA, AXP717_BATT_PERCENT_DATA), > + regmap_reg_range(AXP717_BATT_V_H, AXP717_BATT_CHRG_I_L), > + regmap_reg_range(AXP717_ADC_DATA_H, AXP717_ADC_DATA_L), > }; > > static const struct regmap_access_table axp717_writeable_table = { > @@ -310,6 +318,11 @@ static const struct resource axp22x_usb_power_supply_resources[] = { > DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), > }; > > +static const struct resource axp717_usb_power_supply_resources[] = { > + DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), > + DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), > +}; > + > /* AXP803 and AXP813/AXP818 share the same interrupts */ > static const struct resource axp803_usb_power_supply_resources[] = { > DEFINE_RES_IRQ_NAMED(AXP803_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), > @@ -424,7 +437,7 @@ static const struct regmap_config axp717_regmap_config = { > .val_bits = 8, > .wr_table = &axp717_writeable_table, > .volatile_table = &axp717_volatile_table, > - .max_register = AXP717_CPUSLDO_CONTROL, > + .max_register = AXP717_ADC_DATA_L, > .cache_type = REGCACHE_MAPLE, > }; > > @@ -1026,6 +1039,17 @@ static struct mfd_cell axp313a_cells[] = { > static struct mfd_cell axp717_cells[] = { > MFD_CELL_NAME("axp20x-regulator"), > MFD_CELL_RES("axp20x-pek", axp717_pek_resources), > + { > + .name = "axp717-adc", > + .of_compatible = "x-powers,axp717-adc", > + }, > + MFD_CELL_OF("axp20x-usb-power-supply", > + axp717_usb_power_supply_resources, NULL, 0, 0, > + "x-powers,axp717-usb-power-supply"), > + { > + .name = "axp20x-battery-power-supply", > + .of_compatible = "x-powers,axp717-battery-power-supply", > + }, > }; Please refrain from mixing and matching: MFD_CELL_OF() for both. -- Lee Jones [李琼斯]