mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
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>
This commit is contained in:
parent
6a158c0de7
commit
6cd159744e
4 changed files with 60 additions and 2 deletions
|
@ -1,5 +1,7 @@
|
||||||
00-INDEX
|
00-INDEX
|
||||||
- This file
|
- This file
|
||||||
|
slaves/
|
||||||
|
- Drivers that provide support for specific family codes.
|
||||||
masters/
|
masters/
|
||||||
- Individual chips providing 1-wire busses.
|
- Individual chips providing 1-wire busses.
|
||||||
w1.generic
|
w1.generic
|
||||||
|
|
4
Documentation/w1/slaves/00-INDEX
Normal file
4
Documentation/w1/slaves/00-INDEX
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
00-INDEX
|
||||||
|
- This file
|
||||||
|
w1_therm
|
||||||
|
- The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
|
41
Documentation/w1/slaves/w1_therm
Normal file
41
Documentation/w1/slaves/w1_therm
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
Kernel driver w1_therm
|
||||||
|
====================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim ds18*20 based temperature sensors.
|
||||||
|
|
||||||
|
Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
w1_therm provides basic temperature conversion for ds18*20 devices.
|
||||||
|
supported family codes:
|
||||||
|
W1_THERM_DS18S20 0x10
|
||||||
|
W1_THERM_DS1822 0x22
|
||||||
|
W1_THERM_DS18B20 0x28
|
||||||
|
|
||||||
|
Support is provided through the sysfs w1_slave file. Each open and
|
||||||
|
read sequence will initiate a temperature conversion then provide two
|
||||||
|
lines of ASCII output. The first line contains the nine hex bytes
|
||||||
|
read along with a calculated crc value and YES or NO if it matched.
|
||||||
|
If the crc matched the returned values are retained. The second line
|
||||||
|
displays the retained values along with a temperature in millidegrees
|
||||||
|
Centigrade after t=.
|
||||||
|
|
||||||
|
Parasite powered devices are limited to one slave performing a
|
||||||
|
temperature conversion at a time. If none of the devices are parasite
|
||||||
|
powered it would be possible to convert all the devices at the same
|
||||||
|
time and then go back to read individual sensors. That isn't
|
||||||
|
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
|
||||||
|
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
|
||||||
|
current required.
|
|
@ -37,6 +37,14 @@ MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
|
MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
|
||||||
MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family.");
|
MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family.");
|
||||||
|
|
||||||
|
/* Allow the strong pullup to be disabled, but default to enabled.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
static int w1_strong_pullup = 1;
|
||||||
|
module_param_named(strong_pullup, w1_strong_pullup, int, 0);
|
||||||
|
|
||||||
static u8 bad_roms[][9] = {
|
static u8 bad_roms[][9] = {
|
||||||
{0xaa, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x0c, 0x10, 0x87},
|
{0xaa, 0x00, 0x4b, 0x46, 0xff, 0xff, 0x0c, 0x10, 0x87},
|
||||||
{}
|
{}
|
||||||
|
@ -192,8 +200,11 @@ static ssize_t w1_therm_read_bin(struct kobject *kobj,
|
||||||
int count = 0;
|
int count = 0;
|
||||||
unsigned int tm = 750;
|
unsigned int tm = 750;
|
||||||
|
|
||||||
|
/* 750ms strong pullup (or delay) after the convert */
|
||||||
|
if (w1_strong_pullup)
|
||||||
|
w1_next_pullup(dev, tm);
|
||||||
w1_write_8(dev, W1_CONVERT_TEMP);
|
w1_write_8(dev, W1_CONVERT_TEMP);
|
||||||
|
if (!w1_strong_pullup)
|
||||||
msleep(tm);
|
msleep(tm);
|
||||||
|
|
||||||
if (!w1_reset_select_slave(sl)) {
|
if (!w1_reset_select_slave(sl)) {
|
||||||
|
|
Loading…
Reference in a new issue