mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
57c76221d5
Adding bulk read support: Sending a 'trigger' command in the dedicated sysfs entry of bus master device send a conversion command for all the slaves on the bus. The sysfs entry is added as soon as at least one device supporting this feature is detected on the bus. The behavior of the sysfs reading temperature on the device is as follow: * If no bulk read pending, trigger a conversion on the device, wait for the conversion to be done, read the temperature in device RAM * If a bulk read has been trigger, access directly the device RAM This behavior is the same on the 2 sysfs entries ('temperature' and 'w1_slave'). Reading the therm_bulk_read sysfs give the status of bulk operations: * '-1': conversion in progress on at least 1 sensor * '1': conversion complete but at least one sensor has not been read yet * '0': no bulk operation. Reading temperature on ecah device will trigger a conversion As not all devices support bulk read feature, it has been added in device family structure. The attribute is set at master level as soon as a supporting device is discover. It is removed when the last supported device leave the bus. The count of supported device is kept with the static counter bulk_read_device_counter. A strong pull up is apply on the line if at least one device required it. The duration of the pull up is the max time required by a device on the line, which depends on the resolution settings of each device. The strong pull up could be adjust with the a module parameter. Updating documentation in Documentation/ABI/testing/sysfs-driver-w1_therm and Documentation/w1/slaves/w1_therm.rst accordingly. Signed-off-by: Akira Shimahara <akira215corp@gmail.com> Link: https://lore.kernel.org/r/20200511203820.411483-1-akira215corp@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
107 lines
4.7 KiB
ReStructuredText
107 lines
4.7 KiB
ReStructuredText
======================
|
|
Kernel driver w1_therm
|
|
======================
|
|
|
|
Supported chips:
|
|
|
|
* Maxim ds18*20 based temperature sensors.
|
|
* Maxim ds1825 based temperature sensors.
|
|
|
|
Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
|
|
|
|
|
Description
|
|
-----------
|
|
|
|
w1_therm provides basic temperature conversion for ds18*20 devices, and the
|
|
ds28ea00 device.
|
|
|
|
Supported family codes:
|
|
|
|
==================== ====
|
|
W1_THERM_DS18S20 0x10
|
|
W1_THERM_DS1822 0x22
|
|
W1_THERM_DS18B20 0x28
|
|
W1_THERM_DS1825 0x3B
|
|
W1_THERM_DS28EA00 0x42
|
|
==================== ====
|
|
|
|
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=.
|
|
|
|
Alternatively, temperature can be read using temperature sysfs, it
|
|
return only temperature in millidegrees Centigrade.
|
|
|
|
A bulk read of all devices on the bus could be done writing 'trigger'
|
|
in the therm_bulk_read sysfs entry at w1_bus_master level. This will
|
|
sent the convert command on all devices on the bus, and if parasite
|
|
powered devices are detected on the bus (and strong pullup is enable
|
|
in the module), it will drive the line high during the longer conversion
|
|
time required by parasited powered device on the line. Reading
|
|
therm_bulk_read will return 0 if no bulk conversion pending,
|
|
-1 if at least one sensor still in conversion, 1 if conversion is complete
|
|
but at least one sensor value has not been read yet. Result temperature is
|
|
then accessed by reading the temperature sysfs entry of each device, which
|
|
may return empty if conversion is still in progress. Note that if a bulk
|
|
read is sent but one sensor is not read immediately, the next access to
|
|
temperature on this device will return the temperature measured at the
|
|
time of issue of the bulk read command (not the current temperature).
|
|
|
|
Writing a value between 9 and 12 to the sysfs w1_slave file will change the
|
|
precision of the sensor for the next readings. This value is in (volatile)
|
|
SRAM, so it is reset when the sensor gets power-cycled.
|
|
|
|
To store the current precision configuration into EEPROM, the value 0
|
|
has to be written to the sysfs w1_slave file. Since the EEPROM has a limited
|
|
amount of writes (>50k), this command should be used wisely.
|
|
|
|
Alternatively, resolution can be set or read (value from 9 to 12) using the
|
|
dedicated resolution sysfs entry on each device. This sysfs entry is not
|
|
present for devices not supporting this feature. Driver will adjust the
|
|
correct conversion time for each device regarding to its resolution setting.
|
|
In particular, strong pullup will be applied if required during the conversion
|
|
duration.
|
|
|
|
The write-only sysfs entry eeprom is an alternative for EEPROM operations:
|
|
* 'save': will save device RAM to EEPROM
|
|
* 'restore': will restore EEPROM data in device RAM.
|
|
|
|
ext_power syfs entry allow tho check the power status of each device.
|
|
* '0': device parasite powered
|
|
* '1': device externally powered
|
|
|
|
sysfs alarms allow read or write TH and TL (Temperature High an Low) alarms.
|
|
Values shall be space separated and in the device range (typical -55 degC
|
|
to 125 degC). Values are integer as they are store in a 8bit register in
|
|
the device. Lowest value is automatically put to TL.Once set, alarms could
|
|
be search at master level.
|
|
|
|
The module parameter strong_pullup can be set to 0 to disable the
|
|
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
|
|
current required.
|
|
|
|
The DS28EA00 provides an additional two pins for implementing a sequence
|
|
detection algorithm. This feature allows you to determine the physical
|
|
location of the chip in the 1-wire bus without needing pre-existing
|
|
knowledge of the bus ordering. Support is provided through the sysfs
|
|
w1_seq file. The file will contain a single line with an integer value
|
|
representing the device index in the bus starting at 0.
|