| From adaa56996b598b3553b4f06958352638ecd10f41 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 24 Aug 2018 22:24:40 +0200 |
| Subject: iio: dac: mcp4922: fix error handling in mcp4922_write_raw |
| |
| From: Marcus Folkesson <marcus.folkesson@gmail.com> |
| |
| [ Upstream commit 0833627fc3f757a0dca11e2a9c46c96335a900ee ] |
| |
| Do not try to write negative values and make sure that the write goes well. |
| |
| Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com> |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iio/dac/mcp4922.c | 11 ++++++++--- |
| 1 file changed, 8 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/iio/dac/mcp4922.c b/drivers/iio/dac/mcp4922.c |
| index bf9aa3fc0534e..b5190d1dae8e3 100644 |
| --- a/drivers/iio/dac/mcp4922.c |
| +++ b/drivers/iio/dac/mcp4922.c |
| @@ -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; |
| } |
| -- |
| 2.20.1 |
| |