mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 14:19:16 +00:00
iio: dac: mcp4725: Fix i2c_master_send() return value handling
The i2c_master_send() returns number of sent bytes on success,
or negative on error. The suspend/resume callbacks expect zero
on success and non-zero on error. Adapt the return value of the
i2c_master_send() to the expectation of the suspend and resume
callbacks, including proper validation of the return value.
Fixes: cf35ad61ac
("iio: add mcp4725 I2C DAC driver")
Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20230511004330.206942-1-marex@denx.de
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
56cd3d1c5c
commit
09d3bec700
1 changed files with 14 additions and 2 deletions
|
@ -47,12 +47,18 @@ static int mcp4725_suspend(struct device *dev)
|
||||||
struct mcp4725_data *data = iio_priv(i2c_get_clientdata(
|
struct mcp4725_data *data = iio_priv(i2c_get_clientdata(
|
||||||
to_i2c_client(dev)));
|
to_i2c_client(dev)));
|
||||||
u8 outbuf[2];
|
u8 outbuf[2];
|
||||||
|
int ret;
|
||||||
|
|
||||||
outbuf[0] = (data->powerdown_mode + 1) << 4;
|
outbuf[0] = (data->powerdown_mode + 1) << 4;
|
||||||
outbuf[1] = 0;
|
outbuf[1] = 0;
|
||||||
data->powerdown = true;
|
data->powerdown = true;
|
||||||
|
|
||||||
return i2c_master_send(data->client, outbuf, 2);
|
ret = i2c_master_send(data->client, outbuf, 2);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
else if (ret != 2)
|
||||||
|
return -EIO;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mcp4725_resume(struct device *dev)
|
static int mcp4725_resume(struct device *dev)
|
||||||
|
@ -60,13 +66,19 @@ static int mcp4725_resume(struct device *dev)
|
||||||
struct mcp4725_data *data = iio_priv(i2c_get_clientdata(
|
struct mcp4725_data *data = iio_priv(i2c_get_clientdata(
|
||||||
to_i2c_client(dev)));
|
to_i2c_client(dev)));
|
||||||
u8 outbuf[2];
|
u8 outbuf[2];
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* restore previous DAC value */
|
/* restore previous DAC value */
|
||||||
outbuf[0] = (data->dac_value >> 8) & 0xf;
|
outbuf[0] = (data->dac_value >> 8) & 0xf;
|
||||||
outbuf[1] = data->dac_value & 0xff;
|
outbuf[1] = data->dac_value & 0xff;
|
||||||
data->powerdown = false;
|
data->powerdown = false;
|
||||||
|
|
||||||
return i2c_master_send(data->client, outbuf, 2);
|
ret = i2c_master_send(data->client, outbuf, 2);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
else if (ret != 2)
|
||||||
|
return -EIO;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
static DEFINE_SIMPLE_DEV_PM_OPS(mcp4725_pm_ops, mcp4725_suspend,
|
static DEFINE_SIMPLE_DEV_PM_OPS(mcp4725_pm_ops, mcp4725_suspend,
|
||||||
mcp4725_resume);
|
mcp4725_resume);
|
||||||
|
|
Loading…
Reference in a new issue