Skip to content

Commit

Permalink
w1: w1_therm: Add force-pullup option for "broken" sensors
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Arndt <michael@scriptkiller.de>
Acked-by: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Michael Arndt authored and Greg Kroah-Hartman committed Feb 18, 2013
1 parent 9c95bb6 commit 29e5507
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
13 changes: 10 additions & 3 deletions Documentation/w1/slaves/w1_therm
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,16 @@ currently supported. The driver also doesn't support reduced
precision (which would also reduce the conversion time).

The module parameter strong_pullup can be set to 0 to disable the
strong pullup or 1 to enable. If enabled the 5V strong pullup will be
enabled when the conversion is taking place provided the master driver
must support the strong pullup (or it falls back to a pullup
strong pullup, 1 to enable autodetection or 2 to force strong pullup.
In case of autodetection, the driver will use the "READ POWER SUPPLY"
command to check if there are pariste powered devices on the bus.
If so, it will activate the master's strong pullup.
In case the detection of parasite devices using this command fails
(seems to be the case with some DS18S20) the strong pullup can
be force-enabled.
If the strong pullup is enabled, the master's strong pullup will be
driven when the conversion is taking place, provided the master driver
does support the strong pullup (or it falls back to a pullup
resistor). The DS18b20 temperature sensor specification lists a
maximum current draw of 1.5mA and that a 5k pullup resistor is not
sufficient. The strong pullup is designed to provide the additional
Expand Down
11 changes: 10 additions & 1 deletion drivers/w1/slaves/w1_therm.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,14 @@ MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature famil
* If it was disabled a parasite powered device might not get the require
* current to do a temperature conversion. If it is enabled parasite powered
* devices have a better chance of getting the current required.
* In case the parasite power-detection is not working (seems to be the case
* for some DS18S20) the strong pullup can also be forced, regardless of the
* power state of the devices.
*
* Summary of options:
* - strong_pullup = 0 Disable strong pullup completely
* - strong_pullup = 1 Enable automatic strong pullup detection
* - strong_pullup = 2 Force strong pullup
*/
static int w1_strong_pullup = 1;
module_param_named(strong_pullup, w1_strong_pullup, int, 0);
Expand Down Expand Up @@ -197,7 +205,8 @@ static ssize_t w1_therm_read(struct device *device,
continue;

/* 750ms strong pullup (or delay) after the convert */
if (!external_power && w1_strong_pullup)
if (w1_strong_pullup == 2 ||
(!external_power && w1_strong_pullup))
w1_next_pullup(dev, tm);

w1_write_8(dev, W1_CONVERT_TEMP);
Expand Down

0 comments on commit 29e5507

Please sign in to comment.