Re: [PATCH v2 2/2] iio: dac: mcp47a1: add support for new device
Joshua Crofts <[email protected]> Sat, 1 Aug 2026 07:28:50 +0200
| Newsgroups | dev.linux.lists.sashiko-reviews,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-iio |
|---|---|
| Message-ID | <20260801072850.6f5d255e@systembl0wer> |
On Sat, 1 Aug 2026 03:30:13 +0100 Jonathan Cameron <[email protected]> wrote: > On Tue, 28 Jul 2026 15:15:59 +0200 > Joshua Crofts <[email protected]> wrote: > > > On Mon, 27 Jul 2026 18:42:26 +0000 > > [email protected] wrote: > > > > > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: > > > - [Medium] Potential off-by-one in DAC scale calculation denominator. > > > -- > > > > Responding to Sashiko's comment. > > > > > --- Patch [2]: [PATCH v2 2/2] iio: dac: mcp47a1: add support for new device --- > > > commit 38bec2fbb020c3f749c52a26e5cc3e78e72eeaf5 > > > Author: Joshua Crofts <[email protected]> > > > > > > iio: dac: mcp47a1: add support for new device > > > > > > The Microchip MCP47A1 is a 6-bit volatile Digital-to-Analog converter > > > which communicates via I2C. > > > > > > > diff --git a/drivers/iio/dac/mcp47a1.c b/drivers/iio/dac/mcp47a1.c > > > > new file mode 100644 > > > > index 0000000000000..140e93ff2ba01 > > > > --- /dev/null > > > > +++ b/drivers/iio/dac/mcp47a1.c > > > [ ... ] > > > > +static int mcp47a1_read(struct iio_dev *indio_dev, > > > > + struct iio_chan_spec const *chan, > > > > + int *val, int *val2, long mask) > > > > +{ > > > > + struct mcp47a1_data *data = iio_priv(indio_dev); > > > > + int ret; > > > > + > > > > + switch (mask) { > > > [ ... ] > > > > + case IIO_CHAN_INFO_SCALE: > > > > + *val = data->vref_mV; > > > > + *val2 = MCP47A1_MAX_STEP; > > > > > > [Severity: Medium] > > > Does this code use the correct denominator for the scale calculation? > > > > > > Since this is a 6-bit DAC, shouldn't the scale denominator be 64 (2^6) > > > instead of the maximum step value of 63? Using MCP47A1_MAX_STEP (63) here > > > introduces an off-by-one error that could cause userspace to calculate > > > output voltages with a ~1.5% LSB scaling error when reading the sysfs > > > attribute. > > > > Yes, the max amount of steps is 64, which should be passed here. I'll > > add a separate macro for this in v3. > I'd just use + 1 at this location given the clear relationship between > the maximum value that can be taken and the number of steps. Good to know, for some reason I thought that this type of stuff was discouraged (MACRO_NAME + x would seem messy in most cases). -- Kind regards, Joshua Crofts