w1: w1_therm: Add force-pullup option for "broken" sensors
Signed-off-by: Michael Arndt <michael@scriptkiller.de> Acked-by: Evgeniy Polyakov <zbr@ioremap.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9c95bb6f25
commit
29e5507ae4
2 changed files with 20 additions and 4 deletions
|
@ -34,9 +34,16 @@ currently supported. The driver also doesn't support reduced
|
||||||
precision (which would also reduce the conversion time).
|
precision (which would also reduce the conversion time).
|
||||||
|
|
||||||
The module parameter strong_pullup can be set to 0 to disable the
|
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
|
strong pullup, 1 to enable autodetection or 2 to force strong pullup.
|
||||||
enabled when the conversion is taking place provided the master driver
|
In case of autodetection, the driver will use the "READ POWER SUPPLY"
|
||||||
must support the strong pullup (or it falls back to a pullup
|
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
|
resistor). The DS18b20 temperature sensor specification lists a
|
||||||
maximum current draw of 1.5mA and that a 5k pullup resistor is not
|
maximum current draw of 1.5mA and that a 5k pullup resistor is not
|
||||||
sufficient. The strong pullup is designed to provide the additional
|
sufficient. The strong pullup is designed to provide the additional
|
||||||
|
|
|
@ -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
|
* 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
|
* current to do a temperature conversion. If it is enabled parasite powered
|
||||||
* devices have a better chance of getting the current required.
|
* 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;
|
static int w1_strong_pullup = 1;
|
||||||
module_param_named(strong_pullup, w1_strong_pullup, int, 0);
|
module_param_named(strong_pullup, w1_strong_pullup, int, 0);
|
||||||
|
@ -197,7 +205,8 @@ static ssize_t w1_therm_read(struct device *device,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* 750ms strong pullup (or delay) after the convert */
|
/* 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_next_pullup(dev, tm);
|
||||||
|
|
||||||
w1_write_8(dev, W1_CONVERT_TEMP);
|
w1_write_8(dev, W1_CONVERT_TEMP);
|
||||||
|
|
Loading…
Reference in a new issue