Title: [8602] trunk/drivers/staging/iio/adc/ad7314.c: Task[#5993] Add adt7301/2 devices support to ad7314 driver.
Revision
8602
Author
sonicz
Date
2010-04-02 06:14:06 -0400 (Fri, 02 Apr 2010)

Log Message

Task[#5993] Add adt7301/2 devices support to ad7314 driver.

Modified Paths

Diff

Modified: trunk/drivers/staging/iio/adc/ad7314.c (8601 => 8602)


--- trunk/drivers/staging/iio/adc/ad7314.c	2010-04-02 10:13:27 UTC (rev 8601)
+++ trunk/drivers/staging/iio/adc/ad7314.c	2010-04-02 10:14:06 UTC (rev 8602)
@@ -1,5 +1,5 @@
 /*
- * AD7314 digital temperature sensor driver
+ * AD7314 digital temperature sensor driver for AD7314, ADT7301 and ADT7302
  *
  * Copyright 2010 Analog Devices Inc.
  *
@@ -34,6 +34,14 @@
 #define AD7314_TEMP_FLOAT_MASK		0x3
 
 /*
+ * ADT7301 and ADT7302 temperature masks
+ */
+#define ADT7301_TEMP_SIGN		0x2000
+#define ADT7301_TEMP_MASK		0x2FFF
+#define ADT7301_TEMP_FLOAT_OFFSET	5
+#define ADT7301_TEMP_FLOAT_MASK		0x1F
+
+/*
  * struct ad7314_chip_info - chip specifc information
  */
 
@@ -152,16 +160,28 @@
 	if (chip->mode)
 		ad7314_spi_write(chip, chip->mode);
 
-	data = "" & AD7314_TEMP_MASK) >>
-		AD7314_TEMP_OFFSET;
-	if (data & AD7314_TEMP_SIGN) {
-		data = "" << 1) - data;
-		sign = '-';
+	if (strcmp(chip->name, "ad7314")) {
+		data = "" & AD7314_TEMP_MASK) >>
+			AD7314_TEMP_OFFSET;
+		if (data & AD7314_TEMP_SIGN) {
+			data = "" << 1) - data;
+			sign = '-';
+		}
+
+		return sprintf(buf, "%c%d.%.2d\n", sign,
+				data >> AD7314_TEMP_FLOAT_OFFSET,
+				(data & AD7314_TEMP_FLOAT_MASK) * 25);
+	} else {
+		data &= ADT7301_TEMP_MASK;
+		if (data & ADT7301_TEMP_SIGN) {
+			data = "" << 1) - data;
+			sign = '-';
+		}
+
+		return sprintf(buf, "%c%d.%.5d\n", sign,
+				data >> ADT7301_TEMP_FLOAT_OFFSET,
+				(data & ADT7301_TEMP_FLOAT_MASK) * 3125);
 	}
-
-	return sprintf(buf, "%c%d.%.2d\n", sign,
-			data >> AD7314_TEMP_FLOAT_OFFSET,
-			(data & AD7314_TEMP_FLOAT_MASK) * 25);
 }
 
 IIO_DEVICE_ATTR(temperature, S_IRUGO, ad7314_show_temperature, NULL, 0);
@@ -251,6 +271,13 @@
 	return 0;
 }
 
+static const struct spi_device_id ad7314_id[] = {
+	{ "adt7301", 0 },
+	{ "adt7302", 0 },
+	{ "ad7314", 0 },
+	{}
+};
+
 static struct spi_driver ad7314_driver = {
 	.driver = {
 		.name = "ad7314",
@@ -259,6 +286,7 @@
 	},
 	.probe = ad7314_probe,
 	.remove = __devexit_p(ad7314_remove),
+	.id_table = ad7314_id,
 };
 
 static __init int ad7314_init(void)
@@ -272,7 +300,7 @@
 }
 
 MODULE_AUTHOR("Sonic Zhang <[email protected]>");
-MODULE_DESCRIPTION("Analog Devices AD7314 digital"
+MODULE_DESCRIPTION("Analog Devices AD7314, ADT7301 and ADT7302 digital"
 			" temperature sensor driver");
 MODULE_LICENSE("GPL v2");
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to