| .. SPDX-License-Identifier: GPL-2.0-or-later | |
| Kernel driver emc1812 | |
| ===================== | |
| Supported chips: | |
| * Microchip EMC1812, EMC1813, EMC1814, EMC1815, EMC1833 | |
| Prefix: 'emc1812' | |
| Datasheets: | |
| - https://ww1.microchip.com/downloads/aemDocuments/documents/MSLD/ProductDocuments/DataSheets/EMC1812-3-4-5-33-Data-Sheet-DS20005751.pdf | |
| Author: | |
| Marius Cristea <marius.cristea@microchip.com> | |
| Description | |
| ----------- | |
| The Microchip EMC181x/33 chips contain up to 4 remote temperature sensors | |
| and one internal. | |
| - The EMC1812 is a single channel remote temperature sensor. | |
| - The EMC1813 and EMC1833 are dual channel remote temperature sensor. The | |
| remote channels for this selection of devices can support substrate diodes, | |
| discrete diode-connected transistors or CPU/GPU thermal diodes. | |
| - The EMC1814 is a three channel remote temperature sensor that supports | |
| Anti-Parallel Diode (APD) only on one channel. For the channel that does not | |
| support APD functionality, substrate diodes, discrete diode-connected | |
| transistors or CPU/GPU thermal diodes are supported. For the channel that | |
| supports APD, only discrete diode-connected transistors may be implemented. | |
| However, if APD is disabled on the EMC1814, then the channel that supports | |
| APD will be functional with substrate diodes, discrete diode-connected | |
| transistors and CPU/GPU thermal diodes. | |
| - The EMC1815 is a four channel remote temperature sensor. | |
| The EMC1815 and EMC1833 support APD on all channels. When APD is enabled, | |
| the channels support only diode-connected transistors. If APD is disabled, | |
| then the channels will support substrate transistors, discrete diode-connected | |
| transistors and CPU/GPU thermal diodes. | |
| Note: Disabling APD functionality to implement substrate diodes on devices | |
| that support APD eliminates the benefit of APD (two diodes on one channel). | |
| The chips implement three limits for each sensor: low (tempX_min), high | |
| (tempX_max) and critical (tempX_crit). The chips also implement an | |
| hysteresis mechanism which applies to all limits. The relative difference | |
| is stored in a single register on the chip, which means that the relative | |
| difference between the limit and its hysteresis is always the same for | |
| all three limits. | |
| This implementation detail implies the following: | |
| * When setting a limit, its hysteresis will automatically follow, the | |
| difference staying unchanged. For example, if the old critical limit was | |
| 80 degrees C, and the hysteresis was 75 degrees C, and you change the | |
| critical limit to 90 degrees C, then the hysteresis will automatically | |
| change to 85 degrees C. | |
| * The hysteresis values can't be set independently. We decided to make | |
| only tempX_crit_hyst writable, while all other hysteresis attributes | |
| are read-only. Setting tempX_crit_hyst writes the difference between | |
| tempX_crit_hyst and tempX_crit into the chip, and the same relative | |
| hysteresis applies automatically to all other limits. | |
| * The limits should be set before the hysteresis. At power up the device | |
| starts with 10 degree hysteresis. |