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);