The update device function was changed to return error pointer value.
So change the show functions using the update function to return error.

Signed-off-by: Tokunori Ikegami <[email protected]>
Cc: Guenter Roeck <[email protected]>
Cc: Chris Packham <[email protected]>
Cc: [email protected]
---
Changes since v1:
- Move the changes in adt7475_update_device() from patch 3.
- Change to rebase on the v2 patch 1.

 drivers/hwmon/adt7475.c | 42 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)

diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c
index 74fe5424c394..bdafc213fdd5 100644
--- a/drivers/hwmon/adt7475.c
+++ b/drivers/hwmon/adt7475.c
@@ -326,6 +326,9 @@ static ssize_t show_voltage(struct device *dev, struct 
device_attribute *attr,
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
        unsigned short val;
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        switch (sattr->nr) {
        case ALARM:
                return sprintf(buf, "%d\n",
@@ -381,6 +384,9 @@ static ssize_t show_temp(struct device *dev, struct 
device_attribute *attr,
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
        int out;
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        switch (sattr->nr) {
        case HYSTERSIS:
                mutex_lock(&data->lock);
@@ -625,6 +631,9 @@ static ssize_t show_point2(struct device *dev, struct 
device_attribute *attr,
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
        int out, val;
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        mutex_lock(&data->lock);
        out = (data->range[sattr->index] >> 4) & 0x0F;
        val = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
@@ -683,6 +692,9 @@ static ssize_t show_tach(struct device *dev, struct 
device_attribute *attr,
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
        int out;
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        if (sattr->nr == ALARM)
                out = (data->alarms >> (sattr->index + 10)) & 1;
        else
@@ -720,6 +732,9 @@ static ssize_t show_pwm(struct device *dev, struct 
device_attribute *attr,
        struct adt7475_data *data = adt7475_update_device(dev);
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]);
 }
 
@@ -729,6 +744,9 @@ static ssize_t show_pwmchan(struct device *dev, struct 
device_attribute *attr,
        struct adt7475_data *data = adt7475_update_device(dev);
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        return sprintf(buf, "%d\n", data->pwmchan[sattr->index]);
 }
 
@@ -738,6 +756,9 @@ static ssize_t show_pwmctrl(struct device *dev, struct 
device_attribute *attr,
        struct adt7475_data *data = adt7475_update_device(dev);
        struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        return sprintf(buf, "%d\n", data->pwmctl[sattr->index]);
 }
 
@@ -945,6 +966,9 @@ static ssize_t show_pwmfreq(struct device *dev, struct 
device_attribute *attr,
        int i = clamp_val(data->range[sattr->index] & 0xf, 0,
                          ARRAY_SIZE(pwmfreq_table) - 1);
 
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        return sprintf(buf, "%d\n", pwmfreq_table[i]);
 }
 
@@ -1035,6 +1059,10 @@ static ssize_t cpu0_vid_show(struct device *dev,
                             struct device_attribute *devattr, char *buf)
 {
        struct adt7475_data *data = adt7475_update_device(dev);
+
+       if (IS_ERR(data))
+               return PTR_ERR(data);
+
        return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
 }
 
@@ -1875,20 +1903,30 @@ static struct adt7475_data 
*adt7475_update_device(struct device *dev)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct adt7475_data *data = i2c_get_clientdata(client);
+       int ret;
 
        mutex_lock(&data->lock);
 
        /* Measurement values update every 2 seconds */
        if (time_after(jiffies, data->measure_updated + HZ * 2) ||
            !data->valid) {
-               adt7475_update_measure(dev);
+               ret = adt7475_update_measure(dev);
+               if (ret < 0) {
+                       data->valid = false;
+                       mutex_unlock(&data->lock);
+                       return ERR_PTR(ret);
+               }
                data->measure_updated = jiffies;
                data->valid = true;
        }
 
        /* Limits and settings, should never change update more than once */
        if (!data->limits_updated) {
-               adt7475_update_limits(dev);
+               ret = adt7475_update_limits(dev);
+               if (ret < 0) {
+                       mutex_unlock(&data->lock);
+                       return ERR_PTR(ret);
+               }
                data->limits_updated = true;
        }
        mutex_unlock(&data->lock);
-- 
2.16.1

--
To unsubscribe from this list: send the line "unsubscribe linux-hwmon" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to