Title: [8495] trunk/drivers/staging/iio/adc/adt75.c: Task[#5912] Store config value only after reg writing suscceeds in adt75.
Revision
8495
Author
sonicz
Date
2010-03-18 04:33:52 -0400 (Thu, 18 Mar 2010)

Log Message

Task[#5912] Store config value only after reg writing suscceeds in adt75.

Modified Paths

Diff

Modified: trunk/drivers/staging/iio/adc/adt75.c (8494 => 8495)


--- trunk/drivers/staging/iio/adc/adt75.c	2010-03-18 08:24:05 UTC (rev 8494)
+++ trunk/drivers/staging/iio/adc/adt75.c	2010-03-18 08:33:52 UTC (rev 8495)
@@ -128,20 +128,22 @@
 	struct iio_dev *dev_info = dev_get_drvdata(dev);
 	struct adt75_chip_info *chip = dev_info->dev_data;
 	int ret;
+	u8 config;
 
 	ret = adt75_i2c_read(chip, ADT75_CONFIG, &chip->config);
 	if (ret)
 		return -EIO;
 
-	if (strcmp(buf, "full"))
-		chip->config &= ~ADT75_PD;
-	else
-		chip->config |= ADT75_PD;
+	config = chip->config & ~ADT75_PD;
+	if (!strcmp(buf, "full"))
+		config |= ADT75_PD;
 
-	ret = adt75_i2c_write(chip, ADT75_CONFIG, chip->config);
+	ret = adt75_i2c_write(chip, ADT75_CONFIG, config);
 	if (ret)
 		return -EIO;
 
+	chip->config = config;
+
 	return ret;
 }
 
@@ -178,6 +180,7 @@
 	struct adt75_chip_info *chip = dev_info->dev_data;
 	unsigned long data = ""
 	int ret;
+	u8 config;
 
 	ret = strict_strtoul(buf, 10, &data);
 	if (ret)
@@ -188,15 +191,16 @@
 	if (ret)
 		return -EIO;
 
+	config = chip->config & ~ADT75_ONESHOT;
 	if (data)
-		chip->config |= ADT75_ONESHOT;
-	else
-		chip->config &= ~ADT75_ONESHOT;
+		config |= ADT75_ONESHOT;
 
-	ret = adt75_i2c_write(chip, ADT75_CONFIG, chip->config);
+	ret = adt75_i2c_write(chip, ADT75_CONFIG, config);
 	if (ret)
 		return -EIO;
 
+	chip->config = config;
+
 	return ret;
 }
 
@@ -330,21 +334,23 @@
 	struct iio_dev *dev_info = dev_get_drvdata(dev);
 	struct adt75_chip_info *chip = dev_info->dev_data;
 	int ret;
+	u8 config;
 
 	/* retrive ALART status */
 	ret = adt75_i2c_read(chip, ADT75_CONFIG, &chip->config);
 	if (ret)
 		return -EIO;
 
-	if (strcmp(buf, "comparator") == 0)
-		chip->config &= ~ADT75_OS_INT;
-	else
-		chip->config |= ADT75_OS_INT;
+	config = chip->config & ~ADT75_OS_INT;
+	if (strcmp(buf, "comparator") != 0)
+		config |= ADT75_OS_INT;
 
-	ret = adt75_i2c_write(chip, ADT75_CONFIG, chip->config);
+	ret = adt75_i2c_write(chip, ADT75_CONFIG, config);
 	if (ret)
 		return -EIO;
 
+	chip->config = config;
+
 	return ret;
 }
 
@@ -380,6 +386,7 @@
 	struct adt75_chip_info *chip = dev_info->dev_data;
 	unsigned long data = ""
 	int ret;
+	u8 config;
 
 	ret = strict_strtoul(buf, 10, &data);
 	if (ret)
@@ -390,15 +397,16 @@
 	if (ret)
 		return -EIO;
 
+	config = chip->config & ~ADT75_SMBUS_ALART;
 	if (data)
-		chip->config |= ADT75_SMBUS_ALART;
-	else
-		chip->config &= ~ADT75_SMBUS_ALART;
+		config |= ADT75_SMBUS_ALART;
 
-	ret = adt75_i2c_write(chip, ADT75_CONFIG, chip->config);
+	ret = adt75_i2c_write(chip, ADT75_CONFIG, config);
 	if (ret)
 		return -EIO;
 
+	chip->config = config;
+
 	return ret;
 }
 
@@ -428,6 +436,7 @@
 	struct adt75_chip_info *chip = dev_info->dev_data;
 	unsigned long data;
 	int ret;
+	u8 config;
 
 	ret = strict_strtoul(buf, 10, &data);
 	if (ret || data > 3)
@@ -438,12 +447,14 @@
 	if (ret)
 		return -EIO;
 
-	chip->config &= ~ADT75_FAULT_QUEUE_MASK;
-	chip->config |= (data << ADT75_FAULT_QUEUE_OFFSET);
-	ret = adt75_i2c_write(chip, ADT75_CONFIG, chip->config);
+	config = chip->config & ~ADT75_FAULT_QUEUE_MASK;
+	config |= (data << ADT75_FAULT_QUEUE_OFFSET);
+	ret = adt75_i2c_write(chip, ADT75_CONFIG, config);
 	if (ret)
 		return -EIO;
 
+	chip->config = config;
+
 	return ret;
 }
 static inline ssize_t adt75_show_t_bound(struct device *dev,
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to