| Kernel driver lm90 | |
| ================== | |
| Supported chips: | |
| * National Semiconductor LM90 | |
| Prefix: 'lm90' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the National Semiconductor website | |
| http://www.national.com/pf/LM/LM90.html | |
| * National Semiconductor LM89 | |
| Prefix: 'lm89' (no auto-detection) | |
| Addresses scanned: I2C 0x4c and 0x4d | |
| Datasheet: Publicly available at the National Semiconductor website | |
| http://www.national.com/mpf/LM/LM89.html | |
| * National Semiconductor LM99 | |
| Prefix: 'lm99' | |
| Addresses scanned: I2C 0x4c and 0x4d | |
| Datasheet: Publicly available at the National Semiconductor website | |
| http://www.national.com/pf/LM/LM99.html | |
| * National Semiconductor LM86 | |
| Prefix: 'lm86' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the National Semiconductor website | |
| http://www.national.com/mpf/LM/LM86.html | |
| * Analog Devices ADM1032 | |
| Prefix: 'adm1032' | |
| Addresses scanned: I2C 0x4c and 0x4d | |
| Datasheet: Publicly available at the ON Semiconductor website | |
| http://www.onsemi.com/PowerSolutions/product.do?id=ADM1032 | |
| * Analog Devices ADT7461 | |
| Prefix: 'adt7461' | |
| Addresses scanned: I2C 0x4c and 0x4d | |
| Datasheet: Publicly available at the ON Semiconductor website | |
| http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461 | |
| * Analog Devices ADT7461A | |
| Prefix: 'adt7461a' | |
| Addresses scanned: I2C 0x4c and 0x4d | |
| Datasheet: Publicly available at the ON Semiconductor website | |
| http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461A | |
| * ON Semiconductor NCT1008 | |
| Prefix: 'nct1008' | |
| Addresses scanned: I2C 0x4c and 0x4d | |
| Datasheet: Publicly available at the ON Semiconductor website | |
| http://www.onsemi.com/PowerSolutions/product.do?id=NCT1008 | |
| * Maxim MAX6646 | |
| Prefix: 'max6646' | |
| Addresses scanned: I2C 0x4d | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3497 | |
| * Maxim MAX6647 | |
| Prefix: 'max6646' | |
| Addresses scanned: I2C 0x4e | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3497 | |
| * Maxim MAX6648 | |
| Prefix: 'max6646' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3500 | |
| * Maxim MAX6649 | |
| Prefix: 'max6646' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3497 | |
| * Maxim MAX6657 | |
| Prefix: 'max6657' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578 | |
| * Maxim MAX6658 | |
| Prefix: 'max6657' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578 | |
| * Maxim MAX6659 | |
| Prefix: 'max6659' | |
| Addresses scanned: I2C 0x4c, 0x4d, 0x4e | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578 | |
| * Maxim MAX6680 | |
| Prefix: 'max6680' | |
| Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, | |
| 0x4c, 0x4d and 0x4e | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3370 | |
| * Maxim MAX6681 | |
| Prefix: 'max6680' | |
| Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, | |
| 0x4c, 0x4d and 0x4e | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3370 | |
| * Maxim MAX6692 | |
| Prefix: 'max6646' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3500 | |
| * Maxim MAX6695 | |
| Prefix: 'max6695' | |
| Addresses scanned: I2C 0x18 | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/datasheet/index.mvp/id/4199 | |
| * Maxim MAX6696 | |
| Prefix: 'max6695' | |
| Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, | |
| 0x4c, 0x4d and 0x4e | |
| Datasheet: Publicly available at the Maxim website | |
| http://www.maxim-ic.com/datasheet/index.mvp/id/4199 | |
| * Winbond/Nuvoton W83L771W/G | |
| Prefix: 'w83l771' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: No longer available | |
| * Winbond/Nuvoton W83L771AWG/ASG | |
| Prefix: 'w83l771' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Not publicly available, can be requested from Nuvoton | |
| * Philips/NXP SA56004X | |
| Prefix: 'sa56004' | |
| Addresses scanned: I2C 0x48 through 0x4F | |
| Datasheet: Publicly available at NXP website | |
| http://ics.nxp.com/products/interface/datasheet/sa56004x.pdf | |
| * GMT G781 | |
| Prefix: 'g781' | |
| Addresses scanned: I2C 0x4c, 0x4d | |
| Datasheet: Not publicly available from GMT | |
| * Texas Instruments TMP451 | |
| Prefix: 'tmp451' | |
| Addresses scanned: I2C 0x4c | |
| Datasheet: Publicly available at TI website | |
| http://www.ti.com/litv/pdf/sbos686 | |
| Author: Jean Delvare <jdelvare@suse.de> | |
| Description | |
| ----------- | |
| The LM90 is a digital temperature sensor. It senses its own temperature as | |
| well as the temperature of up to one external diode. It is compatible | |
| with many other devices, many of which are supported by this driver. | |
| Note that there is no easy way to differentiate between the MAX6657, | |
| MAX6658 and MAX6659 variants. The extra features of the MAX6659 are only | |
| supported by this driver if the chip is located at address 0x4d or 0x4e, | |
| or if the chip type is explicitly selected as max6659. | |
| The MAX6680 and MAX6681 only differ in their pinout, therefore they obviously | |
| can't (and don't need to) be distinguished. | |
| The specificity of this family of chipsets over the ADM1021/LM84 | |
| family is that it features critical limits with hysteresis, and an | |
| increased resolution of the remote temperature measurement. | |
| The different chipsets of the family are not strictly identical, although | |
| very similar. For reference, here comes a non-exhaustive list of specific | |
| features: | |
| LM90: | |
| * Filter and alert configuration register at 0xBF. | |
| * ALERT is triggered by temperatures over critical limits. | |
| LM86 and LM89: | |
| * Same as LM90 | |
| * Better external channel accuracy | |
| LM99: | |
| * Same as LM89 | |
| * External temperature shifted by 16 degrees down | |
| ADM1032: | |
| * Consecutive alert register at 0x22. | |
| * Conversion averaging. | |
| * Up to 64 conversions/s. | |
| * ALERT is triggered by open remote sensor. | |
| * SMBus PEC support for Write Byte and Receive Byte transactions. | |
| ADT7461, ADT7461A, NCT1008: | |
| * Extended temperature range (breaks compatibility) | |
| * Lower resolution for remote temperature | |
| MAX6657 and MAX6658: | |
| * Better local resolution | |
| * Remote sensor type selection | |
| MAX6659: | |
| * Better local resolution | |
| * Selectable address | |
| * Second critical temperature limit | |
| * Remote sensor type selection | |
| MAX6680 and MAX6681: | |
| * Selectable address | |
| * Remote sensor type selection | |
| MAX6695 and MAX6696: | |
| * Better local resolution | |
| * Selectable address (max6696) | |
| * Second critical temperature limit | |
| * Two remote sensors | |
| W83L771W/G | |
| * The G variant is lead-free, otherwise similar to the W. | |
| * Filter and alert configuration register at 0xBF | |
| * Moving average (depending on conversion rate) | |
| W83L771AWG/ASG | |
| * Successor of the W83L771W/G, same features. | |
| * The AWG and ASG variants only differ in package format. | |
| * Diode ideality factor configuration (remote sensor) at 0xE3 | |
| SA56004X: | |
| * Better local resolution | |
| All temperature values are given in degrees Celsius. Resolution | |
| is 1.0 degree for the local temperature, 0.125 degree for the remote | |
| temperature, except for the MAX6657, MAX6658 and MAX6659 which have a | |
| resolution of 0.125 degree for both temperatures. | |
| Each sensor has its own high and low limits, plus a critical limit. | |
| Additionally, there is a relative hysteresis value common to both critical | |
| values. To make life easier to user-space applications, two absolute values | |
| are exported, one for each channel, but these values are of course linked. | |
| Only the local hysteresis can be set from user-space, and the same delta | |
| applies to the remote hysteresis. | |
| The lm90 driver will not update its values more frequently than configured with | |
| the update_interval attribute; reading them more often will do no harm, but will | |
| return 'old' values. | |
| SMBus Alert Support | |
| ------------------- | |
| This driver has basic support for SMBus alert. When an alert is received, | |
| the status register is read and the faulty temperature channel is logged. | |
| The Analog Devices chips (ADM1032, ADT7461 and ADT7461A) and ON | |
| Semiconductor chips (NCT1008) do not implement the SMBus alert protocol | |
| properly so additional care is needed: the ALERT output is disabled when | |
| an alert is received, and is re-enabled only when the alarm is gone. | |
| Otherwise the chip would block alerts from other chips in the bus as long | |
| as the alarm is active. | |
| PEC Support | |
| ----------- | |
| The ADM1032 is the only chip of the family which supports PEC. It does | |
| not support PEC on all transactions though, so some care must be taken. | |
| When reading a register value, the PEC byte is computed and sent by the | |
| ADM1032 chip. However, in the case of a combined transaction (SMBus Read | |
| Byte), the ADM1032 computes the CRC value over only the second half of | |
| the message rather than its entirety, because it thinks the first half | |
| of the message belongs to a different transaction. As a result, the CRC | |
| value differs from what the SMBus master expects, and all reads fail. | |
| For this reason, the lm90 driver will enable PEC for the ADM1032 only if | |
| the bus supports the SMBus Send Byte and Receive Byte transaction types. | |
| These transactions will be used to read register values, instead of | |
| SMBus Read Byte, and PEC will work properly. | |
| Additionally, the ADM1032 doesn't support SMBus Send Byte with PEC. | |
| Instead, it will try to write the PEC value to the register (because the | |
| SMBus Send Byte transaction with PEC is similar to a Write Byte transaction | |
| without PEC), which is not what we want. Thus, PEC is explicitly disabled | |
| on SMBus Send Byte transactions in the lm90 driver. | |
| PEC on byte data transactions represents a significant increase in bandwidth | |
| usage (+33% for writes, +25% for reads) in normal conditions. With the need | |
| to use two SMBus transaction for reads, this overhead jumps to +50%. Worse, | |
| two transactions will typically mean twice as much delay waiting for | |
| transaction completion, effectively doubling the register cache refresh time. | |
| I guess reliability comes at a price, but it's quite expensive this time. | |
| So, as not everyone might enjoy the slowdown, PEC can be disabled through | |
| sysfs. Just write 0 to the "pec" file and PEC will be disabled. Write 1 | |
| to that file to enable PEC again. |