diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2012-09-05 05:49:14 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2012-09-24 00:08:34 -0400 |
commit | a86e94dc946d58fb5abb8e250a99720c9bdf8c2d (patch) | |
tree | 837c3b262620d130519812e0c62ce88c351bb91d /drivers/hwmon | |
parent | 367eb2ee8a6f160c369d9afa6732237eeb679467 (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/Kconfig | 6 | ||||
-rw-r--r-- | drivers/hwmon/lm70.c | 25 |
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 | ||
562 | config SENSORS_LM70 | 562 | config 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 | ||
47 | struct lm70 { | 49 | struct 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) | |||
196 | static const struct spi_device_id lm70_ids[] = { | 213 | static 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 | }; |
201 | MODULE_DEVICE_TABLE(spi, lm70_ids); | 220 | MODULE_DEVICE_TABLE(spi, lm70_ids); |
@@ -213,5 +232,5 @@ static struct spi_driver lm70_driver = { | |||
213 | module_spi_driver(lm70_driver); | 232 | module_spi_driver(lm70_driver); |
214 | 233 | ||
215 | MODULE_AUTHOR("Kaiwan N Billimoria"); | 234 | MODULE_AUTHOR("Kaiwan N Billimoria"); |
216 | MODULE_DESCRIPTION("NS LM70 / TI TMP121/TMP123 Linux driver"); | 235 | MODULE_DESCRIPTION("NS LM70 and compatibles Linux driver"); |
217 | MODULE_LICENSE("GPL"); | 236 | MODULE_LICENSE("GPL"); |