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");