Skip to content

Commit

Permalink
hwmon: (lm80) reset device if error occurred
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Frans Meulenbroeks authored and Guenter Roeck committed Mar 19, 2012
1 parent 6a9e7c4 commit 96585f1
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/hwmon/lm80.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 96585f1

Please sign in to comment.