staging: iio: tsl2x7x: cleaned up i2c calls in tsl2x7x_als_calibrate()
authorBrian Masney <masneyb@onstation.org>
Thu, 6 Jul 2017 22:56:22 +0000 (18:56 -0400)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 9 Jul 2017 17:28:47 +0000 (18:28 +0100)
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: Brian Masney <masneyb@onstation.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/staging/iio/light/tsl2x7x.c

index 6c9f06bd65ad8b7f48bc0a5ddb62236aa0e6d6f8..57346287da62cb6cc07b06124c3b7ee6112e124e 100644 (file)
@@ -542,39 +542,29 @@ static void tsl2x7x_defaults(struct tsl2X7X_chip *chip)
 static int tsl2x7x_als_calibrate(struct iio_dev *indio_dev)
 {
        struct tsl2X7X_chip *chip = iio_priv(indio_dev);
-       u8 reg_val;
        int gain_trim_val;
        int ret;
        int lux_val;
 
-       ret = i2c_smbus_write_byte(chip->client,
-                                  (TSL2X7X_CMD_REG | TSL2X7X_CNTRL));
+       ret = i2c_smbus_read_byte_data(chip->client,
+                                      TSL2X7X_CMD_REG | TSL2X7X_CNTRL);
        if (ret < 0) {
                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;
        }
 
-       reg_val = i2c_smbus_read_byte(chip->client);
-       if ((reg_val & (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) {
+       if ((ret & (TSL2X7X_CNTL_ADC_ENBL | TSL2X7X_CNTL_PWR_ON))
+                       != (TSL2X7X_CNTL_ADC_ENBL | TSL2X7X_CNTL_PWR_ON)) {
                dev_err(&chip->client->dev,
-                       "failed to write ctrl reg: ret=%d\n", ret);
-               return ret;
-       }
-
-       reg_val = i2c_smbus_read_byte(chip->client);
-       if ((reg_val & TSL2X7X_STA_ADC_VALID) != TSL2X7X_STA_ADC_VALID) {
+                       "%s: Device is not powered on and/or ADC is not enabled\n",
+                       __func__);
+               return -EINVAL;
+       } else if ((ret & TSL2X7X_STA_ADC_VALID) != TSL2X7X_STA_ADC_VALID) {
                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;
        }