| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 1 | Kernel driver w83781d | 
 | 2 | ===================== | 
 | 3 |  | 
 | 4 | Supported chips: | 
 | 5 |   * Winbond W83781D | 
 | 6 |     Prefix: 'w83781d' | 
| Jean Delvare | 6722fea | 2007-10-07 12:25:46 +0200 | [diff] [blame] | 7 |     Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 8 |     Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83781d.pdf | 
 | 9 |   * Winbond W83782D | 
 | 10 |     Prefix: 'w83782d' | 
| Jean Delvare | 6722fea | 2007-10-07 12:25:46 +0200 | [diff] [blame] | 11 |     Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports) | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 12 |     Datasheet: http://www.winbond.com/PDF/sheet/w83782d.pdf | 
 | 13 |   * Winbond W83783S | 
 | 14 |     Prefix: 'w83783s' | 
 | 15 |     Addresses scanned: I2C 0x2d | 
 | 16 |     Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 17 |   * Asus AS99127F | 
 | 18 |     Prefix: 'as99127f' | 
 | 19 |     Addresses scanned: I2C 0x28 - 0x2f | 
 | 20 |     Datasheet: Unavailable from Asus | 
 | 21 |  | 
 | 22 | Authors: | 
 | 23 |         Frodo Looijaard <frodol@dds.nl>, | 
 | 24 |         Philip Edelbrock <phil@netroedge.com>, | 
 | 25 |         Mark Studebaker <mdsxyz123@yahoo.com> | 
 | 26 |  | 
 | 27 | Module parameters | 
 | 28 | ----------------- | 
 | 29 |  | 
 | 30 | * init int | 
 | 31 |   (default 1) | 
 | 32 |   Use 'init=0' to bypass initializing the chip. | 
 | 33 |   Try this if your computer crashes when you load the module. | 
 | 34 |  | 
| Jean Delvare | fabddcd | 2006-02-05 23:26:51 +0100 | [diff] [blame] | 35 | * reset int | 
 | 36 |   (default 0) | 
 | 37 |   The driver used to reset the chip on load, but does no more. Use | 
 | 38 |   'reset=1' to restore the old behavior. Report if you need to do this. | 
 | 39 |  | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 40 | force_subclients=bus,caddr,saddr,saddr | 
 | 41 |   This is used to force the i2c addresses for subclients of | 
 | 42 |   a certain chip. Typical usage is `force_subclients=0,0x2d,0x4a,0x4b' | 
 | 43 |   to force the subclients of chip 0x2d on bus 0 to i2c addresses | 
 | 44 |   0x4a and 0x4b. This parameter is useful for certain Tyan boards. | 
 | 45 |  | 
 | 46 | Description | 
 | 47 | ----------- | 
 | 48 |  | 
| Jean Delvare | 0566336 | 2007-11-30 23:51:24 +0100 | [diff] [blame] | 49 | This driver implements support for the Winbond W83781D, W83782D, W83783S | 
 | 50 | chips, and the Asus AS99127F chips. We will refer to them collectively as | 
 | 51 | W8378* chips. | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 52 |  | 
 | 53 | There is quite some difference between these chips, but they are similar | 
 | 54 | enough that it was sensible to put them together in one driver. | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 55 | The Asus chips are similar to an I2C-only W83782D. | 
 | 56 |  | 
 | 57 | Chip        #vin    #fanin  #pwm    #temp   wchipid vendid  i2c     ISA | 
 | 58 | as99127f    7       3       0       3       0x31    0x12c3  yes     no | 
 | 59 | as99127f rev.2 (type_name = as99127f)       0x31    0x5ca3  yes     no | 
 | 60 | w83781d     7       3       0       3       0x10-1  0x5ca3  yes     yes | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 61 | w83782d     9       3       2-4     3       0x30    0x5ca3  yes     yes | 
 | 62 | w83783s     5-6     3       2       1-2     0x40    0x5ca3  yes     no | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 63 |  | 
 | 64 | Detection of these chips can sometimes be foiled because they can be in | 
 | 65 | an internal state that allows no clean access. If you know the address | 
 | 66 | of the chip, use a 'force' parameter; this will put them into a more | 
 | 67 | well-behaved state first. | 
 | 68 |  | 
 | 69 | The W8378* implements temperature sensors (three on the W83781D and W83782D, | 
 | 70 | two on the W83783S), three fan rotation speed sensors, voltage sensors | 
 | 71 | (seven on the W83781D, nine on the W83782D and six on the W83783S), VID | 
 | 72 | lines, alarms with beep warnings, and some miscellaneous stuff. | 
 | 73 |  | 
 | 74 | Temperatures are measured in degrees Celsius. There is always one main | 
 | 75 | temperature sensor, and one (W83783S) or two (W83781D and W83782D) other | 
 | 76 | sensors. An alarm is triggered for the main sensor once when the | 
 | 77 | Overtemperature Shutdown limit is crossed; it is triggered again as soon as | 
 | 78 | it drops below the Hysteresis value. A more useful behavior | 
 | 79 | can be found by setting the Hysteresis value to +127 degrees Celsius; in | 
 | 80 | this case, alarms are issued during all the time when the actual temperature | 
 | 81 | is above the Overtemperature Shutdown value. The driver sets the | 
 | 82 | hysteresis value for temp1 to 127 at initialization. | 
 | 83 |  | 
 | 84 | For the other temperature sensor(s), an alarm is triggered when the | 
 | 85 | temperature gets higher then the Overtemperature Shutdown value; it stays | 
 | 86 | on until the temperature falls below the Hysteresis value. But on the | 
 | 87 | W83781D, there is only one alarm that functions for both other sensors! | 
 | 88 | Temperatures are guaranteed within a range of -55 to +125 degrees. The | 
 | 89 | main temperature sensors has a resolution of 1 degree; the other sensor(s) | 
 | 90 | of 0.5 degree. | 
 | 91 |  | 
 | 92 | Fan rotation speeds are reported in RPM (rotations per minute). An alarm is | 
 | 93 | triggered if the rotation speed has dropped below a programmable limit. Fan | 
 | 94 | readings can be divided by a programmable divider (1, 2, 4 or 8 for the | 
 | 95 | W83781D; 1, 2, 4, 8, 16, 32, 64 or 128 for the others) to give | 
 | 96 | the readings more range or accuracy. Not all RPM values can accurately | 
 | 97 | be represented, so some rounding is done. With a divider of 2, the lowest | 
 | 98 | representable value is around 2600 RPM. | 
 | 99 |  | 
 | 100 | Voltage sensors (also known as IN sensors) report their values in volts. | 
 | 101 | An alarm is triggered if the voltage has crossed a programmable minimum | 
 | 102 | or maximum limit. Note that minimum in this case always means 'closest to | 
 | 103 | zero'; this is important for negative voltage measurements. All voltage | 
 | 104 | inputs can measure voltages between 0 and 4.08 volts, with a resolution | 
 | 105 | of 0.016 volt. | 
 | 106 |  | 
 | 107 | The VID lines encode the core voltage value: the voltage level your processor | 
 | 108 | should work with. This is hardcoded by the mainboard and/or processor itself. | 
 | 109 | It is a value in volts. When it is unconnected, you will often find the | 
 | 110 | value 3.50 V here. | 
 | 111 |  | 
 | 112 | The W83782D and W83783S temperature conversion machine understands about | 
 | 113 | several kinds of temperature probes. You can program the so-called | 
 | 114 | beta value in the sensor files. '1' is the PII/Celeron diode, '2' is the | 
 | 115 | TN3904 transistor, and 3435 the default thermistor value. Other values | 
 | 116 | are (not yet) supported. | 
 | 117 |  | 
 | 118 | In addition to the alarms described above, there is a CHAS alarm on the | 
 | 119 | chips which triggers if your computer case is open. | 
 | 120 |  | 
 | 121 | When an alarm goes off, you can be warned by a beeping signal through | 
 | 122 | your computer speaker. It is possible to enable all beeping globally, | 
 | 123 | or only the beeping for some alarms. | 
 | 124 |  | 
| Jean Delvare | 41fc493 | 2006-02-05 23:25:25 +0100 | [diff] [blame] | 125 | Individual alarm and beep bits: | 
 | 126 |  | 
 | 127 | 0x000001: in0 | 
 | 128 | 0x000002: in1 | 
 | 129 | 0x000004: in2 | 
 | 130 | 0x000008: in3 | 
 | 131 | 0x000010: temp1 | 
 | 132 | 0x000020: temp2 (+temp3 on W83781D) | 
 | 133 | 0x000040: fan1 | 
 | 134 | 0x000080: fan2 | 
 | 135 | 0x000100: in4 | 
 | 136 | 0x000200: in5 | 
 | 137 | 0x000400: in6 | 
 | 138 | 0x000800: fan3 | 
 | 139 | 0x001000: chassis | 
| Jean Delvare | 0566336 | 2007-11-30 23:51:24 +0100 | [diff] [blame] | 140 | 0x002000: temp3 (W83782D only) | 
 | 141 | 0x010000: in7 (W83782D only) | 
 | 142 | 0x020000: in8 (W83782D only) | 
| Jean Delvare | 41fc493 | 2006-02-05 23:25:25 +0100 | [diff] [blame] | 143 |  | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 144 | If an alarm triggers, it will remain triggered until the hardware register | 
 | 145 | is read at least once. This means that the cause for the alarm may | 
 | 146 | already have disappeared! Note that in the current implementation, all | 
 | 147 | hardware registers are read whenever any data is read (unless it is less | 
 | 148 | than 1.5 seconds since the last update). This means that you can easily | 
 | 149 | miss once-only alarms. | 
 | 150 |  | 
 | 151 | The chips only update values each 1.5 seconds; reading them more often | 
 | 152 | will do no harm, but will return 'old' values. | 
 | 153 |  | 
 | 154 | AS99127F PROBLEMS | 
 | 155 | ----------------- | 
 | 156 | The as99127f support was developed without the benefit of a datasheet. | 
 | 157 | In most cases it is treated as a w83781d (although revision 2 of the | 
 | 158 | AS99127F looks more like a w83782d). | 
 | 159 | This support will be BETA until a datasheet is released. | 
 | 160 | One user has reported problems with fans stopping | 
 | 161 | occasionally. | 
 | 162 |  | 
 | 163 | Note that the individual beep bits are inverted from the other chips. | 
 | 164 | The driver now takes care of this so that user-space applications | 
 | 165 | don't have to know about it. | 
 | 166 |  | 
 | 167 | Known problems: | 
 | 168 | 	- Problems with diode/thermistor settings (supported?) | 
 | 169 | 	- One user reports fans stopping under high server load. | 
 | 170 | 	- Revision 2 seems to have 2 PWM registers but we don't know | 
 | 171 | 	  how to handle them. More details below. | 
 | 172 |  | 
 | 173 | These will not be fixed unless we get a datasheet. | 
 | 174 | If you have problems, please lobby Asus to release a datasheet. | 
 | 175 | Unfortunately several others have without success. | 
 | 176 | Please do not send mail to us asking for better as99127f support. | 
 | 177 | We have done the best we can without a datasheet. | 
 | 178 | Please do not send mail to the author or the sensors group asking for | 
 | 179 | a datasheet or ideas on how to convince Asus. We can't help. | 
 | 180 |  | 
 | 181 |  | 
 | 182 | NOTES: | 
 | 183 | ----- | 
 | 184 |   783s has no in1 so that in[2-6] are compatible with the 781d/782d. | 
 | 185 |  | 
 | 186 |   783s pin is programmable for -5V or temp1; defaults to -5V, | 
 | 187 |        no control in driver so temp1 doesn't work. | 
 | 188 |  | 
 | 189 |   782d and 783s datasheets differ on which is pwm1 and which is pwm2. | 
 | 190 |        We chose to follow 782d. | 
 | 191 |  | 
 | 192 |   782d and 783s pin is programmable for fan3 input or pwm2 output; | 
 | 193 |        defaults to fan3 input. | 
 | 194 |        If pwm2 is enabled (with echo 255 1 > pwm2), then | 
 | 195 |        fan3 will report 0. | 
 | 196 |  | 
 | 197 |   782d has pwm1-2 for ISA, pwm1-4 for i2c. (pwm3-4 share pins with | 
 | 198 |        the ISA pins) | 
 | 199 |  | 
 | 200 | Data sheet updates: | 
 | 201 | ------------------ | 
 | 202 | 	- PWM clock registers: | 
 | 203 |  | 
 | 204 | 		000: master /  512 | 
 | 205 | 		001: master / 1024 | 
 | 206 | 		010: master / 2048 | 
 | 207 | 		011: master / 4096 | 
 | 208 | 		100: master / 8192 | 
 | 209 |  | 
 | 210 |  | 
 | 211 | Answers from Winbond tech support | 
 | 212 | --------------------------------- | 
 | 213 | > | 
 | 214 | > 1) In the W83781D data sheet section 7.2 last paragraph, it talks about | 
 | 215 | >    reprogramming the R-T table if the Beta of the thermistor is not | 
 | 216 | >    3435K. The R-T table is described briefly in section 8.20. | 
 | 217 | >    What formulas do I use to program a new R-T table for a given Beta? | 
 | 218 | > | 
 | 219 | 	We are sorry that the calculation for R-T table value is | 
 | 220 | confidential. If you have another Beta value of thermistor, we can help | 
 | 221 | to calculate the R-T table for you. But you should give us real R-T | 
 | 222 | Table which can be gotten by thermistor vendor. Therefore we will calculate | 
 | 223 | them and obtain 32-byte data, and you can fill the 32-byte data to the | 
 | 224 | register in Bank0.CR51 of W83781D. | 
 | 225 |  | 
 | 226 |  | 
 | 227 | > 2) In the W83782D data sheet, it mentions that pins 38, 39, and 40 are | 
 | 228 | >    programmable to be either thermistor or Pentium II diode inputs. | 
 | 229 | >    How do I program them for diode inputs? I can't find any register | 
 | 230 | >    to program these to be diode inputs. | 
 | 231 |  --> You may program Bank0 CR[5Dh] and CR[59h] registers. | 
 | 232 |  | 
 | 233 |  	CR[5Dh]    		bit 1(VTIN1)    bit 2(VTIN2)   bit 3(VTIN3) | 
 | 234 |  | 
 | 235 |       	thermistor                0		 0		0 | 
 | 236 |  	diode 		          1		 1		1 | 
 | 237 |  | 
 | 238 |  | 
 | 239 | (error) CR[59h] 		bit 4(VTIN1)	bit 2(VTIN2)   bit 3(VTIN3) | 
 | 240 | (right) CR[59h] 		bit 4(VTIN1)	bit 5(VTIN2)   bit 6(VTIN3) | 
 | 241 |  | 
 | 242 |  	PII thermal diode         1		 1		1 | 
 | 243 |  	2N3904	diode	          0		 0		0 | 
 | 244 |  | 
 | 245 |  | 
 | 246 | Asus Clones | 
 | 247 | ----------- | 
 | 248 |  | 
 | 249 | We have no datasheets for the Asus clones (AS99127F and ASB100 Bach). | 
 | 250 | Here are some very useful information that were given to us by Alex Van | 
 | 251 | Kaam about how to detect these chips, and how to read their values. He | 
 | 252 | also gives advice for another Asus chipset, the Mozart-2 (which we | 
 | 253 | don't support yet). Thanks Alex! | 
 | 254 | I reworded some parts and added personal comments. | 
 | 255 |  | 
 | 256 | # Detection: | 
 | 257 |  | 
 | 258 | AS99127F rev.1, AS99127F rev.2 and ASB100: | 
 | 259 | - I2C address range: 0x29 - 0x2F | 
 | 260 | - If register 0x58 holds 0x31 then we have an Asus (either ASB100 or | 
 | 261 |   AS99127F) | 
 | 262 | - Which one depends on register 0x4F (manufacturer ID): | 
 | 263 |   0x06 or 0x94: ASB100 | 
 | 264 |   0x12 or 0xC3: AS99127F rev.1 | 
 | 265 |   0x5C or 0xA3: AS99127F rev.2 | 
 | 266 |   Note that 0x5CA3 is Winbond's ID (WEC), which let us think Asus get their | 
 | 267 |   AS99127F rev.2 direct from Winbond. The other codes mean ATT and DVC, | 
 | 268 |   respectively. ATT could stand for Asustek something (although it would be | 
 | 269 |   very badly chosen IMHO), I don't know what DVC could stand for. Maybe | 
 | 270 |   these codes simply aren't meant to be decoded that way. | 
 | 271 |  | 
 | 272 | Mozart-2: | 
 | 273 | - I2C address: 0x77 | 
 | 274 | - If register 0x58 holds 0x56 or 0x10 then we have a Mozart-2 | 
 | 275 | - Of the Mozart there are 3 types: | 
 | 276 |   0x58=0x56, 0x4E=0x94, 0x4F=0x36: Asus ASM58 Mozart-2 | 
 | 277 |   0x58=0x56, 0x4E=0x94, 0x4F=0x06: Asus AS2K129R Mozart-2 | 
 | 278 |   0x58=0x10, 0x4E=0x5C, 0x4F=0xA3: Asus ??? Mozart-2 | 
 | 279 |   You can handle all 3 the exact same way :) | 
 | 280 |  | 
 | 281 | # Temperature sensors: | 
 | 282 |  | 
 | 283 | ASB100: | 
 | 284 | - sensor 1: register 0x27 | 
 | 285 | - sensor 2 & 3 are the 2 LM75's on the SMBus | 
 | 286 | - sensor 4: register 0x17 | 
 | 287 | Remark: I noticed that on Intel boards sensor 2 is used for the CPU | 
 | 288 |   and 4 is ignored/stuck, on AMD boards sensor 4 is the CPU and sensor 2 is | 
 | 289 |   either ignored or a socket temperature. | 
 | 290 |  | 
 | 291 | AS99127F (rev.1 and 2 alike): | 
 | 292 | - sensor 1: register 0x27 | 
 | 293 | - sensor 2 & 3 are the 2 LM75's on the SMBus | 
 | 294 | Remark: Register 0x5b is suspected to be temperature type selector. Bit 1 | 
 | 295 |   would control temp1, bit 3 temp2 and bit 5 temp3. | 
 | 296 |  | 
 | 297 | Mozart-2: | 
 | 298 | - sensor 1: register 0x27 | 
 | 299 | - sensor 2: register 0x13 | 
 | 300 |  | 
 | 301 | # Fan sensors: | 
 | 302 |  | 
 | 303 | ASB100, AS99127F (rev.1 and 2 alike): | 
 | 304 | - 3 fans, identical to the W83781D | 
 | 305 |  | 
 | 306 | Mozart-2: | 
 | 307 | - 2 fans only, 1350000/RPM/div | 
 | 308 | - fan 1: register 0x28,  divisor on register 0xA1 (bits 4-5) | 
 | 309 | - fan 2: register 0x29,  divisor on register 0xA1 (bits 6-7) | 
 | 310 |  | 
 | 311 | # Voltages: | 
 | 312 |  | 
 | 313 | This is where there is a difference between AS99127F rev.1 and 2. | 
 | 314 | Remark: The difference is similar to the difference between | 
 | 315 |   W83781D and W83782D. | 
 | 316 |  | 
 | 317 | ASB100: | 
 | 318 | in0=r(0x20)*0.016 | 
 | 319 | in1=r(0x21)*0.016 | 
 | 320 | in2=r(0x22)*0.016 | 
 | 321 | in3=r(0x23)*0.016*1.68 | 
 | 322 | in4=r(0x24)*0.016*3.8 | 
 | 323 | in5=r(0x25)*(-0.016)*3.97 | 
 | 324 | in6=r(0x26)*(-0.016)*1.666 | 
 | 325 |  | 
 | 326 | AS99127F rev.1: | 
 | 327 | in0=r(0x20)*0.016 | 
 | 328 | in1=r(0x21)*0.016 | 
 | 329 | in2=r(0x22)*0.016 | 
 | 330 | in3=r(0x23)*0.016*1.68 | 
 | 331 | in4=r(0x24)*0.016*3.8 | 
 | 332 | in5=r(0x25)*(-0.016)*3.97 | 
 | 333 | in6=r(0x26)*(-0.016)*1.503 | 
 | 334 |  | 
 | 335 | AS99127F rev.2: | 
 | 336 | in0=r(0x20)*0.016 | 
 | 337 | in1=r(0x21)*0.016 | 
 | 338 | in2=r(0x22)*0.016 | 
 | 339 | in3=r(0x23)*0.016*1.68 | 
 | 340 | in4=r(0x24)*0.016*3.8 | 
 | 341 | in5=(r(0x25)*0.016-3.6)*5.14+3.6 | 
 | 342 | in6=(r(0x26)*0.016-3.6)*3.14+3.6 | 
 | 343 |  | 
 | 344 | Mozart-2: | 
 | 345 | in0=r(0x20)*0.016 | 
 | 346 | in1=255 | 
 | 347 | in2=r(0x22)*0.016 | 
 | 348 | in3=r(0x23)*0.016*1.68 | 
 | 349 | in4=r(0x24)*0.016*4 | 
 | 350 | in5=255 | 
 | 351 | in6=255 | 
 | 352 |  | 
 | 353 |  | 
 | 354 | # PWM | 
 | 355 |  | 
 | 356 | Additional info about PWM on the AS99127F (may apply to other Asus | 
 | 357 | chips as well) by Jean Delvare as of 2004-04-09: | 
 | 358 |  | 
 | 359 | AS99127F revision 2 seems to have two PWM registers at 0x59 and 0x5A, | 
 | 360 | and a temperature sensor type selector at 0x5B (which basically means | 
 | 361 | that they swapped registers 0x59 and 0x5B when you compare with Winbond | 
 | 362 | chips). | 
 | 363 | Revision 1 of the chip also has the temperature sensor type selector at | 
 | 364 | 0x5B, but PWM registers have no effect. | 
 | 365 |  | 
 | 366 | We don't know exactly how the temperature sensor type selection works. | 
 | 367 | Looks like bits 1-0 are for temp1, bits 3-2 for temp2 and bits 5-4 for | 
 | 368 | temp3, although it is possible that only the most significant bit matters | 
 | 369 | each time. So far, values other than 0 always broke the readings. | 
 | 370 |  | 
 | 371 | PWM registers seem to be split in two parts: bit 7 is a mode selector, | 
 | 372 | while the other bits seem to define a value or threshold. | 
 | 373 |  | 
 | 374 | When bit 7 is clear, bits 6-0 seem to hold a threshold value. If the value | 
 | 375 | is below a given limit, the fan runs at low speed. If the value is above | 
 | 376 | the limit, the fan runs at full speed. We have no clue as to what the limit | 
 | 377 | represents. Note that there seem to be some inertia in this mode, speed | 
 | 378 | changes may need some time to trigger. Also, an hysteresis mechanism is | 
 | 379 | suspected since walking through all the values increasingly and then | 
 | 380 | decreasingly led to slightly different limits. | 
 | 381 |  | 
 | 382 | When bit 7 is set, bits 3-0 seem to hold a threshold value, while bits 6-4 | 
 | 383 | would not be significant. If the value is below a given limit, the fan runs | 
 | 384 | at full speed, while if it is above the limit it runs at low speed (so this | 
 | 385 | is the contrary of the other mode, in a way). Here again, we don't know | 
 | 386 | what the limit is supposed to represent. | 
 | 387 |  | 
 | 388 | One remarkable thing is that the fans would only have two or three | 
 | 389 | different speeds (transitional states left apart), not a whole range as | 
 | 390 | you usually get with PWM. | 
 | 391 |  | 
 | 392 | As a conclusion, you can write 0x00 or 0x8F to the PWM registers to make | 
 | 393 | fans run at low speed, and 0x7F or 0x80 to make them run at full speed. | 
 | 394 |  | 
 | 395 | Please contact us if you can figure out how it is supposed to work. As | 
 | 396 | long as we don't know more, the w83781d driver doesn't handle PWM on | 
 | 397 | AS99127F chips at all. | 
 | 398 |  | 
 | 399 | Additional info about PWM on the AS99127F rev.1 by Hector Martin: | 
 | 400 |  | 
 | 401 | I've been fiddling around with the (in)famous 0x59 register and | 
 | 402 | found out the following values do work as a form of coarse pwm: | 
 | 403 |  | 
 | 404 | 0x80 - seems to turn fans off after some time(1-2 minutes)... might be | 
 | 405 | some form of auto-fan-control based on temp? hmm (Qfan? this mobo is an | 
 | 406 | old ASUS, it isn't marketed as Qfan. Maybe some beta pre-attemp at Qfan | 
 | 407 | that was dropped at the BIOS) | 
 | 408 | 0x81 - off | 
 | 409 | 0x82 - slightly "on-ner" than off, but my fans do not get to move. I can | 
 | 410 | hear the high-pitched PWM sound that motors give off at too-low-pwm. | 
 | 411 | 0x83 - now they do move. Estimate about 70% speed or so. | 
 | 412 | 0x84-0x8f - full on | 
 | 413 |  | 
 | 414 | Changing the high nibble doesn't seem to do much except the high bit | 
 | 415 | (0x80) must be set for PWM to work, else the current pwm doesn't seem to | 
 | 416 | change. | 
 | 417 |  | 
 | 418 | My mobo is an ASUS A7V266-E. This behavior is similar to what I got | 
 | 419 | with speedfan under Windows, where 0-15% would be off, 15-2x% (can't | 
 | 420 | remember the exact value) would be 70% and higher would be full on. |