aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2012-09-05 05:49:14 -0400
committerGuenter Roeck <linux@roeck-us.net>2012-09-24 00:08:34 -0400
commita86e94dc946d58fb5abb8e250a99720c9bdf8c2d (patch)
tree837c3b262620d130519812e0c62ce88c351bb91d /drivers/hwmon
parent367eb2ee8a6f160c369d9afa6732237eeb679467 (diff)
hwmon: (lm70) Add support for LM71 and LM74
Add support for LM74 and LM71 to LM70 driver. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/Kconfig6
-rw-r--r--drivers/hwmon/lm70.c25
2 files changed, 25 insertions, 6 deletions
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 6566ed6db3b0..8343cadd6632 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -560,12 +560,12 @@ config SENSORS_LM63
560 will be called lm63. 560 will be called lm63.
561 561
562config SENSORS_LM70 562config SENSORS_LM70
563 tristate "National Semiconductor LM70 / Texas Instruments TMP121" 563 tristate "National Semiconductor LM70 and compatibles"
564 depends on SPI_MASTER 564 depends on SPI_MASTER
565 help 565 help
566 If you say yes here you get support for the National Semiconductor 566 If you say yes here you get support for the National Semiconductor
567 LM70 and Texas Instruments TMP121/TMP123 digital temperature 567 LM70, LM71, LM74 and Texas Instruments TMP121/TMP123 digital tempera-
568 sensor chips. 568 ture sensor chips.
569 569
570 This driver can also be built as a module. If so, the module 570 This driver can also be built as a module. If so, the module
571 will be called lm70. 571 will be called lm70.
diff --git a/drivers/hwmon/lm70.c b/drivers/hwmon/lm70.c
index 1da62f616db5..789753d0df79 100644
--- a/drivers/hwmon/lm70.c
+++ b/drivers/hwmon/lm70.c
@@ -43,6 +43,8 @@
43 43
44#define LM70_CHIP_LM70 0 /* original NS LM70 */ 44#define LM70_CHIP_LM70 0 /* original NS LM70 */
45#define LM70_CHIP_TMP121 1 /* TI TMP121/TMP123 */ 45#define LM70_CHIP_TMP121 1 /* TI TMP121/TMP123 */
46#define LM70_CHIP_LM71 2 /* NS LM71 */
47#define LM70_CHIP_LM74 3 /* NS LM74 */
46 48
47struct lm70 { 49struct lm70 {
48 struct device *hwmon_dev; 50 struct device *hwmon_dev;
@@ -88,9 +90,13 @@ static ssize_t lm70_sense_temp(struct device *dev,
88 * Celsius. 90 * Celsius.
89 * So it's equivalent to multiplying by 0.25 * 1000 = 250. 91 * So it's equivalent to multiplying by 0.25 * 1000 = 250.
90 * 92 *
91 * TMP121/TMP123: 93 * LM74 and TMP121/TMP123:
92 * 13 bits of 2's complement data, discard LSB 3 bits, 94 * 13 bits of 2's complement data, discard LSB 3 bits,
93 * resolution 0.0625 degrees celsius. 95 * resolution 0.0625 degrees celsius.
96 *
97 * LM71:
98 * 14 bits of 2's complement data, discard LSB 2 bits,
99 * resolution 0.0312 degrees celsius.
94 */ 100 */
95 switch (p_lm70->chip) { 101 switch (p_lm70->chip) {
96 case LM70_CHIP_LM70: 102 case LM70_CHIP_LM70:
@@ -98,8 +104,13 @@ static ssize_t lm70_sense_temp(struct device *dev,
98 break; 104 break;
99 105
100 case LM70_CHIP_TMP121: 106 case LM70_CHIP_TMP121:
107 case LM70_CHIP_LM74:
101 val = ((int)raw / 8) * 625 / 10; 108 val = ((int)raw / 8) * 625 / 10;
102 break; 109 break;
110
111 case LM70_CHIP_LM71:
112 val = ((int)raw / 4) * 3125 / 100;
113 break;
103 } 114 }
104 115
105 status = sprintf(buf, "%d\n", val); /* millidegrees Celsius */ 116 status = sprintf(buf, "%d\n", val); /* millidegrees Celsius */
@@ -123,6 +134,12 @@ static ssize_t lm70_show_name(struct device *dev, struct device_attribute
123 case LM70_CHIP_TMP121: 134 case LM70_CHIP_TMP121:
124 ret = sprintf(buf, "tmp121\n"); 135 ret = sprintf(buf, "tmp121\n");
125 break; 136 break;
137 case LM70_CHIP_LM71:
138 ret = sprintf(buf, "lm71\n");
139 break;
140 case LM70_CHIP_LM74:
141 ret = sprintf(buf, "lm74\n");
142 break;
126 default: 143 default:
127 ret = -EINVAL; 144 ret = -EINVAL;
128 } 145 }
@@ -139,7 +156,7 @@ static int __devinit lm70_probe(struct spi_device *spi)
139 struct lm70 *p_lm70; 156 struct lm70 *p_lm70;
140 int status; 157 int status;
141 158
142 /* signaling is SPI_MODE_0 for both LM70 and TMP121 */ 159 /* signaling is SPI_MODE_0 */
143 if (spi->mode & (SPI_CPOL | SPI_CPHA)) 160 if (spi->mode & (SPI_CPOL | SPI_CPHA))
144 return -EINVAL; 161 return -EINVAL;
145 162
@@ -196,6 +213,8 @@ static int __devexit lm70_remove(struct spi_device *spi)
196static const struct spi_device_id lm70_ids[] = { 213static const struct spi_device_id lm70_ids[] = {
197 { "lm70", LM70_CHIP_LM70 }, 214 { "lm70", LM70_CHIP_LM70 },
198 { "tmp121", LM70_CHIP_TMP121 }, 215 { "tmp121", LM70_CHIP_TMP121 },
216 { "lm71", LM70_CHIP_LM71 },
217 { "lm74", LM70_CHIP_LM74 },
199 { }, 218 { },
200}; 219};
201MODULE_DEVICE_TABLE(spi, lm70_ids); 220MODULE_DEVICE_TABLE(spi, lm70_ids);
@@ -213,5 +232,5 @@ static struct spi_driver lm70_driver = {
213module_spi_driver(lm70_driver); 232module_spi_driver(lm70_driver);
214 233
215MODULE_AUTHOR("Kaiwan N Billimoria"); 234MODULE_AUTHOR("Kaiwan N Billimoria");
216MODULE_DESCRIPTION("NS LM70 / TI TMP121/TMP123 Linux driver"); 235MODULE_DESCRIPTION("NS LM70 and compatibles Linux driver");
217MODULE_LICENSE("GPL"); 236MODULE_LICENSE("GPL");