diff options
author | Jean-Marc Spaggiari <jean-marc@spaggiari.org> | 2009-01-07 10:37:32 -0500 |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2009-01-07 10:37:32 -0500 |
commit | b4da93e4b0ffc261c3530fe938aefd52854aa84c (patch) | |
tree | 2cc727f3d7050187bf4e83f1eee8136d1296f8b8 | |
parent | 3aed198c35567e5a721f52c0bde23167867e6af6 (diff) |
hwmon: (it87) Add support for the ITE IT8720F
Allow it87.c to handle IT8720 chipset like IT8718 in order to
retrieve voltage, temperatures and fans speed from sensors
tools. Also updating the related documentation.
Signed-off-by: Jean-Marc Spaggiari <jean-marc@spaggiari.org>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
-rw-r--r-- | Documentation/hwmon/it87 | 20 | ||||
-rw-r--r-- | drivers/hwmon/Kconfig | 3 | ||||
-rw-r--r-- | drivers/hwmon/it87.c | 30 |
3 files changed, 35 insertions, 18 deletions
diff --git a/Documentation/hwmon/it87 b/Documentation/hwmon/it87 index 042c0415140b..659315d98e00 100644 --- a/Documentation/hwmon/it87 +++ b/Documentation/hwmon/it87 | |||
@@ -26,6 +26,10 @@ Supported chips: | |||
26 | Datasheet: Publicly available at the ITE website | 26 | Datasheet: Publicly available at the ITE website |
27 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0.2.zip | 27 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0.2.zip |
28 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0%203_(for%20C%20version).zip | 28 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0%203_(for%20C%20version).zip |
29 | * IT8720F | ||
30 | Prefix: 'it8720' | ||
31 | Addresses scanned: from Super I/O config space (8 I/O ports) | ||
32 | Datasheet: Not yet publicly available. | ||
29 | * SiS950 [clone of IT8705F] | 33 | * SiS950 [clone of IT8705F] |
30 | Prefix: 'it87' | 34 | Prefix: 'it87' |
31 | Addresses scanned: from Super I/O config space (8 I/O ports) | 35 | Addresses scanned: from Super I/O config space (8 I/O ports) |
@@ -71,7 +75,7 @@ Description | |||
71 | ----------- | 75 | ----------- |
72 | 76 | ||
73 | This driver implements support for the IT8705F, IT8712F, IT8716F, | 77 | This driver implements support for the IT8705F, IT8712F, IT8716F, |
74 | IT8718F, IT8726F and SiS950 chips. | 78 | IT8718F, IT8720F, IT8726F and SiS950 chips. |
75 | 79 | ||
76 | These chips are 'Super I/O chips', supporting floppy disks, infrared ports, | 80 | These chips are 'Super I/O chips', supporting floppy disks, infrared ports, |
77 | joysticks and other miscellaneous stuff. For hardware monitoring, they | 81 | joysticks and other miscellaneous stuff. For hardware monitoring, they |
@@ -84,19 +88,19 @@ the IT8716F and late IT8712F have 6. They are shared with other functions | |||
84 | though, so the functionality may not be available on a given system. | 88 | though, so the functionality may not be available on a given system. |
85 | The driver dumbly assume it is there. | 89 | The driver dumbly assume it is there. |
86 | 90 | ||
87 | The IT8718F also features VID inputs (up to 8 pins) but the value is | 91 | The IT8718F and IT8720F also features VID inputs (up to 8 pins) but the value |
88 | stored in the Super-I/O configuration space. Due to technical limitations, | 92 | is stored in the Super-I/O configuration space. Due to technical limitations, |
89 | this value can currently only be read once at initialization time, so | 93 | this value can currently only be read once at initialization time, so |
90 | the driver won't notice and report changes in the VID value. The two | 94 | the driver won't notice and report changes in the VID value. The two |
91 | upper VID bits share their pins with voltage inputs (in5 and in6) so you | 95 | upper VID bits share their pins with voltage inputs (in5 and in6) so you |
92 | can't have both on a given board. | 96 | can't have both on a given board. |
93 | 97 | ||
94 | The IT8716F, IT8718F and later IT8712F revisions have support for | 98 | The IT8716F, IT8718F, IT8720F and later IT8712F revisions have support for |
95 | 2 additional fans. The additional fans are supported by the driver. | 99 | 2 additional fans. The additional fans are supported by the driver. |
96 | 100 | ||
97 | The IT8716F and IT8718F, and late IT8712F and IT8705F also have optional | 101 | The IT8716F, IT8718F and IT8720F, and late IT8712F and IT8705F also have |
98 | 16-bit tachometer counters for fans 1 to 3. This is better (no more fan | 102 | optional 16-bit tachometer counters for fans 1 to 3. This is better (no more |
99 | clock divider mess) but not compatible with the older chips and | 103 | fan clock divider mess) but not compatible with the older chips and |
100 | revisions. The 16-bit tachometer mode is enabled by the driver when one | 104 | revisions. The 16-bit tachometer mode is enabled by the driver when one |
101 | of the above chips is detected. | 105 | of the above chips is detected. |
102 | 106 | ||
@@ -122,7 +126,7 @@ zero'; this is important for negative voltage measurements. All voltage | |||
122 | inputs can measure voltages between 0 and 4.08 volts, with a resolution of | 126 | inputs can measure voltages between 0 and 4.08 volts, with a resolution of |
123 | 0.016 volt. The battery voltage in8 does not have limit registers. | 127 | 0.016 volt. The battery voltage in8 does not have limit registers. |
124 | 128 | ||
125 | The VID lines (IT8712F/IT8716F/IT8718F) encode the core voltage value: | 129 | The VID lines (IT8712F/IT8716F/IT8718F/IT8720F) encode the core voltage value: |
126 | the voltage level your processor should work with. This is hardcoded by | 130 | the voltage level your processor should work with. This is hardcoded by |
127 | the mainboard and/or processor itself. It is a value in volts. | 131 | the mainboard and/or processor itself. It is a value in volts. |
128 | 132 | ||
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 1ef1205b4e8c..aba01b4ceca4 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
@@ -400,7 +400,8 @@ config SENSORS_IT87 | |||
400 | select HWMON_VID | 400 | select HWMON_VID |
401 | help | 401 | help |
402 | If you say yes here you get support for ITE IT8705F, IT8712F, | 402 | If you say yes here you get support for ITE IT8705F, IT8712F, |
403 | IT8716F, IT8718F and IT8726F sensor chips, and the SiS960 clone. | 403 | IT8716F, IT8718F, IT8720F and IT8726F sensor chips, and the |
404 | SiS960 clone. | ||
404 | 405 | ||
405 | This driver can also be built as a module. If so, the module | 406 | This driver can also be built as a module. If so, the module |
406 | will be called it87. | 407 | will be called it87. |
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index b74c95735f95..0e0d692f0c9e 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -14,6 +14,7 @@ | |||
14 | IT8712F Super I/O chip w/LPC interface | 14 | IT8712F Super I/O chip w/LPC interface |
15 | IT8716F Super I/O chip w/LPC interface | 15 | IT8716F Super I/O chip w/LPC interface |
16 | IT8718F Super I/O chip w/LPC interface | 16 | IT8718F Super I/O chip w/LPC interface |
17 | IT8720F Super I/O chip w/LPC interface | ||
17 | IT8726F Super I/O chip w/LPC interface | 18 | IT8726F Super I/O chip w/LPC interface |
18 | Sis950 A clone of the IT8705F | 19 | Sis950 A clone of the IT8705F |
19 | 20 | ||
@@ -52,7 +53,7 @@ | |||
52 | 53 | ||
53 | #define DRVNAME "it87" | 54 | #define DRVNAME "it87" |
54 | 55 | ||
55 | enum chips { it87, it8712, it8716, it8718 }; | 56 | enum chips { it87, it8712, it8716, it8718, it8720 }; |
56 | 57 | ||
57 | static unsigned short force_id; | 58 | static unsigned short force_id; |
58 | module_param(force_id, ushort, 0); | 59 | module_param(force_id, ushort, 0); |
@@ -64,7 +65,10 @@ static struct platform_device *pdev; | |||
64 | #define DEV 0x07 /* Register: Logical device select */ | 65 | #define DEV 0x07 /* Register: Logical device select */ |
65 | #define VAL 0x2f /* The value to read/write */ | 66 | #define VAL 0x2f /* The value to read/write */ |
66 | #define PME 0x04 /* The device with the fan registers in it */ | 67 | #define PME 0x04 /* The device with the fan registers in it */ |
67 | #define GPIO 0x07 /* The device with the IT8718F VID value in it */ | 68 | |
69 | /* The device with the IT8718F/IT8720F VID value in it */ | ||
70 | #define GPIO 0x07 | ||
71 | |||
68 | #define DEVID 0x20 /* Register: Device ID */ | 72 | #define DEVID 0x20 /* Register: Device ID */ |
69 | #define DEVREV 0x22 /* Register: Device Revision */ | 73 | #define DEVREV 0x22 /* Register: Device Revision */ |
70 | 74 | ||
@@ -113,6 +117,7 @@ superio_exit(void) | |||
113 | #define IT8705F_DEVID 0x8705 | 117 | #define IT8705F_DEVID 0x8705 |
114 | #define IT8716F_DEVID 0x8716 | 118 | #define IT8716F_DEVID 0x8716 |
115 | #define IT8718F_DEVID 0x8718 | 119 | #define IT8718F_DEVID 0x8718 |
120 | #define IT8720F_DEVID 0x8720 | ||
116 | #define IT8726F_DEVID 0x8726 | 121 | #define IT8726F_DEVID 0x8726 |
117 | #define IT87_ACT_REG 0x30 | 122 | #define IT87_ACT_REG 0x30 |
118 | #define IT87_BASE_REG 0x60 | 123 | #define IT87_BASE_REG 0x60 |
@@ -150,8 +155,8 @@ static int fix_pwm_polarity; | |||
150 | #define IT87_REG_ALARM2 0x02 | 155 | #define IT87_REG_ALARM2 0x02 |
151 | #define IT87_REG_ALARM3 0x03 | 156 | #define IT87_REG_ALARM3 0x03 |
152 | 157 | ||
153 | /* The IT8718F has the VID value in a different register, in Super-I/O | 158 | /* The IT8718F and IT8720F have the VID value in a different register, in |
154 | configuration space. */ | 159 | Super-I/O configuration space. */ |
155 | #define IT87_REG_VID 0x0a | 160 | #define IT87_REG_VID 0x0a |
156 | /* The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b | 161 | /* The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b |
157 | for fan divisors. Later IT8712F revisions must use 16-bit tachometer | 162 | for fan divisors. Later IT8712F revisions must use 16-bit tachometer |
@@ -282,7 +287,8 @@ static inline int has_16bit_fans(const struct it87_data *data) | |||
282 | return (data->type == it87 && data->revision >= 0x03) | 287 | return (data->type == it87 && data->revision >= 0x03) |
283 | || (data->type == it8712 && data->revision >= 0x08) | 288 | || (data->type == it8712 && data->revision >= 0x08) |
284 | || data->type == it8716 | 289 | || data->type == it8716 |
285 | || data->type == it8718; | 290 | || data->type == it8718 |
291 | || data->type == it8720; | ||
286 | } | 292 | } |
287 | 293 | ||
288 | static int it87_probe(struct platform_device *pdev); | 294 | static int it87_probe(struct platform_device *pdev); |
@@ -992,6 +998,9 @@ static int __init it87_find(unsigned short *address, | |||
992 | case IT8718F_DEVID: | 998 | case IT8718F_DEVID: |
993 | sio_data->type = it8718; | 999 | sio_data->type = it8718; |
994 | break; | 1000 | break; |
1001 | case IT8720F_DEVID: | ||
1002 | sio_data->type = it8720; | ||
1003 | break; | ||
995 | case 0xffff: /* No device at all */ | 1004 | case 0xffff: /* No device at all */ |
996 | goto exit; | 1005 | goto exit; |
997 | default: | 1006 | default: |
@@ -1022,7 +1031,8 @@ static int __init it87_find(unsigned short *address, | |||
1022 | int reg; | 1031 | int reg; |
1023 | 1032 | ||
1024 | superio_select(GPIO); | 1033 | superio_select(GPIO); |
1025 | if (chip_type == it8718) | 1034 | if ((chip_type == it8718) || |
1035 | (chip_type == it8720)) | ||
1026 | sio_data->vid_value = superio_inb(IT87_SIO_VID_REG); | 1036 | sio_data->vid_value = superio_inb(IT87_SIO_VID_REG); |
1027 | 1037 | ||
1028 | reg = superio_inb(IT87_SIO_PINX2_REG); | 1038 | reg = superio_inb(IT87_SIO_PINX2_REG); |
@@ -1068,6 +1078,7 @@ static int __devinit it87_probe(struct platform_device *pdev) | |||
1068 | "it8712", | 1078 | "it8712", |
1069 | "it8716", | 1079 | "it8716", |
1070 | "it8718", | 1080 | "it8718", |
1081 | "it8720", | ||
1071 | }; | 1082 | }; |
1072 | 1083 | ||
1073 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | 1084 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); |
@@ -1226,7 +1237,7 @@ static int __devinit it87_probe(struct platform_device *pdev) | |||
1226 | } | 1237 | } |
1227 | 1238 | ||
1228 | if (data->type == it8712 || data->type == it8716 | 1239 | if (data->type == it8712 || data->type == it8716 |
1229 | || data->type == it8718) { | 1240 | || data->type == it8718 || data->type == it8720) { |
1230 | data->vrm = vid_which_vrm(); | 1241 | data->vrm = vid_which_vrm(); |
1231 | /* VID reading from Super-I/O config space if available */ | 1242 | /* VID reading from Super-I/O config space if available */ |
1232 | data->vid = sio_data->vid_value; | 1243 | data->vid = sio_data->vid_value; |
@@ -1513,7 +1524,8 @@ static struct it87_data *it87_update_device(struct device *dev) | |||
1513 | 1524 | ||
1514 | data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE); | 1525 | data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE); |
1515 | /* The 8705 does not have VID capability. | 1526 | /* The 8705 does not have VID capability. |
1516 | The 8718 does not use IT87_REG_VID for the same purpose. */ | 1527 | The 8718 and the 8720 don't use IT87_REG_VID for the |
1528 | same purpose. */ | ||
1517 | if (data->type == it8712 || data->type == it8716) { | 1529 | if (data->type == it8712 || data->type == it8716) { |
1518 | data->vid = it87_read_value(data, IT87_REG_VID); | 1530 | data->vid = it87_read_value(data, IT87_REG_VID); |
1519 | /* The older IT8712F revisions had only 5 VID pins, | 1531 | /* The older IT8712F revisions had only 5 VID pins, |
@@ -1608,7 +1620,7 @@ static void __exit sm_it87_exit(void) | |||
1608 | 1620 | ||
1609 | MODULE_AUTHOR("Chris Gauthron, " | 1621 | MODULE_AUTHOR("Chris Gauthron, " |
1610 | "Jean Delvare <khali@linux-fr.org>"); | 1622 | "Jean Delvare <khali@linux-fr.org>"); |
1611 | MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8726F, SiS950 driver"); | 1623 | MODULE_DESCRIPTION("IT8705F/8712F/8716F/8718F/8720F/8726F, SiS950 driver"); |
1612 | module_param(update_vbat, bool, 0); | 1624 | module_param(update_vbat, bool, 0); |
1613 | MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value"); | 1625 | MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value"); |
1614 | module_param(fix_pwm_polarity, bool, 0); | 1626 | module_param(fix_pwm_polarity, bool, 0); |