Commit 1b4cbe2e authored by Brian Masney's avatar Brian Masney Committed by Jonathan Cameron

staging: iio: tsl2x7x: cleaned up i2c calls in tsl2x7x_als_calibrate()

The calibration function calls i2c_smbus_write_byte() and
i2c_smbus_read_byte(). These two function calls are replaced with a
single call to i2c_smbus_read_byte_data() by this patch. This patch
also removes an unnecessary call that reads the CNTRL register
a second time. One of the error paths returned -1 if the ADC was not
enabled and this patch changes that return value to -EINVAL.
Signed-off-by: default avatarBrian Masney <masneyb@onstation.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent d2f46f56
...@@ -542,39 +542,29 @@ static void tsl2x7x_defaults(struct tsl2X7X_chip *chip) ...@@ -542,39 +542,29 @@ static void tsl2x7x_defaults(struct tsl2X7X_chip *chip)
static int tsl2x7x_als_calibrate(struct iio_dev *indio_dev) static int tsl2x7x_als_calibrate(struct iio_dev *indio_dev)
{ {
struct tsl2X7X_chip *chip = iio_priv(indio_dev); struct tsl2X7X_chip *chip = iio_priv(indio_dev);
u8 reg_val;
int gain_trim_val; int gain_trim_val;
int ret; int ret;
int lux_val; int lux_val;
ret = i2c_smbus_write_byte(chip->client, ret = i2c_smbus_read_byte_data(chip->client,
(TSL2X7X_CMD_REG | TSL2X7X_CNTRL)); TSL2X7X_CMD_REG | TSL2X7X_CNTRL);
if (ret < 0) { if (ret < 0) {
dev_err(&chip->client->dev, dev_err(&chip->client->dev,
"failed to write CNTRL register, ret=%d\n", ret); "%s: failed to read from the CNTRL register\n",
__func__);
return ret; return ret;
} }
reg_val = i2c_smbus_read_byte(chip->client); if ((ret & (TSL2X7X_CNTL_ADC_ENBL | TSL2X7X_CNTL_PWR_ON))
if ((reg_val & (TSL2X7X_CNTL_ADC_ENBL | TSL2X7X_CNTL_PWR_ON)) != (TSL2X7X_CNTL_ADC_ENBL | TSL2X7X_CNTL_PWR_ON)) {
!= (TSL2X7X_CNTL_ADC_ENBL | TSL2X7X_CNTL_PWR_ON)) {
dev_err(&chip->client->dev,
"%s: failed: ADC not enabled\n", __func__);
return -1;
}
ret = i2c_smbus_write_byte(chip->client,
(TSL2X7X_CMD_REG | TSL2X7X_CNTRL));
if (ret < 0) {
dev_err(&chip->client->dev, dev_err(&chip->client->dev,
"failed to write ctrl reg: ret=%d\n", ret); "%s: Device is not powered on and/or ADC is not enabled\n",
return ret; __func__);
} return -EINVAL;
} else if ((ret & TSL2X7X_STA_ADC_VALID) != TSL2X7X_STA_ADC_VALID) {
reg_val = i2c_smbus_read_byte(chip->client);
if ((reg_val & TSL2X7X_STA_ADC_VALID) != TSL2X7X_STA_ADC_VALID) {
dev_err(&chip->client->dev, dev_err(&chip->client->dev,
"%s: failed: STATUS - ADC not valid.\n", __func__); "%s: The two ADC channels have not completed an integration cycle\n",
__func__);
return -ENODATA; return -ENODATA;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment