summaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/lm80.c
diff options
context:
space:
mode:
authorFrans Meulenbroeks <fransmeulenbroeks@gmail.com>2012-01-10 15:49:36 +0100
committerGuenter Roeck <guenter.roeck@ericsson.com>2012-03-18 18:26:42 -0700
commit96585f1ae4698800a18582935e2f01bb65a44fe6 (patch)
tree6eda4d63a8f8f5f38c38af17b337ac98d26f5ae8 /drivers/hwmon/lm80.c
parent6a9e7c4c0365e246d85166a5ee04a8dd4dcfada9 (diff)
downloadlinux-96585f1ae4698800a18582935e2f01bb65a44fe6.tar.gz
linux-96585f1ae4698800a18582935e2f01bb65a44fe6.tar.bz2
linux-96585f1ae4698800a18582935e2f01bb65a44fe6.zip
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>
Diffstat (limited to 'drivers/hwmon/lm80.c')
-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);