iio: dac: mcp4922: fix error handling in mcp4922_write_raw
PATCH 1/1 iio: dac: mcp4922: fix error handling in mcp4922_write_raw
Do not try to write negative values and make sure that the write goes well.
Signed-off-by Marcus Folkesson <[email protected]>
--- drivers/iio/dac/mcp4922.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/iio/dac/mcp4922.c +8 -3
@@ -94,17 +94,22 @@ static int mcp4922_write_raw(struct iio_dev *indio_dev, long mask) {struct mcp4922_state *state =iio_priv (indio_dev); +int ret;if (val2 !=0 )return -EINVAL ;switch (mask) {case IIO_CHAN_INFO_RAW : -if (val >GENMASK (chan->scan_type.realbits-1 ,0 )) +if (val <0 || val >GENMASK (chan->scan_type.realbits -1 ,0 ))return -EINVAL ; val <<= chan->scan_type.shift; - state->value[chan->channel] = val; -return mcp4922_spi_write (state, chan->channel, val); + + ret =mcp4922_spi_write (state, chan->channel, val); +if (!ret) + state->value[chan->channel] = val; +return ret; +default :return -EINVAL ; }
Signature · 1 line
2.18.0
Jonathan Cameron
maintainerQuoted 2 lines · On Fri, 24 Aug 2018 22:24:40 +0200 Marcus Folkesson…
Do not try to write negative values and make sure that the write goes well.
+CC Michael as it's his driver.
I'll take this as it 'appears' straight forward but I won't be pushing it out as a non rebasing branch for a few days if I've missed anything.
Applied to the togreg branch of iio.git and pushed out for now as testing for the autobuilders to play with it.
Thanks,
Jonathan
Quoted 35 lines
Signed-off-by Marcus Folkesson <[email protected]>--- drivers/iio/dac/mcp4922.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)drivers/iio/dac/mcp4922.c +8
-3@@ -94,17 +94,22 @@ static int mcp4922_write_raw(struct iio_dev *indio_dev, long mask) {struct mcp4922_state *state =iio_priv (indio_dev); +int ret;if (val2 !=0 )return -EINVAL ;switch (mask) {case IIO_CHAN_INFO_RAW : -if (val >GENMASK (chan->scan_type.realbits-1 ,0 )) +if (val <0 || val >GENMASK (chan->scan_type.realbits -1 ,0 ))return -EINVAL ; val <<= chan->scan_type.shift; - state->value[chan->channel] = val; -return mcp4922_spi_write (state, chan->channel, val); + + ret =mcp4922_spi_write (state, chan->channel, val); +if (!ret) + state->value[chan->channel] = val; +return ret; +default :return -EINVAL ; }