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>

authored by David Brownell and committed by Mark M. Hoffman bcccc3a2 b3aeab0c

+15 -5
+15 -5
drivers/hwmon/lm75.c
··· 251 251 the SMBus standard. */ 252 252 static int lm75_read_value(struct i2c_client *client, u8 reg) 253 253 { 254 + int value; 255 + 254 256 if (reg == LM75_REG_CONF) 255 257 return i2c_smbus_read_byte_data(client, reg); 256 - else 257 - return swab16(i2c_smbus_read_word_data(client, reg)); 258 + 259 + value = i2c_smbus_read_word_data(client, reg); 260 + return (value < 0) ? value : swab16(value); 258 261 } 259 262 260 263 static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value) ··· 290 287 int i; 291 288 dev_dbg(&client->dev, "Starting lm75 update\n"); 292 289 293 - for (i = 0; i < ARRAY_SIZE(data->temp); i++) 294 - data->temp[i] = lm75_read_value(client, 295 - LM75_REG_TEMP[i]); 290 + for (i = 0; i < ARRAY_SIZE(data->temp); i++) { 291 + int status; 292 + 293 + status = lm75_read_value(client, LM75_REG_TEMP[i]); 294 + if (status < 0) 295 + dev_dbg(&client->dev, "reg %d, err %d\n", 296 + LM75_REG_TEMP[i], status); 297 + else 298 + data->temp[i] = status; 299 + } 296 300 data->last_updated = jiffies; 297 301 data->valid = 1; 298 302 }