staging: iio: tsl2583: check for error code from i2c_smbus_read_byte()
authorBrian Masney <masneyb@onstation.org>
Fri, 28 Oct 2016 10:00:13 +0000 (06:00 -0400)
committerJonathan Cameron <jic23@kernel.org>
Tue, 1 Nov 2016 18:50:04 +0000 (18:50 +0000)
taos_i2c_read() and taos_als_calibrate() does not check to see if the
value returned by i2c_smbus_read_byte() was an error code. This patch
adds the appropriate error handling.

Signed-off-by: Brian Masney <masneyb@onstation.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/staging/iio/light/tsl2583.c

index fd4b6ef..35c1696 100644 (file)
@@ -171,7 +171,14 @@ taos_i2c_read(struct i2c_client *client, u8 reg, u8 *val, unsigned int len)
                        return ret;
                }
                /* read the data */
-               *val = i2c_smbus_read_byte(client);
+               ret = i2c_smbus_read_byte(client);
+               if (ret < 0) {
+                       dev_err(&client->dev,
+                               "%s failed to read byte after writing to register %x\n",
+                               __func__, reg);
+                       return ret;
+               }
+               *val = ret;
                val++;
                reg++;
        }
@@ -355,6 +362,13 @@ static int taos_als_calibrate(struct iio_dev *indio_dev)
        }
 
        reg_val = i2c_smbus_read_byte(chip->client);
+       if (reg_val < 0) {
+               dev_err(&chip->client->dev,
+                       "%s failed to read after writing to the CNTRL register\n",
+                       __func__);
+               return ret;
+       }
+
        if ((reg_val & (TSL258X_CNTL_ADC_ENBL | TSL258X_CNTL_PWR_ON))
                        != (TSL258X_CNTL_ADC_ENBL | TSL258X_CNTL_PWR_ON)) {
                dev_err(&chip->client->dev,
@@ -371,6 +385,12 @@ static int taos_als_calibrate(struct iio_dev *indio_dev)
                return ret;
        }
        reg_val = i2c_smbus_read_byte(chip->client);
+       if (reg_val < 0) {
+               dev_err(&chip->client->dev,
+                       "%s failed to read after writing to the STATUS register\n",
+                       __func__);
+               return ret;
+       }
 
        if ((reg_val & TSL258X_STA_ADC_VALID) != TSL258X_STA_ADC_VALID) {
                dev_err(&chip->client->dev,