diff options
-rw-r--r-- | Documentation/w1/00-INDEX | 2 | ||||
-rw-r--r-- | Documentation/w1/slaves/00-INDEX | 4 | ||||
-rw-r--r-- | Documentation/w1/slaves/w1_therm | 41 | ||||
-rw-r--r-- | drivers/w1/slaves/w1_therm.c | 15 |
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 @@ | |||
1 | 00-INDEX | 1 | 00-INDEX |
2 | - This file | 2 | - This file |
3 | slaves/ | ||
4 | - Drivers that provide support for specific family codes. | ||
3 | masters/ | 5 | masters/ |
4 | - Individual chips providing 1-wire busses. | 6 | - Individual chips providing 1-wire busses. |
5 | w1.generic | 7 | w1.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 @@ | |||
1 | 00-INDEX | ||
2 | - This file | ||
3 | w1_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 @@ | |||
1 | Kernel driver w1_therm | ||
2 | ==================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Maxim ds18*20 based temperature sensors. | ||
6 | |||
7 | Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru> | ||
8 | |||
9 | |||
10 | Description | ||
11 | ----------- | ||
12 | |||
13 | w1_therm provides basic temperature conversion for ds18*20 devices. | ||
14 | supported family codes: | ||
15 | W1_THERM_DS18S20 0x10 | ||
16 | W1_THERM_DS1822 0x22 | ||
17 | W1_THERM_DS18B20 0x28 | ||
18 | |||
19 | Support is provided through the sysfs w1_slave file. Each open and | ||
20 | read sequence will initiate a temperature conversion then provide two | ||
21 | lines of ASCII output. The first line contains the nine hex bytes | ||
22 | read along with a calculated crc value and YES or NO if it matched. | ||
23 | If the crc matched the returned values are retained. The second line | ||
24 | displays the retained values along with a temperature in millidegrees | ||
25 | Centigrade after t=. | ||
26 | |||
27 | Parasite powered devices are limited to one slave performing a | ||
28 | temperature conversion at a time. If none of the devices are parasite | ||
29 | powered it would be possible to convert all the devices at the same | ||
30 | time and then go back to read individual sensors. That isn't | ||
31 | currently supported. The driver also doesn't support reduced | ||
32 | precision (which would also reduce the conversion time). | ||
33 | |||
34 | The module parameter strong_pullup can be set to 0 to disable the | ||
35 | strong pullup or 1 to enable. If enabled the 5V strong pullup will be | ||
36 | enabled when the conversion is taking place provided the master driver | ||
37 | must support the strong pullup (or it falls back to a pullup | ||
38 | resistor). The DS18b20 temperature sensor specification lists a | ||
39 | maximum current draw of 1.5mA and that a 5k pullup resistor is not | ||
40 | sufficient. The strong pullup is designed to provide the additional | ||
41 | current 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"); | |||
37 | MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>"); | 37 | MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>"); |
38 | MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family."); | 38 | MODULE_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 | */ | ||
45 | static int w1_strong_pullup = 1; | ||
46 | module_param_named(strong_pullup, w1_strong_pullup, int, 0); | ||
47 | |||
40 | static u8 bad_roms[][9] = { | 48 | static 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 | ||