[lm-sensors] [patch 2.6.26-rc1] lm75: sensor reading bugfix

David Brownell david-b at pacbell.net
Sun May 4 04:19:16 CEST 2008


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 at users.sourceforge.net>
---
Goes on top of the previously submitted lm75 cleanup patch:

	http://marc.info/?l=lm-sensors&m=120880547009929&w=2

 drivers/hwmon/lm75.c |   20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

--- g26.orig/drivers/hwmon/lm75.c	2008-05-03 18:44:59.000000000 -0700
+++ g26/drivers/hwmon/lm75.c	2008-05-03 19:03:08.000000000 -0700
@@ -259,10 +259,13 @@ static struct i2c_driver lm75_driver = {
    the SMBus standard. */
 static int lm75_read_value(struct i2c_client *client, u8 reg)
 {
+	int value;
+
 	if (reg == LM75_REG_CONF)
 		return i2c_smbus_read_byte_data(client, reg);
-	else
-		return swab16(i2c_smbus_read_word_data(client, reg));
+
+	value = i2c_smbus_read_word_data(client, reg);
+	return (value < 0) ? value : swab16(value);
 }
 
 static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value)
@@ -295,9 +298,16 @@ static struct lm75_data *lm75_update_dev
 		int i;
 		dev_dbg(&client->dev, "Starting lm75 update\n");
 
-		for (i = 0; i < ARRAY_SIZE(data->temp); i++)
-			data->temp[i] = lm75_read_value(client,
-							LM75_REG_TEMP[i]);
+		for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
+			int status;
+
+			status = lm75_read_value(client, LM75_REG_TEMP[i]);
+			if (status < 0)
+				dev_dbg(&client->dev, "reg %d, err %d\n",
+						LM75_REG_TEMP[i], status);
+			else
+				data->temp[i] = status;
+		}
 		data->last_updated = jiffies;
 		data->valid = 1;
 	}




More information about the lm-sensors mailing list