00376501a5eff8a17b1587015fc36f391175b76c
[platform/kernel/linux-starfive.git] / Documentation / w1 / slaves / w1_therm.rst
1 ======================
2 Kernel driver w1_therm
3 ======================
4
5 Supported chips:
6
7   * Maxim ds18*20 based temperature sensors.
8   * Maxim ds1825 based temperature sensors.
9   * GXCAS GC20MH01 temperature sensor.
10
11 Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
12
13
14 Description
15 -----------
16
17 w1_therm provides basic temperature conversion for ds18*20, ds28ea00, GX20MH01
18 devices.
19
20 Supported family codes:
21
22 ====================    ====
23 W1_THERM_DS18S20        0x10
24 W1_THERM_DS1822         0x22
25 W1_THERM_DS18B20        0x28
26 W1_THERM_DS1825         0x3B
27 W1_THERM_DS28EA00       0x42
28 ====================    ====
29
30 Support is provided through the sysfs w1_slave file. Each open and
31 read sequence will initiate a temperature conversion then provide two
32 lines of ASCII output. The first line contains the nine hex bytes
33 read along with a calculated crc value and YES or NO if it matched.
34 If the crc matched the returned values are retained. The second line
35 displays the retained values along with a temperature in millidegrees
36 Centigrade after t=.
37
38 Alternatively, temperature can be read using temperature sysfs, it
39 return only temperature in millidegrees Centigrade.
40
41 A bulk read of all devices on the bus could be done writing 'trigger'
42 in the therm_bulk_read sysfs entry at w1_bus_master level. This will
43 sent the convert command on all devices on the bus, and if parasite
44 powered devices are detected on the bus (and strong pullup is enable
45 in the module), it will drive the line high during the longer conversion
46 time required by parasited powered device on the line. Reading
47 therm_bulk_read will return 0 if no bulk conversion pending,
48 -1 if at least one sensor still in conversion, 1 if conversion is complete
49 but at least one sensor value has not been read yet. Result temperature is
50 then accessed by reading the temperature sysfs entry of each device, which
51 may return empty if conversion is still in progress. Note that if a bulk
52 read is sent but one sensor is not read immediately, the next access to
53 temperature on this device will return the temperature measured at the
54 time of issue of the bulk read command (not the current temperature).
55
56 A strong pullup will be applied during the conversion if required.
57
58 ``conv_time`` sysfs entry is used to get current conversion time (read), and
59 adjust it (write). A temperature conversion time depends on the device type and
60 it's current resolution. Default conversion time is set by the driver according
61 to the device datasheet. A conversion time for many original device clones
62 deviate from datasheet specs. There are three options: 1) manually set the
63 correct conversion time by writing a value in milliseconds to ``conv_time``; 2)
64 auto measure and set a conversion time by writing ``1`` to
65 ``conv_time``; 3) use ``features`` entry to enable poll for conversion
66 completion. Options 2, 3 can't be used in parasite power mode. To get back to
67 the default conversion time write ``0`` to ``conv_time``.
68
69 Writing a value between 9 and 12 to the sysfs w1_slave file will change the
70 precision of the sensor for the next readings. This value is in (volatile)
71 SRAM, so it is reset when the sensor gets power-cycled.
72
73 To store the current precision configuration into EEPROM, the value 0
74 has to be written to the sysfs w1_slave file. Since the EEPROM has a limited
75 amount of writes (>50k), this command should be used wisely.
76
77 Alternatively, resolution can be set or read (value from 9 to 12) using the
78 dedicated resolution sysfs entry on each device. This sysfs entry is not present
79 for devices not supporting this feature.
80
81 Some non-genuine DS18B20 chips are
82 fixed in 12-bit mode only, so the actual resolution is read back from the chip
83 and verified by the driver.
84
85 Note: Changing the resolution reverts the conversion time to default.
86
87 The write-only sysfs entry eeprom is an alternative for EEPROM operations:
88   * 'save': will save device RAM to EEPROM
89   * 'restore': will restore EEPROM data in device RAM.
90
91 ext_power syfs entry allow tho check the power status of each device.
92   * '0': device parasite powered
93   * '1': device externally powered
94
95 sysfs alarms allow read or write TH and TL (Temperature High an Low) alarms.
96 Values shall be space separated and in the device range (typical -55 degC
97 to 125 degC). Values are integer as they are store in a 8bit register in
98 the device. Lowest value is automatically put to TL.Once set, alarms could
99 be search at master level.
100
101 The module parameter strong_pullup can be set to 0 to disable the
102 strong pullup, 1 to enable autodetection or 2 to force strong pullup.
103 In case of autodetection, the driver will use the "READ POWER SUPPLY"
104 command to check if there are pariste powered devices on the bus.
105 If so, it will activate the master's strong pullup.
106 In case the detection of parasite devices using this command fails
107 (seems to be the case with some DS18S20) the strong pullup can
108 be force-enabled.
109
110 If the strong pullup is enabled, the master's strong pullup will be
111 driven when the conversion is taking place, provided the master driver
112 does support the strong pullup (or it falls back to a pullup
113 resistor).  The DS18b20 temperature sensor specification lists a
114 maximum current draw of 1.5mA and that a 5k pullup resistor is not
115 sufficient.  The strong pullup is designed to provide the additional
116 current required.
117
118 The DS28EA00 provides an additional two pins for implementing a sequence
119 detection algorithm.  This feature allows you to determine the physical
120 location of the chip in the 1-wire bus without needing pre-existing
121 knowledge of the bus ordering.  Support is provided through the sysfs
122 w1_seq file.  The file will contain a single line with an integer value
123 representing the device index in the bus starting at 0.
124
125 ``features`` sysfs entry controls optional driver settings per device.
126 Insufficient power in parasite mode, line noise and insufficient conversion time
127 may lead to conversion failure. Original DS18B20 and some clones allow for
128 detection of invalid conversion. Write bit mask ``1`` to ``features`` to enable
129 checking the conversion success. If byte 6 of scratchpad memory is 0xC after
130 conversion and temperature reads 85.00 (powerup value) or 127.94 (insufficient
131 power), the driver returns a conversion error. Bit mask ``2`` enables poll for
132 conversion completion (normal power only) by generating read cycles on the bus
133 after conversion starts. In parasite power mode this feature is not available.
134 Feature bit masks may be combined (OR). See accompanying sysfs documentation:
135 :ref:`Documentation/w1/slaves/w1_therm.rst <w1_therm>`
136
137 GX20MH01 device shares family number 0x28 with DS18*20. The device is generally
138 compatible with DS18B20. Added are lowest 2^-5, 2^-6 temperature bits in Config
139 register; R2 bit in Config register enabling 13 and 14 bit resolutions. The
140 device is powered up in 14-bit resolution mode. The conversion times specified
141 in the datasheet are too low and have to be increased. The device supports
142 driver features ``1`` and ``2``.