diff options
| author | David Brownell <david-b@pacbell.net> | 2008-05-03 22:19:16 -0400 |
|---|---|---|
| committer | Mark M. Hoffman <mhoffman@lightlink.com> | 2008-06-19 06:50:32 -0400 |
| commit | bcccc3a28e9cbb44549cde326852c26203a53a56 (patch) | |
| tree | a4d3af720b9763313ca7104e060cdf2ea841f726 | |
| parent | b3aeab0cdbd0fe5339a3a5918b59eebf148cbcd1 (diff) | |
hwmon: (lm75) sensor reading bugfix
LM75 sensor reading bugfix: never save error status as valid
sensor output. This could be improved, but at least this
prevents certain rude failure modes.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Mark M. Hoffman <mhoffman@lightlink.com>
| -rw-r--r-- | drivers/hwmon/lm75.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c index fa7696905154..de698dc73020 100644 --- a/drivers/hwmon/lm75.c +++ b/drivers/hwmon/lm75.c | |||
| @@ -251,10 +251,13 @@ static int lm75_detach_client(struct i2c_client *client) | |||
| 251 | the SMBus standard. */ | 251 | the SMBus standard. */ |
| 252 | static int lm75_read_value(struct i2c_client *client, u8 reg) | 252 | static int lm75_read_value(struct i2c_client *client, u8 reg) |
| 253 | { | 253 | { |
| 254 | int value; | ||
| 255 | |||
| 254 | if (reg == LM75_REG_CONF) | 256 | if (reg == LM75_REG_CONF) |
| 255 | return i2c_smbus_read_byte_data(client, reg); | 257 | return i2c_smbus_read_byte_data(client, reg); |
| 256 | else | 258 | |
| 257 | return swab16(i2c_smbus_read_word_data(client, reg)); | 259 | value = i2c_smbus_read_word_data(client, reg); |
| 260 | return (value < 0) ? value : swab16(value); | ||
| 258 | } | 261 | } |
| 259 | 262 | ||
| 260 | static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value) | 263 | static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value) |
| @@ -287,9 +290,16 @@ static struct lm75_data *lm75_update_device(struct device *dev) | |||
| 287 | int i; | 290 | int i; |
| 288 | dev_dbg(&client->dev, "Starting lm75 update\n"); | 291 | dev_dbg(&client->dev, "Starting lm75 update\n"); |
| 289 | 292 | ||
| 290 | for (i = 0; i < ARRAY_SIZE(data->temp); i++) | 293 | for (i = 0; i < ARRAY_SIZE(data->temp); i++) { |
| 291 | data->temp[i] = lm75_read_value(client, | 294 | int status; |
| 292 | LM75_REG_TEMP[i]); | 295 | |
| 296 | status = lm75_read_value(client, LM75_REG_TEMP[i]); | ||
| 297 | if (status < 0) | ||
| 298 | dev_dbg(&client->dev, "reg %d, err %d\n", | ||
| 299 | LM75_REG_TEMP[i], status); | ||
| 300 | else | ||
| 301 | data->temp[i] = status; | ||
| 302 | } | ||
| 293 | data->last_updated = jiffies; | 303 | data->last_updated = jiffies; |
| 294 | data->valid = 1; | 304 | data->valid = 1; |
| 295 | } | 305 | } |
