Re: [PATCH v5 09/11] mfd: bq257xx: Add BQ25792 support

From: Alexey Charkov

Date: Tue Mar 31 2026 - 08:39:46 EST


On Tue, Mar 31, 2026 at 2:27 PM Lee Jones <lee@xxxxxxxxxx> wrote:
>
> On Tue, 24 Mar 2026, Alexey Charkov wrote:
>
> > Add register definitions and a new 'type' enum to be passed via MFD
> > private data to support the BQ25792, which is a newer variant of the
> > BQ257xx family.
> >
> > BQ25792 shares similar logic of operation with the already supported
> > BQ25703A but has a completely different register map and different
> > electrical constraints.
> >
> > Tested-by: Chris Morgan <macromorgan@xxxxxxxxxxx>
> > Signed-off-by: Alexey Charkov <alchark@xxxxxxxxxxx>
> > ---
> > drivers/mfd/bq257xx.c | 54 +++++-
> > include/linux/mfd/bq257xx.h | 412 ++++++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 463 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/mfd/bq257xx.c b/drivers/mfd/bq257xx.c
> > index e9d49dac0a16..31654925afa5 100644
> > --- a/drivers/mfd/bq257xx.c
> > +++ b/drivers/mfd/bq257xx.c
> > @@ -39,6 +39,39 @@ static const struct regmap_config bq25703_regmap_config = {
> > .val_format_endian = REGMAP_ENDIAN_LITTLE,
> > };
> >
> > +static const struct regmap_range bq25792_writeable_reg_ranges[] = {
> > + regmap_reg_range(BQ25792_REG00_MIN_SYS_VOLTAGE,
> > + BQ25792_REG18_NTC_CONTROL_1),
> > + regmap_reg_range(BQ25792_REG28_CHARGER_MASK_0,
> > + BQ25792_REG30_ADC_FUNCTION_DISABLE_1),
> > +};
> > +
> > +static const struct regmap_access_table bq25792_writeable_regs = {
> > + .yes_ranges = bq25792_writeable_reg_ranges,
> > + .n_yes_ranges = ARRAY_SIZE(bq25792_writeable_reg_ranges),
> > +};
> > +
> > +static const struct regmap_range bq25792_volatile_reg_ranges[] = {
> > + regmap_reg_range(BQ25792_REG19_ICO_CURRENT_LIMIT,
> > + BQ25792_REG27_FAULT_FLAG_1),
> > + regmap_reg_range(BQ25792_REG31_IBUS_ADC,
> > + BQ25792_REG47_DPDM_DRIVER),
> > +};
> > +
> > +static const struct regmap_access_table bq25792_volatile_regs = {
> > + .yes_ranges = bq25792_volatile_reg_ranges,
> > + .n_yes_ranges = ARRAY_SIZE(bq25792_volatile_reg_ranges),
> > +};
> > +
> > +static const struct regmap_config bq25792_regmap_config = {
> > + .reg_bits = 8,
> > + .val_bits = 8,
> > + .max_register = BQ25792_REG48_PART_INFORMATION,
> > + .cache_type = REGCACHE_MAPLE,
> > + .wr_table = &bq25792_writeable_regs,
> > + .volatile_table = &bq25792_volatile_regs,
> > +};
> > +
> > static const struct mfd_cell cells[] = {
> > MFD_CELL_NAME("bq257xx-regulator"),
> > MFD_CELL_NAME("bq257xx-charger"),
> > @@ -46,6 +79,7 @@ static const struct mfd_cell cells[] = {
> >
> > static int bq257xx_probe(struct i2c_client *client)
> > {
> > + const struct regmap_config *rcfg;
> > struct bq257xx_device *ddata;
> > int ret;
> >
> > @@ -53,9 +87,21 @@ static int bq257xx_probe(struct i2c_client *client)
> > if (!ddata)
> > return -ENOMEM;
> >
> > + ddata->type = (uintptr_t)i2c_get_match_data(client);
> > ddata->client = client;
> >
> > - ddata->regmap = devm_regmap_init_i2c(client, &bq25703_regmap_config);
> > + switch (ddata->type) {
> > + case BQ25703A:
> > + rcfg = &bq25703_regmap_config;
> > + break;
> > + case BQ25792:
> > + rcfg = &bq25792_regmap_config;
> > + break;
> > + default:
> > + return dev_err_probe(&client->dev, -EINVAL, "Unsupported device type\n");
>
> Nit: Shouldn't we be returning '-ENODEV' here for an unsupported device?

Hi Lee,

Indeed, I've had a quick look and other drivers seem to return -ENODEV
in similar situations. Shall I respin a new version with that change?

Thanks a lot,
Alexey