| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 1 | Kernel driver dme1737 | 
 | 2 | ===================== | 
 | 3 |  | 
 | 4 | Supported chips: | 
 | 5 |   * SMSC DME1737 and compatibles (like Asus A8000) | 
 | 6 |     Prefix: 'dme1737' | 
 | 7 |     Addresses scanned: I2C 0x2c, 0x2d, 0x2e | 
 | 8 |     Datasheet: Provided by SMSC upon request and under NDA | 
| Juerg Haefliger | e95c237 | 2007-10-07 21:27:35 -0700 | [diff] [blame] | 9 |   * SMSC SCH3112, SCH3114, SCH3116 | 
 | 10 |     Prefix: 'sch311x' | 
 | 11 |     Addresses scanned: none, address read from Super-I/O config space | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 12 |     Datasheet: Available on the Internet | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 13 |   * SMSC SCH5027 | 
 | 14 |     Prefix: 'sch5027' | 
 | 15 |     Addresses scanned: I2C 0x2c, 0x2d, 0x2e | 
 | 16 |     Datasheet: Provided by SMSC upon request and under NDA | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 17 |   * SMSC SCH5127 | 
 | 18 |     Prefix: 'sch5127' | 
 | 19 |     Addresses scanned: none, address read from Super-I/O config space | 
 | 20 |     Datasheet: Provided by SMSC upon request and under NDA | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 21 |  | 
 | 22 | Authors: | 
 | 23 |     Juerg Haefliger <juergh@gmail.com> | 
 | 24 |  | 
 | 25 |  | 
 | 26 | Module Parameters | 
 | 27 | ----------------- | 
 | 28 |  | 
 | 29 | * force_start: bool	Enables the monitoring of voltage, fan and temp inputs | 
 | 30 | 			and PWM output control functions. Using this parameter | 
 | 31 | 			shouldn't be required since the BIOS usually takes care | 
 | 32 | 			of this. | 
| Juerg Haefliger | 92430b6 | 2008-04-03 21:34:19 -0700 | [diff] [blame] | 33 | * probe_all_addr: bool	Include non-standard LPC addresses 0x162e and 0x164e | 
 | 34 | 			when probing for ISA devices. This is required for the | 
 | 35 | 			following boards: | 
 | 36 | 			- VIA EPIA SN18000 | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 37 |  | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 38 |  | 
 | 39 | Description | 
 | 40 | ----------- | 
 | 41 |  | 
 | 42 | This driver implements support for the hardware monitoring capabilities of the | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 43 | SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, SCH311x, | 
 | 44 | and SCH5127 Super-I/O chips. These chips feature monitoring of 3 temp sensors | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 45 | temp[1-3] (2 remote diodes and 1 internal), 7 voltages in[0-6] (6 external and | 
 | 46 | 1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement | 
 | 47 | up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and | 
| Juerg Haefliger | e95c237 | 2007-10-07 21:27:35 -0700 | [diff] [blame] | 48 | automatically. | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 49 |  | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 50 | For the DME1737, A8000 and SCH5027, fan[1-2] and pwm[1-2] are always present. | 
 | 51 | Fan[3-6] and pwm[3,5-6] are optional features and their availability depends on | 
 | 52 | the configuration of the chip. The driver will detect which features are | 
 | 53 | present during initialization and create the sysfs attributes accordingly. | 
| Juerg Haefliger | e95c237 | 2007-10-07 21:27:35 -0700 | [diff] [blame] | 54 |  | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 55 | For the SCH311x and SCH5127, fan[1-3] and pwm[1-3] are always present and | 
 | 56 | fan[4-6] and pwm[5-6] don't exist. | 
| Juerg Haefliger | e95c237 | 2007-10-07 21:27:35 -0700 | [diff] [blame] | 57 |  | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 58 | The hardware monitoring features of the DME1737, A8000, and SCH5027 are only | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 59 | accessible via SMBus, while the SCH311x and SCH5127 only provide access via | 
 | 60 | the ISA bus. The driver will therefore register itself as an I2C client driver | 
 | 61 | if it detects a DME1737, A8000, or SCH5027 and as a platform driver if it | 
 | 62 | detects a SCH311x or SCH5127 chip. | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 63 |  | 
 | 64 |  | 
 | 65 | Voltage Monitoring | 
 | 66 | ------------------ | 
 | 67 |  | 
 | 68 | The voltage inputs are sampled with 12-bit resolution and have internal | 
 | 69 | scaling resistors. The values returned by the driver therefore reflect true | 
 | 70 | millivolts and don't need scaling. The voltage inputs are mapped as follows | 
 | 71 | (the last column indicates the input ranges): | 
 | 72 |  | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 73 | DME1737, A8000: | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 74 | 	in0: +5VTR	(+5V standby)		0V - 6.64V | 
 | 75 | 	in1: Vccp	(processor core)	0V - 3V | 
 | 76 | 	in2: VCC	(internal +3.3V)	0V - 4.38V | 
 | 77 | 	in3: +5V				0V - 6.64V | 
 | 78 | 	in4: +12V				0V - 16V | 
 | 79 | 	in5: VTR	(+3.3V standby)		0V - 4.38V | 
 | 80 | 	in6: Vbat	(+3.0V)			0V - 4.38V | 
 | 81 |  | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 82 | SCH311x: | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 83 | 	in0: +2.5V				0V - 3.32V | 
| Juerg Haefliger | 549edb8 | 2008-08-06 22:41:03 +0200 | [diff] [blame] | 84 | 	in1: Vccp	(processor core)	0V - 2V | 
 | 85 | 	in2: VCC	(internal +3.3V)	0V - 4.38V | 
 | 86 | 	in3: +5V				0V - 6.64V | 
 | 87 | 	in4: +12V				0V - 16V | 
 | 88 | 	in5: VTR	(+3.3V standby)		0V - 4.38V | 
 | 89 | 	in6: Vbat	(+3.0V)			0V - 4.38V | 
 | 90 |  | 
 | 91 | SCH5027: | 
 | 92 | 	in0: +5VTR	(+5V standby)		0V - 6.64V | 
 | 93 | 	in1: Vccp	(processor core)	0V - 3V | 
 | 94 | 	in2: VCC	(internal +3.3V)	0V - 4.38V | 
 | 95 | 	in3: V2_IN				0V - 1.5V | 
 | 96 | 	in4: V1_IN				0V - 1.5V | 
 | 97 | 	in5: VTR	(+3.3V standby)		0V - 4.38V | 
 | 98 | 	in6: Vbat	(+3.0V)			0V - 4.38V | 
 | 99 |  | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 100 | SCH5127: | 
 | 101 | 	in0: +2.5				0V - 3.32V | 
 | 102 | 	in1: Vccp	(processor core)	0V - 3V | 
 | 103 | 	in2: VCC	(internal +3.3V)	0V - 4.38V | 
 | 104 | 	in3: V2_IN				0V - 1.5V | 
 | 105 | 	in4: V1_IN				0V - 1.5V | 
 | 106 | 	in5: VTR	(+3.3V standby)		0V - 4.38V | 
 | 107 | 	in6: Vbat	(+3.0V)			0V - 4.38V | 
 | 108 |  | 
| Juerg Haefliger | b825037 | 2007-06-09 10:11:16 -0400 | [diff] [blame] | 109 | Each voltage input has associated min and max limits which trigger an alarm | 
 | 110 | when crossed. | 
 | 111 |  | 
 | 112 |  | 
 | 113 | Temperature Monitoring | 
 | 114 | ---------------------- | 
 | 115 |  | 
 | 116 | Temperatures are measured with 12-bit resolution and reported in millidegree | 
 | 117 | Celsius. The chip also features offsets for all 3 temperature inputs which - | 
 | 118 | when programmed - get added to the input readings. The chip does all the | 
 | 119 | scaling by itself and the driver therefore reports true temperatures that don't | 
 | 120 | need any user-space adjustments. The temperature inputs are mapped as follows | 
 | 121 | (the last column indicates the input ranges): | 
 | 122 |  | 
 | 123 | 	temp1: Remote diode 1 (3904 type) temperature	-127C - +127C | 
 | 124 | 	temp2: DME1737 internal temperature		-127C - +127C | 
 | 125 | 	temp3: Remote diode 2 (3904 type) temperature	-127C - +127C | 
 | 126 |  | 
 | 127 | Each temperature input has associated min and max limits which trigger an alarm | 
 | 128 | when crossed. Additionally, each temperature input has a fault attribute that | 
 | 129 | returns 1 when a faulty diode or an unconnected input is detected and 0 | 
 | 130 | otherwise. | 
 | 131 |  | 
 | 132 |  | 
 | 133 | Fan Monitoring | 
 | 134 | -------------- | 
 | 135 |  | 
 | 136 | Fan RPMs are measured with 16-bit resolution. The chip provides inputs for 6 | 
 | 137 | fan tachometers. All 6 inputs have an associated min limit which triggers an | 
 | 138 | alarm when crossed. Fan inputs 1-4 provide type attributes that need to be set | 
 | 139 | to the number of pulses per fan revolution that the connected tachometer | 
 | 140 | generates. Supported values are 1, 2, and 4. Fan inputs 5-6 only support fans | 
 | 141 | that generate 2 pulses per revolution. Fan inputs 5-6 also provide a max | 
 | 142 | attribute that needs to be set to the maximum attainable RPM (fan at 100% duty- | 
 | 143 | cycle) of the input. The chip adjusts the sampling rate based on this value. | 
 | 144 |  | 
 | 145 |  | 
 | 146 | PWM Output Control | 
 | 147 | ------------------ | 
 | 148 |  | 
 | 149 | This chip features 5 PWM outputs. PWM outputs 1-3 are associated with fan | 
 | 150 | inputs 1-3 and PWM outputs 5-6 are associated with fan inputs 5-6. PWM outputs | 
 | 151 | 1-3 can be configured to operate either in manual or automatic mode by setting | 
 | 152 | the appropriate enable attribute accordingly. PWM outputs 5-6 can only operate | 
 | 153 | in manual mode, their enable attributes are therefore read-only. When set to | 
 | 154 | manual mode, the fan speed is set by writing the duty-cycle value to the | 
 | 155 | appropriate PWM attribute. In automatic mode, the PWM attribute returns the | 
 | 156 | current duty-cycle as set by the fan controller in the chip. All PWM outputs | 
 | 157 | support the setting of the output frequency via the freq attribute. | 
 | 158 |  | 
 | 159 | In automatic mode, the chip supports the setting of the PWM ramp rate which | 
 | 160 | defines how fast the PWM output is adjusting to changes of the associated | 
 | 161 | temperature input. Associating PWM outputs to temperature inputs is done via | 
 | 162 | temperature zones. The chip features 3 zones whose assignments to temperature | 
 | 163 | inputs is static and determined during initialization. These assignments can | 
 | 164 | be retrieved via the zone[1-3]_auto_channels_temp attributes. Each PWM output | 
 | 165 | is assigned to one (or hottest of multiple) temperature zone(s) through the | 
 | 166 | pwm[1-3]_auto_channels_zone attributes. Each PWM output has 3 distinct output | 
 | 167 | duty-cycles: full, low, and min. Full is internally hard-wired to 255 (100%) | 
 | 168 | and low and min can be programmed via pwm[1-3]_auto_point1_pwm and | 
 | 169 | pwm[1-3]_auto_pwm_min, respectively. The thermal thresholds of the zones are | 
 | 170 | programmed via zone[1-3]_auto_point[1-3]_temp and | 
 | 171 | zone[1-3]_auto_point1_temp_hyst: | 
 | 172 |  | 
 | 173 | 	pwm[1-3]_auto_point2_pwm	full-speed duty-cycle (255, i.e., 100%) | 
 | 174 | 	pwm[1-3]_auto_point1_pwm	low-speed duty-cycle | 
 | 175 | 	pwm[1-3]_auto_pwm_min		min-speed duty-cycle | 
 | 176 |  | 
 | 177 | 	zone[1-3]_auto_point3_temp	full-speed temp (all outputs) | 
 | 178 | 	zone[1-3]_auto_point2_temp	full-speed temp | 
 | 179 | 	zone[1-3]_auto_point1_temp	low-speed temp | 
 | 180 | 	zone[1-3]_auto_point1_temp_hyst	min-speed temp | 
 | 181 |  | 
 | 182 | The chip adjusts the output duty-cycle linearly in the range of auto_point1_pwm | 
 | 183 | to auto_point2_pwm if the temperature of the associated zone is between | 
 | 184 | auto_point1_temp and auto_point2_temp. If the temperature drops below the | 
 | 185 | auto_point1_temp_hyst value, the output duty-cycle is set to the auto_pwm_min | 
 | 186 | value which only supports two values: 0 or auto_point1_pwm. That means that the | 
 | 187 | fan either turns completely off or keeps spinning with the low-speed | 
 | 188 | duty-cycle. If any of the temperatures rise above the auto_point3_temp value, | 
 | 189 | all PWM outputs are set to 100% duty-cycle. | 
 | 190 |  | 
 | 191 | Following is another representation of how the chip sets the output duty-cycle | 
 | 192 | based on the temperature of the associated thermal zone: | 
 | 193 |  | 
 | 194 | 			Duty-Cycle	Duty-Cycle | 
 | 195 | 	Temperature	Rising Temp	Falling Temp | 
 | 196 | 	-----------	-----------	------------ | 
 | 197 | 	full-speed	full-speed	full-speed | 
 | 198 |  | 
 | 199 | 			< linearly adjusted duty-cycle > | 
 | 200 |  | 
 | 201 | 	low-speed	low-speed	low-speed | 
 | 202 | 			min-speed	low-speed | 
 | 203 | 	min-speed	min-speed	min-speed | 
 | 204 | 			min-speed	min-speed | 
 | 205 |  | 
 | 206 |  | 
 | 207 | Sysfs Attributes | 
 | 208 | ---------------- | 
 | 209 |  | 
 | 210 | Following is a list of all sysfs attributes that the driver provides, their | 
 | 211 | permissions and a short description: | 
 | 212 |  | 
 | 213 | Name				Perm	Description | 
 | 214 | ----				----	----------- | 
 | 215 | cpu0_vid			RO	CPU core reference voltage in | 
 | 216 | 					millivolts. | 
 | 217 | vrm				RW	Voltage regulator module version | 
 | 218 | 					number. | 
 | 219 |  | 
 | 220 | in[0-6]_input			RO	Measured voltage in millivolts. | 
 | 221 | in[0-6]_min			RW	Low limit for voltage input. | 
 | 222 | in[0-6]_max			RW	High limit for voltage input. | 
 | 223 | in[0-6]_alarm			RO	Voltage input alarm. Returns 1 if | 
 | 224 | 					voltage input is or went outside the | 
 | 225 | 					associated min-max range, 0 otherwise. | 
 | 226 |  | 
 | 227 | temp[1-3]_input			RO	Measured temperature in millidegree | 
 | 228 | 					Celsius. | 
 | 229 | temp[1-3]_min			RW	Low limit for temp input. | 
 | 230 | temp[1-3]_max			RW	High limit for temp input. | 
 | 231 | temp[1-3]_offset		RW	Offset for temp input. This value will | 
 | 232 | 					be added by the chip to the measured | 
 | 233 | 					temperature. | 
 | 234 | temp[1-3]_alarm			RO	Alarm for temp input. Returns 1 if temp | 
 | 235 | 					input is or went outside the associated | 
 | 236 | 					min-max range, 0 otherwise. | 
 | 237 | temp[1-3]_fault			RO	Temp input fault. Returns 1 if the chip | 
 | 238 | 					detects a faulty thermal diode or an | 
 | 239 | 					unconnected temp input, 0 otherwise. | 
 | 240 |  | 
 | 241 | zone[1-3]_auto_channels_temp	RO	Temperature zone to temperature input | 
 | 242 | 					mapping. This attribute is a bitfield | 
 | 243 | 					and supports the following values: | 
 | 244 | 						1: temp1 | 
 | 245 | 						2: temp2 | 
 | 246 | 						4: temp3 | 
 | 247 | zone[1-3]_auto_point1_temp_hyst	RW	Auto PWM temp point1 hysteresis. The | 
 | 248 | 					output of the corresponding PWM is set | 
 | 249 | 					to the pwm_auto_min value if the temp | 
 | 250 | 					falls below the auto_point1_temp_hyst | 
 | 251 | 					value. | 
 | 252 | zone[1-3]_auto_point[1-3]_temp	RW	Auto PWM temp points. Auto_point1 is | 
 | 253 | 					the low-speed temp, auto_point2 is the | 
 | 254 | 					full-speed temp, and auto_point3 is the | 
 | 255 | 					temp at which all PWM outputs are set | 
 | 256 | 					to full-speed (100% duty-cycle). | 
 | 257 |  | 
 | 258 | fan[1-6]_input			RO	Measured fan speed in RPM. | 
 | 259 | fan[1-6]_min			RW	Low limit for fan input. | 
 | 260 | fan[1-6]_alarm			RO	Alarm for fan input. Returns 1 if fan | 
 | 261 | 					input is or went below the associated | 
 | 262 | 					min value, 0 otherwise. | 
 | 263 | fan[1-4]_type			RW	Type of attached fan. Expressed in | 
 | 264 | 					number of pulses per revolution that | 
 | 265 | 					the fan generates. Supported values are | 
 | 266 | 					1, 2, and 4. | 
 | 267 | fan[5-6]_max			RW	Max attainable RPM at 100% duty-cycle. | 
 | 268 | 					Required for chip to adjust the | 
 | 269 | 					sampling rate accordingly. | 
 | 270 |  | 
 | 271 | pmw[1-3,5-6]			RO/RW	Duty-cycle of PWM output. Supported | 
 | 272 | 					values are 0-255 (0%-100%). Only | 
 | 273 | 					writeable if the associated PWM is in | 
 | 274 | 					manual mode. | 
 | 275 | pwm[1-3]_enable			RW	Enable of PWM outputs 1-3. Supported | 
 | 276 | 					values are: | 
 | 277 | 						 0: turned off (output @ 100%) | 
 | 278 | 						 1: manual mode | 
 | 279 | 						 2: automatic mode | 
 | 280 | pwm[5-6]_enable			RO	Enable of PWM outputs 5-6. Always | 
 | 281 | 					returns 1 since these 2 outputs are | 
 | 282 | 					hard-wired to manual mode. | 
 | 283 | pmw[1-3,5-6]_freq		RW	Frequency of PWM output. Supported | 
 | 284 | 					values are in the range 11Hz-30000Hz | 
 | 285 | 					(default is 25000Hz). | 
 | 286 | pmw[1-3]_ramp_rate		RW	Ramp rate of PWM output. Determines how | 
 | 287 | 					fast the PWM duty-cycle will change | 
 | 288 | 					when the PWM is in automatic mode. | 
 | 289 | 					Expressed in ms per PWM step. Supported | 
 | 290 | 					values are in the range 0ms-206ms | 
 | 291 | 					(default is 0, which means the duty- | 
 | 292 | 					cycle changes instantly). | 
 | 293 | pwm[1-3]_auto_channels_zone	RW	PWM output to temperature zone mapping. | 
 | 294 | 					This attribute is a bitfield and | 
 | 295 | 					supports the following values: | 
 | 296 | 						1: zone1 | 
 | 297 | 						2: zone2 | 
 | 298 | 						4: zone3 | 
 | 299 | 						6: highest of zone[2-3] | 
 | 300 | 						7: highest of zone[1-3] | 
 | 301 | pwm[1-3]_auto_pwm_min		RW	Auto PWM min pwm. Minimum PWM duty- | 
 | 302 | 					cycle. Supported values are 0 or | 
 | 303 | 					auto_point1_pwm. | 
 | 304 | pwm[1-3]_auto_point1_pwm	RW	Auto PWM pwm point. Auto_point1 is the | 
 | 305 | 					low-speed duty-cycle. | 
 | 306 | pwm[1-3]_auto_point2_pwm	RO	Auto PWM pwm point. Auto_point2 is the | 
 | 307 | 					full-speed duty-cycle which is hard- | 
 | 308 | 					wired to 255 (100% duty-cycle). | 
| Juerg Haefliger | ea69443 | 2010-05-27 19:59:01 +0200 | [diff] [blame] | 309 |  | 
 | 310 | Chip Differences | 
 | 311 | ---------------- | 
 | 312 |  | 
 | 313 | Feature			dme1737	sch311x	sch5027	sch5127 | 
 | 314 | ------------------------------------------------------- | 
 | 315 | temp[1-3]_offset	yes	yes | 
 | 316 | vid			yes | 
 | 317 | zone3			yes	yes	yes | 
 | 318 | zone[1-3]_hyst		yes	yes | 
 | 319 | pwm min/off		yes	yes | 
 | 320 | fan3			opt	yes	opt	yes | 
 | 321 | pwm3			opt	yes	opt	yes | 
 | 322 | fan4			opt		opt | 
 | 323 | fan5			opt		opt | 
 | 324 | pwm5			opt		opt | 
 | 325 | fan6			opt		opt | 
 | 326 | pwm6			opt		opt |