Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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