Re: [PATCH v2 1/2] regulator: fp9931: Fix VPOS/VNEG voltage selector table
Andreas Kemnade <[email protected]>
| Newsgroups | dev.linux.lists.imx,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Fri, 24 Jul 2026 18:34:40 +0800 [email protected] wrote: > From: Robby Cai <[email protected]> > > The VPOSNEG_table[] mapping does not match the FP9931 datasheet. > > The datasheet defines the VPOS/VNEG voltage mapping as: > > 00h-04h -> 7.04V (-7.04V) > 05h -> 7.26V (-7.26V) > 06h -> 7.49V (-7.49V) > ... > 28h-3Fh -> 15.06V (-15.06V) > > However, VPOSNEG_table[] has two issues: > > 1. Selector 0x00~0x04 should all map to 7.04V (5 entries), but the > table has 6 entries of 7.04V, causing all subsequent entries to be > shifted by one position. > > 2. Selectors 0x29~0x3F should all clamp to 15.06V (23 entries), but > the table has only 41 entries. Any selector value above 0x28 > would result in an out-of-bounds table access. > > Fix both issues by removing the duplicate 7.04V entry and appending > the missing 23 clamped 15.06V entries, bringing the table to the > correct size of 64 entries (0x00~0x3F). > > Fixes: 12d821bd13d4 ("regulator: Add FP9931/JD9930 driver") > Signed-off-by: Robby Cai <[email protected]> Somehow I missed this. So also for this: Reviewed-by: Andreas Kemnade <[email protected]> > --- > drivers/regulator/fp9931.c | 54 +++++++++----------------------------- > 1 file changed, 12 insertions(+), 42 deletions(-) > > diff --git a/drivers/regulator/fp9931.c b/drivers/regulator/fp9931.c > index 002b41f53eff..ff743a8b0dfe 100644 > --- a/drivers/regulator/fp9931.c > +++ b/drivers/regulator/fp9931.c > @@ -37,48 +37,18 @@ struct fp9931_data { > }; > > static const unsigned int VPOSNEG_table[] = { > - 7040000, > - 7040000, > - 7040000, > - 7040000, > - 7040000, > - 7040000, > - 7260000, > - 7490000, > - 7710000, > - 7930000, > - 8150000, > - 8380000, > - 8600000, > - 8820000, > - 9040000, > - 9270000, > - 9490000, > - 9710000, > - 9940000, > - 10160000, > - 10380000, > - 10600000, > - 10830000, > - 11050000, > - 11270000, > - 11490000, > - 11720000, > - 11940000, > - 12160000, > - 12380000, > - 12610000, > - 12830000, > - 13050000, > - 13280000, > - 13500000, > - 13720000, > - 13940000, > - 14170000, > - 14390000, > - 14610000, > - 14830000, > - 15060000, > + 7040000, 7040000, 7040000, 7040000, 7040000, /* 00h-04h */ > + 7260000, 7490000, 7710000, 7930000, 8150000, 8380000, /* 05h-0Ah */ > + 8600000, 8820000, 9040000, 9270000, 9490000, 9710000, /* 0Bh-10h */ > + 9940000, 10160000, 10380000, 10600000, 10830000, 11050000, /* 11h-16h */ > + 11270000, 11490000, 11720000, 11940000, 12160000, 12380000, /* 17h-1Ch */ > + 12610000, 12830000, 13050000, 13280000, 13500000, 13720000, /* 1Dh-22h */ > + 13940000, 14170000, 14390000, 14610000, 14830000, 15060000, /* 23h-28h */ > + /* 29h-3Fh: clamped to 15.06V per datasheet */ > + 15060000, 15060000, 15060000, 15060000, 15060000, 15060000, > + 15060000, 15060000, 15060000, 15060000, 15060000, 15060000, > + 15060000, 15060000, 15060000, 15060000, 15060000, 15060000, > + 15060000, 15060000, 15060000, 15060000, 15060000, > }; > > static const struct hwmon_channel_info *fp9931_info[] = {