diff options
| author | Juerg Haefliger <juergh@gmail.com> | 2010-05-27 13:59:01 -0400 |
|---|---|---|
| committer | Jean Delvare <khali@linux-fr.org> | 2010-05-27 13:59:01 -0400 |
| commit | ea694431f9c862bd409c90ba1cb3bdc6fdde8635 (patch) | |
| tree | 702ee926abff58b9896220ce02e4592b13978005 | |
| parent | 38806bda6b7c8473c47a967a514260c1a1c32c2e (diff) | |
hwmon: (dme1737) Add SCH5127 support
Add support for the hardware monitoring capabilities of the SCH5127
chip to the dme1737 driver.
Signed-off-by: Juerg Haefliger <juergh@gmail.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Tested-by: Jeff Rickman <jrickman@myamigos.us>
| -rw-r--r-- | Documentation/hwmon/dme1737 | 51 | ||||
| -rw-r--r-- | drivers/hwmon/dme1737.c | 328 |
2 files changed, 266 insertions, 113 deletions
diff --git a/Documentation/hwmon/dme1737 b/Documentation/hwmon/dme1737 index 001d2e70bc11..fc5df7654d63 100644 --- a/Documentation/hwmon/dme1737 +++ b/Documentation/hwmon/dme1737 | |||
| @@ -9,11 +9,15 @@ Supported chips: | |||
| 9 | * SMSC SCH3112, SCH3114, SCH3116 | 9 | * SMSC SCH3112, SCH3114, SCH3116 |
| 10 | Prefix: 'sch311x' | 10 | Prefix: 'sch311x' |
| 11 | Addresses scanned: none, address read from Super-I/O config space | 11 | Addresses scanned: none, address read from Super-I/O config space |
| 12 | Datasheet: http://www.nuhorizons.com/FeaturedProducts/Volume1/SMSC/311x.pdf | 12 | Datasheet: Available on the Internet |
| 13 | * SMSC SCH5027 | 13 | * SMSC SCH5027 |
| 14 | Prefix: 'sch5027' | 14 | Prefix: 'sch5027' |
| 15 | Addresses scanned: I2C 0x2c, 0x2d, 0x2e | 15 | Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
| 16 | Datasheet: Provided by SMSC upon request and under NDA | 16 | Datasheet: Provided by SMSC upon request and under NDA |
| 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 | ||
| 17 | 21 | ||
| 18 | Authors: | 22 | Authors: |
| 19 | Juerg Haefliger <juergh@gmail.com> | 23 | Juerg Haefliger <juergh@gmail.com> |
| @@ -36,8 +40,8 @@ Description | |||
| 36 | ----------- | 40 | ----------- |
| 37 | 41 | ||
| 38 | This driver implements support for the hardware monitoring capabilities of the | 42 | This driver implements support for the hardware monitoring capabilities of the |
| 39 | SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, and SMSC | 43 | SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, SCH311x, |
| 40 | SCH311x Super-I/O chips. These chips feature monitoring of 3 temp sensors | 44 | and SCH5127 Super-I/O chips. These chips feature monitoring of 3 temp sensors |
| 41 | temp[1-3] (2 remote diodes and 1 internal), 7 voltages in[0-6] (6 external and | 45 | temp[1-3] (2 remote diodes and 1 internal), 7 voltages in[0-6] (6 external and |
| 42 | 1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement | 46 | 1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement |
| 43 | up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and | 47 | up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and |
| @@ -48,14 +52,14 @@ Fan[3-6] and pwm[3,5-6] are optional features and their availability depends on | |||
| 48 | the configuration of the chip. The driver will detect which features are | 52 | the configuration of the chip. The driver will detect which features are |
| 49 | present during initialization and create the sysfs attributes accordingly. | 53 | present during initialization and create the sysfs attributes accordingly. |
| 50 | 54 | ||
| 51 | For the SCH311x, fan[1-3] and pwm[1-3] are always present and fan[4-6] and | 55 | For the SCH311x and SCH5127, fan[1-3] and pwm[1-3] are always present and |
| 52 | pwm[5-6] don't exist. | 56 | fan[4-6] and pwm[5-6] don't exist. |
| 53 | 57 | ||
| 54 | The hardware monitoring features of the DME1737, A8000, and SCH5027 are only | 58 | The hardware monitoring features of the DME1737, A8000, and SCH5027 are only |
| 55 | accessible via SMBus, while the SCH311x only provides access via the ISA bus. | 59 | accessible via SMBus, while the SCH311x and SCH5127 only provide access via |
| 56 | The driver will therefore register itself as an I2C client driver if it detects | 60 | the ISA bus. The driver will therefore register itself as an I2C client driver |
| 57 | a DME1737, A8000, or SCH5027 and as a platform driver if it detects a SCH311x | 61 | if it detects a DME1737, A8000, or SCH5027 and as a platform driver if it |
| 58 | chip. | 62 | detects a SCH311x or SCH5127 chip. |
| 59 | 63 | ||
| 60 | 64 | ||
| 61 | Voltage Monitoring | 65 | Voltage Monitoring |
| @@ -76,7 +80,7 @@ DME1737, A8000: | |||
| 76 | in6: Vbat (+3.0V) 0V - 4.38V | 80 | in6: Vbat (+3.0V) 0V - 4.38V |
| 77 | 81 | ||
| 78 | SCH311x: | 82 | SCH311x: |
| 79 | in0: +2.5V 0V - 6.64V | 83 | in0: +2.5V 0V - 3.32V |
| 80 | in1: Vccp (processor core) 0V - 2V | 84 | in1: Vccp (processor core) 0V - 2V |
| 81 | in2: VCC (internal +3.3V) 0V - 4.38V | 85 | in2: VCC (internal +3.3V) 0V - 4.38V |
| 82 | in3: +5V 0V - 6.64V | 86 | in3: +5V 0V - 6.64V |
| @@ -93,6 +97,15 @@ SCH5027: | |||
| 93 | in5: VTR (+3.3V standby) 0V - 4.38V | 97 | in5: VTR (+3.3V standby) 0V - 4.38V |
| 94 | in6: Vbat (+3.0V) 0V - 4.38V | 98 | in6: Vbat (+3.0V) 0V - 4.38V |
| 95 | 99 | ||
| 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 | |||
| 96 | Each voltage input has associated min and max limits which trigger an alarm | 109 | Each voltage input has associated min and max limits which trigger an alarm |
| 97 | when crossed. | 110 | when crossed. |
| 98 | 111 | ||
| @@ -293,3 +306,21 @@ pwm[1-3]_auto_point1_pwm RW Auto PWM pwm point. Auto_point1 is the | |||
| 293 | pwm[1-3]_auto_point2_pwm RO Auto PWM pwm point. Auto_point2 is the | 306 | pwm[1-3]_auto_point2_pwm RO Auto PWM pwm point. Auto_point2 is the |
| 294 | full-speed duty-cycle which is hard- | 307 | full-speed duty-cycle which is hard- |
| 295 | wired to 255 (100% duty-cycle). | 308 | wired to 255 (100% duty-cycle). |
| 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 | ||
diff --git a/drivers/hwmon/dme1737.c b/drivers/hwmon/dme1737.c index 823dd28a902c..980c17d5eeae 100644 --- a/drivers/hwmon/dme1737.c +++ b/drivers/hwmon/dme1737.c | |||
| @@ -1,12 +1,14 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * dme1737.c - Driver for the SMSC DME1737, Asus A8000, SMSC SCH311x and | 2 | * dme1737.c - Driver for the SMSC DME1737, Asus A8000, SMSC SCH311x, SCH5027, |
| 3 | * SCH5027 Super-I/O chips integrated hardware monitoring features. | 3 | * and SCH5127 Super-I/O chips integrated hardware monitoring |
| 4 | * Copyright (c) 2007, 2008 Juerg Haefliger <juergh@gmail.com> | 4 | * features. |
| 5 | * Copyright (c) 2007, 2008, 2009, 2010 Juerg Haefliger <juergh@gmail.com> | ||
| 5 | * | 6 | * |
| 6 | * This driver is an I2C/ISA hybrid, meaning that it uses the I2C bus to access | 7 | * This driver is an I2C/ISA hybrid, meaning that it uses the I2C bus to access |
| 7 | * the chip registers if a DME1737, A8000, or SCH5027 is found and the ISA bus | 8 | * the chip registers if a DME1737, A8000, or SCH5027 is found and the ISA bus |
| 8 | * if a SCH311x chip is found. Both types of chips have very similar hardware | 9 | * if a SCH311x or SCH5127 chip is found. Both types of chips have very |
| 9 | * monitoring capabilities but differ in the way they can be accessed. | 10 | * similar hardware monitoring capabilities but differ in the way they can be |
| 11 | * accessed. | ||
| 10 | * | 12 | * |
| 11 | * This program is free software; you can redistribute it and/or modify | 13 | * This program is free software; you can redistribute it and/or modify |
| 12 | * it under the terms of the GNU General Public License as published by | 14 | * it under the terms of the GNU General Public License as published by |
| @@ -57,7 +59,7 @@ MODULE_PARM_DESC(probe_all_addr, "Include probing of non-standard LPC " | |||
| 57 | /* Addresses to scan */ | 59 | /* Addresses to scan */ |
| 58 | static const unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END}; | 60 | static const unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END}; |
| 59 | 61 | ||
| 60 | enum chips { dme1737, sch5027, sch311x }; | 62 | enum chips { dme1737, sch5027, sch311x, sch5127 }; |
| 61 | 63 | ||
| 62 | /* --------------------------------------------------------------------- | 64 | /* --------------------------------------------------------------------- |
| 63 | * Registers | 65 | * Registers |
| @@ -164,10 +166,29 @@ static const u8 DME1737_BIT_ALARM_FAN[] = {10, 11, 12, 13, 22, 23}; | |||
| 164 | #define DME1737_VERSTEP_MASK 0xf8 | 166 | #define DME1737_VERSTEP_MASK 0xf8 |
| 165 | #define SCH311X_DEVICE 0x8c | 167 | #define SCH311X_DEVICE 0x8c |
| 166 | #define SCH5027_VERSTEP 0x69 | 168 | #define SCH5027_VERSTEP 0x69 |
| 169 | #define SCH5127_DEVICE 0x8e | ||
| 170 | |||
| 171 | /* Device ID values (global configuration register index 0x20) */ | ||
| 172 | #define DME1737_ID_1 0x77 | ||
| 173 | #define DME1737_ID_2 0x78 | ||
| 174 | #define SCH3112_ID 0x7c | ||
| 175 | #define SCH3114_ID 0x7d | ||
| 176 | #define SCH3116_ID 0x7f | ||
| 177 | #define SCH5027_ID 0x89 | ||
| 178 | #define SCH5127_ID 0x86 | ||
| 167 | 179 | ||
| 168 | /* Length of ISA address segment */ | 180 | /* Length of ISA address segment */ |
| 169 | #define DME1737_EXTENT 2 | 181 | #define DME1737_EXTENT 2 |
| 170 | 182 | ||
| 183 | /* chip-dependent features */ | ||
| 184 | #define HAS_TEMP_OFFSET (1 << 0) /* bit 0 */ | ||
| 185 | #define HAS_VID (1 << 1) /* bit 1 */ | ||
| 186 | #define HAS_ZONE3 (1 << 2) /* bit 2 */ | ||
| 187 | #define HAS_ZONE_HYST (1 << 3) /* bit 3 */ | ||
| 188 | #define HAS_PWM_MIN (1 << 4) /* bit 4 */ | ||
| 189 | #define HAS_FAN(ix) (1 << ((ix) + 5)) /* bits 5-10 */ | ||
| 190 | #define HAS_PWM(ix) (1 << ((ix) + 11)) /* bits 11-16 */ | ||
| 191 | |||
| 171 | /* --------------------------------------------------------------------- | 192 | /* --------------------------------------------------------------------- |
| 172 | * Data structures and manipulation thereof | 193 | * Data structures and manipulation thereof |
| 173 | * --------------------------------------------------------------------- */ | 194 | * --------------------------------------------------------------------- */ |
| @@ -187,8 +208,7 @@ struct dme1737_data { | |||
| 187 | 208 | ||
| 188 | u8 vid; | 209 | |
