aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Fries <david@fries.net>2008-10-16 01:04:43 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-16 14:21:49 -0400
commit6cd159744eaf212f3729d154f3881230a7c19eb2 (patch)
treec2a76ecf90e0b156f480044f26d6379dba46d7eb
parent6a158c0de791a81eb761ccf26ead1bd0834abac2 (diff)
W1: feature, w1_therm.c use strong pullup and documentation
Added strong pullup to thermal sensor driver and general documentation on the sensor. Signed-off-by: David Fries <david@fries.net> Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/w1/00-INDEX2
-rw-r--r--Documentation/w1/slaves/00-INDEX4
-rw-r--r--Documentation/w1/slaves/w1_therm41
-rw-r--r--drivers/w1/slaves/w1_therm.c15
4 files changed, 60 insertions, 2 deletions
diff --git a/Documentation/w1/00-INDEX b/Documentation/w1/00-INDEX
index 5270cf4cb109..cb49802745dc 100644
--- a/Documentation/w1/00-INDEX
+++ b/Documentation/w1/00-INDEX
@@ -1,5 +1,7 @@
100-INDEX 100-INDEX
2 - This file 2 - This file
3slaves/
4 - Drivers that provide support for specific family codes.
3masters/ 5masters/
4 - Individual chips providing 1-wire busses. 6 - Individual chips providing 1-wire busses.
5w1.generic 7w1.generic
diff --git a/Documentation/w1/slaves/00-INDEX b/Documentation/w1/slaves/00-INDEX
new file mode 100644
index 000000000000..f8101d6b07b7
--- /dev/null
+++ b/Documentation/w1/slaves/00-INDEX
@@ -0,0 +1,4 @@
100-INDEX
2 - This file
3w1_therm
4 - The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
diff --git a/Documentation/w1/slaves/w1_therm b/Documentation/w1/slaves/w1_therm
new file mode 100644
index 000000000000..0403aaaba878
--- /dev/null
+++ b/Documentation/w1/slaves/w1_therm
@@ -0,0 +1,41 @@
1Kernel driver w1_therm
2====================
3
4Supported chips:
5 * Maxim ds18*20 based temperature sensors.
6
7Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
8
9
10Description
11-----------
12
13w1_therm provides basic temperature conversion for ds18*20 devices.
14supported family codes:
15W1_THERM_DS18S20 0x10
16W1_THERM_DS1822 0x22
17W1_THERM_DS18B20 0x28
18
19Support is provided through the sysfs w1_slave file. Each open and
20read sequence will initiate a temperature conversion then provide two
21lines of ASCII output. The first line contains the nine hex bytes
22read along with a calculated crc value and YES or NO if it matched.
23If the crc matched the returned values are retained. The second line
24displays the retained values along with a temperature in millidegrees
25Centigrade after t=.
26
27Parasite powered devices are limited to one slave performing a
28temperature conversion at a time. If none of the devices are parasite
29powered it would be possible to convert all the devices at the same
30time and then go back to read individual sensors. That isn't
31currently supported. The driver also doesn't support reduced
32precision (which would also reduce the conversion time).
33
34The module parameter strong_pullup can be set to 0 to disable the
35strong pullup or 1 to enable. If enabled the 5V strong pullup will be
36enabled when the conversion is taking place provided the master driver
37must support the strong pullup (or it falls back to a pullup
38resistor). The DS18b20 temperature sensor specification lists a
39maximum current draw of 1.5mA and that a 5k pullup resistor is not
40sufficient. The strong pullup is designed to provide the additional
41current required.
diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c
index fb28acaeed6c..e87f464a6fb0 100644
--- a/drivers/w1/slaves/w1_therm.c
+++ b/drivers/w1/slaves/w1_therm.c
@@ -37,6 +37,14 @@ MODULE_LICENSE("GPL");
37MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>"); 37MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
38MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family."); 38MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family.");
39 39
40/* Allow the strong pullup to be disabled, but default to enabled.
41 * If it was disabled a parasite powered device might not get the require
42 * current to do a temperature conversion. If it is enabled parasite powered
43 * devices have a better chance of getting the current required.
44 */
45static int w1_strong_pullup = 1;
46module_param_named(strong_pullup, w1_strong_pullup, int, 0);
47
40static u8 bad_roms[][9] = { 48static u8 bad_roms[][9] = {
41 {0xaa, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x0c, 0x10, 0x87}, 49 {0xaa, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x0c, 0x10, 0x87},
42 {} 50 {}
@@ -192,9 +200,12 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj,
192 int count = 0; 200 int count = 0;
193 unsigned int tm = 750; 201 unsigned int tm = 750;
194 202
203 /* 750ms strong pullup (or delay) after the convert */
204 if (w1_strong_pullup)
205 w1_next_pullup(dev, tm);
195 w1_write_8(dev, W1_CONVERT_TEMP); 206 w1_write_8(dev, W1_CONVERT_TEMP);
196 207 if (!w1_strong_pullup)
197 msleep(tm); 208 msleep(tm);
198 209
199 if (!w1_reset_select_slave(sl)) { 210 if (!w1_reset_select_slave(sl)) {
200 211