|  | Kernel driver pc87360 | 
|  | ===================== | 
|  |  | 
|  | Supported chips: | 
|  | * National Semiconductor PC87360, PC87363, PC87364, PC87365 and PC87366 | 
|  | Prefixes: 'pc87360', 'pc87363', 'pc87364', 'pc87365', 'pc87366' | 
|  | Addresses scanned: none, address read from Super I/O config space | 
|  | Datasheets: | 
|  | http://www.national.com/pf/PC/PC87360.html | 
|  | http://www.national.com/pf/PC/PC87363.html | 
|  | http://www.national.com/pf/PC/PC87364.html | 
|  | http://www.national.com/pf/PC/PC87365.html | 
|  | http://www.national.com/pf/PC/PC87366.html | 
|  |  | 
|  | Authors: Jean Delvare <khali@linux-fr.org> | 
|  |  | 
|  | Thanks to Sandeep Mehta, Tonko de Rooy and Daniel Ceregatti for testing. | 
|  | Thanks to Rudolf Marek for helping me investigate conversion issues. | 
|  |  | 
|  |  | 
|  | Module Parameters | 
|  | ----------------- | 
|  |  | 
|  | * init int | 
|  | Chip initialization level: | 
|  | 0: None | 
|  | *1: Forcibly enable internal voltage and temperature channels, except in9 | 
|  | 2: Forcibly enable all voltage and temperature channels, except in9 | 
|  | 3: Forcibly enable all voltage and temperature channels, including in9 | 
|  |  | 
|  | Note that this parameter has no effect for the PC87360, PC87363 and PC87364 | 
|  | chips. | 
|  |  | 
|  | Also note that for the PC87366, initialization levels 2 and 3 don't enable | 
|  | all temperature channels, because some of them share pins with each other, | 
|  | so they can't be used at the same time. | 
|  |  | 
|  |  | 
|  | Description | 
|  | ----------- | 
|  |  | 
|  | The National Semiconductor PC87360 Super I/O chip contains monitoring and | 
|  | PWM control circuitry for two fans. The PC87363 chip is similar, and the | 
|  | PC87364 chip has monitoring and PWM control for a third fan. | 
|  |  | 
|  | The National Semiconductor PC87365 and PC87366 Super I/O chips are complete | 
|  | hardware monitoring chipsets, not only controlling and monitoring three fans, | 
|  | but also monitoring eleven voltage inputs and two (PC87365) or up to four | 
|  | (PC87366) temperatures. | 
|  |  | 
|  | Chip        #vin    #fan    #pwm    #temp   devid | 
|  |  | 
|  | PC87360     -       2       2       -       0xE1 | 
|  | PC87363     -       2       2       -       0xE8 | 
|  | PC87364     -       3       3       -       0xE4 | 
|  | PC87365     11      3       3       2       0xE5 | 
|  | PC87366     11      3       3       3-4     0xE9 | 
|  |  | 
|  | The driver assumes that no more than one chip is present, and one of the | 
|  | standard Super I/O addresses is used (0x2E/0x2F or 0x4E/0x4F) | 
|  |  | 
|  | Fan Monitoring | 
|  | -------------- | 
|  |  | 
|  | Fan rotation speeds are reported in RPM (revolutions per minute). An alarm | 
|  | is triggered if the rotation speed has dropped below a programmable limit. | 
|  | A different alarm is triggered if the fan speed is too low to be measured. | 
|  |  | 
|  | Fan readings are affected by a programmable clock divider, giving the | 
|  | readings more range or accuracy. Usually, users have to learn how it works, | 
|  | but this driver implements dynamic clock divider selection, so you don't | 
|  | have to care no more. | 
|  |  | 
|  | For reference, here are a few values about clock dividers: | 
|  |  | 
|  | slowest         accuracy        highest | 
|  | measurable      around 3000     accurate | 
|  | divider     speed (RPM)     RPM (RPM)       speed (RPM) | 
|  | 1        1882              18           6928 | 
|  | 2         941              37           4898 | 
|  | 4         470              74           3464 | 
|  | 8         235             150           2449 | 
|  |  | 
|  | For the curious, here is how the values above were computed: | 
|  | * slowest measurable speed: clock/(255*divider) | 
|  | * accuracy around 3000 RPM: 3000^2/clock | 
|  | * highest accurate speed: sqrt(clock*100) | 
|  | The clock speed for the PC87360 family is 480 kHz. I arbitrarily chose 100 | 
|  | RPM as the lowest acceptable accuracy. | 
|  |  | 
|  | As mentioned above, you don't have to care about this no more. | 
|  |  | 
|  | Note that not all RPM values can be represented, even when the best clock | 
|  | divider is selected. This is not only true for the measured speeds, but | 
|  | also for the programmable low limits, so don't be surprised if you try to | 
|  | set, say, fan1_min to 2900 and it finally reads 2909. | 
|  |  | 
|  |  | 
|  | Fan Control | 
|  | ----------- | 
|  |  | 
|  | PWM (pulse width modulation) values range from 0 to 255, with 0 meaning | 
|  | that the fan is stopped, and 255 meaning that the fan goes at full speed. | 
|  |  | 
|  | Be extremely careful when changing PWM values. Low PWM values, even | 
|  | non-zero, can stop the fan, which may cause irreversible damage to your | 
|  | hardware if temperature increases too much. When changing PWM values, go | 
|  | step by step and keep an eye on temperatures. | 
|  |  | 
|  | One user reported problems with PWM. Changing PWM values would break fan | 
|  | speed readings. No explanation nor fix could be found. | 
|  |  | 
|  |  | 
|  | Temperature Monitoring | 
|  | ---------------------- | 
|  |  | 
|  | Temperatures are reported in degrees Celsius. Each temperature measured has | 
|  | associated low, high and overtemperature limits, each of which triggers an | 
|  | alarm when crossed. | 
|  |  | 
|  | The first two temperature channels are external. The third one (PC87366 | 
|  | only) is internal. | 
|  |  | 
|  | The PC87366 has three additional temperature channels, based on | 
|  | thermistors (as opposed to thermal diodes for the first three temperature | 
|  | channels). For technical reasons, these channels are held by the VLM | 
|  | (voltage level monitor) logical device, not the TMS (temperature | 
|  | measurement) one. As a consequence, these temperatures are exported as | 
|  | voltages, and converted into temperatures in user-space. | 
|  |  | 
|  | Note that these three additional channels share their pins with the | 
|  | external thermal diode channels, so you (physically) can't use them all at | 
|  | the same time. Although it should be possible to mix the two sensor types, | 
|  | the documents from National Semiconductor suggest that motherboard | 
|  | manufacturers should choose one type and stick to it. So you will more | 
|  | likely have either channels 1 to 3 (thermal diodes) or 3 to 6 (internal | 
|  | thermal diode, and thermistors). | 
|  |  | 
|  |  | 
|  | Voltage Monitoring | 
|  | ------------------ | 
|  |  | 
|  | Voltages are reported relatively to a reference voltage, either internal or | 
|  | external. Some of them (in7:Vsb, in8:Vdd and in10:AVdd) are divided by two | 
|  | internally, you will have to compensate in sensors.conf. Others (in0 to in6) | 
|  | are likely to be divided externally. The meaning of each of these inputs as | 
|  | well as the values of the resistors used for division is left to the | 
|  | motherboard manufacturers, so you will have to document yourself and edit | 
|  | sensors.conf accordingly. National Semiconductor has a document with | 
|  | recommended resistor values for some voltages, but this still leaves much | 
|  | room for per motherboard specificities, unfortunately. Even worse, | 
|  | motherboard manufacturers don't seem to care about National Semiconductor's | 
|  | recommendations. | 
|  |  | 
|  | Each voltage measured has associated low and high limits, each of which | 
|  | triggers an alarm when crossed. | 
|  |  | 
|  | When available, VID inputs are used to provide the nominal CPU Core voltage. | 
|  | The driver will default to VRM 9.0, but this can be changed from user-space. | 
|  | The chipsets can handle two sets of VID inputs (on dual-CPU systems), but | 
|  | the driver will only export one for now. This may change later if there is | 
|  | a need. | 
|  |  | 
|  |  | 
|  | General Remarks | 
|  | --------------- | 
|  |  | 
|  | If an alarm triggers, it will remain triggered until the hardware register | 
|  | is read at least once. This means that the cause for the alarm may already | 
|  | have disappeared! Note that all hardware registers are read whenever any | 
|  | data is read (unless it is less than 2 seconds since the last update, in | 
|  | which case cached values are returned instead). As a consequence, when | 
|  | a once-only alarm triggers, it may take 2 seconds for it to show, and 2 | 
|  | more seconds for it to disappear. | 
|  |  | 
|  | Monitoring of in9 isn't enabled at lower init levels (<3) because that | 
|  | channel measures the battery voltage (Vbat). It is a known fact that | 
|  | repeatedly sampling the battery voltage reduces its lifetime. National | 
|  | Semiconductor smartly designed their chipset so that in9 is sampled only | 
|  | once every 1024 sampling cycles (that is every 34 minutes at the default | 
|  | sampling rate), so the effect is attenuated, but still present. | 
|  |  | 
|  |  | 
|  | Limitations | 
|  | ----------- | 
|  |  | 
|  | The datasheets suggests that some values (fan mins, fan dividers) | 
|  | shouldn't be changed once the monitoring has started, but we ignore that | 
|  | recommendation. We'll reconsider if it actually causes trouble. |