iio: dac: mcp4725: Fix i2c_master_send() return value handling
commit 09d3bec7009186bdba77039df01e5834788b3f95 upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
81c70f4bea
commit
143dbb313a
@@ -47,12 +47,18 @@ static int __maybe_unused 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 __maybe_unused mcp4725_resume(struct device *dev)
|
static int __maybe_unused mcp4725_resume(struct device *dev)
|
||||||
@@ -60,13 +66,19 @@ static int __maybe_unused 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 SIMPLE_DEV_PM_OPS(mcp4725_pm_ops, mcp4725_suspend, mcp4725_resume);
|
static SIMPLE_DEV_PM_OPS(mcp4725_pm_ops, mcp4725_suspend, mcp4725_resume);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user