hwmon: (lm75) added error handling
authorFrans Meulenbroeks <fransmeulenbroeks@gmail.com>
Tue, 3 Jan 2012 11:02:40 +0000 (12:02 +0100)
committerGuenter Roeck <guenter.roeck@ericsson.com>
Thu, 5 Jan 2012 16:19:33 +0000 (08:19 -0800)
Add error handling so if lm75_update_device fails
an error is returned when reading the value through sysfs.
This is closely modeled after the way this is handled in ltc4261.

Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
drivers/hwmon/lm75.c

index 1888dd0fc05f3351d6fd8bae55ea8ac6241d0d6b..903f22904bf4317778b346deaf8d1574d1d9d238 100644 (file)
@@ -93,6 +93,10 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *da,
 {
        struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
        struct lm75_data *data = lm75_update_device(dev);
+
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        return sprintf(buf, "%d\n",
                       LM75_TEMP_FROM_REG(data->temp[attr->index]));
 }
@@ -402,6 +406,7 @@ static struct lm75_data *lm75_update_device(struct device *dev)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct lm75_data *data = i2c_get_clientdata(client);
+       struct lm75_data *ret = data;
 
        mutex_lock(&data->update_lock);
 
@@ -414,19 +419,23 @@ static struct lm75_data *lm75_update_device(struct device *dev)
                        int status;
 
                        status = lm75_read_value(client, LM75_REG_TEMP[i]);
-                       if (status < 0)
-                               dev_dbg(&client->dev, "reg %d, err %d\n",
-                                               LM75_REG_TEMP[i], status);
-                       else
-                               data->temp[i] = status;
+                       if (unlikely(status < 0)) {
+                               dev_dbg(dev,
+                                       "LM75: Failed to read value: reg %d, error %d\n",
+                                       LM75_REG_TEMP[i], status);
+                               ret = ERR_PTR(status);
+                               data->valid = 0;
+                               goto abort;
+                       }
+                       data->temp[i] = status;
                }
                data->last_updated = jiffies;
                data->valid = 1;
        }
 
+abort:
        mutex_unlock(&data->update_lock);
-
-       return data;
+       return ret;
 }
 
 /*-----------------------------------------------------------------------*/