hwmon: (lm80) reset device if error occurred
If an error occurs while updating (e.g. because the chip was
disconnected) the device needs to be reinitialized in order
to get back to 11 bit temperature and set the fan divider.
Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
index c4de272..dc6df4e 100644
--- a/drivers/hwmon/lm80.c
+++ b/drivers/hwmon/lm80.c
@@ -108,6 +108,7 @@
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 @@
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 @@
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);