summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/lm80.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
index c4de272f3aaf..dc6df4efedc1 100644
--- a/drivers/hwmon/lm80.c
+++ b/drivers/hwmon/lm80.c
@@ -108,6 +108,7 @@ static inline long TEMP_FROM_REG(u16 temp)
struct lm80_data {
struct device *hwmon_dev;
struct mutex update_lock;
+ char error; /* !=0 if error occurred during last update */
char valid; /* !=0 if following fields are valid */
unsigned long last_updated; /* In jiffies */
@@ -595,6 +596,9 @@ static struct lm80_data *lm80_update_device(struct device *dev)
mutex_lock(&data->update_lock);
+ if (data->error)
+ lm80_init_client(client);
+
if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
dev_dbg(&client->dev, "Starting lm80 update\n");
for (i = 0; i <= 6; i++) {
@@ -678,12 +682,14 @@ static struct lm80_data *lm80_update_device(struct device *dev)
data->last_updated = jiffies;
data->valid = 1;
+ data->error = 0;
}
goto done;
abort:
ret = ERR_PTR(rv);
data->valid = 0;
+ data->error = 1;
done:
mutex_unlock(&data->update_lock);