diff options
-rw-r--r-- | Documentation/hwmon/it87 | 16 | ||||
-rw-r--r-- | drivers/hwmon/Kconfig | 3 | ||||
-rw-r--r-- | drivers/hwmon/it87.c | 39 |
3 files changed, 49 insertions, 9 deletions
diff --git a/Documentation/hwmon/it87 b/Documentation/hwmon/it87 index 8386aadc0a82..c263740f0cba 100644 --- a/Documentation/hwmon/it87 +++ b/Documentation/hwmon/it87 | |||
@@ -30,6 +30,14 @@ Supported chips: | |||
30 | Prefix: 'it8728' | 30 | Prefix: 'it8728' |
31 | Addresses scanned: from Super I/O config space (8 I/O ports) | 31 | Addresses scanned: from Super I/O config space (8 I/O ports) |
32 | Datasheet: Not publicly available | 32 | Datasheet: Not publicly available |
33 | * IT8771E | ||
34 | Prefix: 'it8771' | ||
35 | Addresses scanned: from Super I/O config space (8 I/O ports) | ||
36 | Datasheet: Not publicly available | ||
37 | * IT8772E | ||
38 | Prefix: 'it8772' | ||
39 | Addresses scanned: from Super I/O config space (8 I/O ports) | ||
40 | Datasheet: Not publicly available | ||
33 | * IT8782F | 41 | * IT8782F |
34 | Prefix: 'it8782' | 42 | Prefix: 'it8782' |
35 | Addresses scanned: from Super I/O config space (8 I/O ports) | 43 | Addresses scanned: from Super I/O config space (8 I/O ports) |
@@ -83,8 +91,8 @@ Description | |||
83 | ----------- | 91 | ----------- |
84 | 92 | ||
85 | This driver implements support for the IT8705F, IT8712F, IT8716F, | 93 | This driver implements support for the IT8705F, IT8712F, IT8716F, |
86 | IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8781F, IT8782F, | 94 | IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8771E, IT8772E, |
87 | IT8783E/F, and SiS950 chips. | 95 | IT8782F, IT8783E/F, and SiS950 chips. |
88 | 96 | ||
89 | These chips are 'Super I/O chips', supporting floppy disks, infrared ports, | 97 | These chips are 'Super I/O chips', supporting floppy disks, infrared ports, |
90 | joysticks and other miscellaneous stuff. For hardware monitoring, they | 98 | joysticks and other miscellaneous stuff. For hardware monitoring, they |
@@ -118,8 +126,8 @@ The IT8726F is just bit enhanced IT8716F with additional hardware | |||
118 | for AMD power sequencing. Therefore the chip will appear as IT8716F | 126 | for AMD power sequencing. Therefore the chip will appear as IT8716F |
119 | to userspace applications. | 127 | to userspace applications. |
120 | 128 | ||
121 | The IT8728F is considered compatible with the IT8721F, until a datasheet | 129 | The IT8728F, IT8771E, and IT8772E are considered compatible with the IT8721F, |
122 | becomes available (hopefully.) | 130 | until a datasheet becomes available (hopefully.) |
123 | 131 | ||
124 | Temperatures are measured in degrees Celsius. An alarm is triggered once | 132 | Temperatures are measured in degrees Celsius. An alarm is triggered once |
125 | when the Overtemperature Shutdown limit is crossed. | 133 | when the Overtemperature Shutdown limit is crossed. |
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index ef5757265f78..3588b2a0915c 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
@@ -506,7 +506,8 @@ config SENSORS_IT87 | |||
506 | help | 506 | help |
507 | If you say yes here you get support for ITE IT8705F, IT8712F, | 507 | If you say yes here you get support for ITE IT8705F, IT8712F, |
508 | IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, | 508 | IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, |
509 | IT8782F, and IT8783E/F sensor chips, and the SiS950 clone. | 509 | IT8771E, IT8772E, IT8782F, and IT8783E/F sensor chips, and the |
510 | SiS950 clone. | ||
510 | 511 | ||
511 | This driver can also be built as a module. If so, the module | 512 | This driver can also be built as a module. If so, the module |
512 | will be called it87. | 513 | will be called it87. |
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 29632e849285..37fc980fde24 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -19,6 +19,8 @@ | |||
19 | * IT8726F Super I/O chip w/LPC interface | 19 | * IT8726F Super I/O chip w/LPC interface |
20 | * IT8728F Super I/O chip w/LPC interface | 20 | * IT8728F Super I/O chip w/LPC interface |
21 | * IT8758E Super I/O chip w/LPC interface | 21 | * IT8758E Super I/O chip w/LPC interface |
22 | * IT8771E Super I/O chip w/LPC interface | ||
23 | * IT8772E Super I/O chip w/LPC interface | ||
22 | * IT8782F Super I/O chip w/LPC interface | 24 | * IT8782F Super I/O chip w/LPC interface |
23 | * IT8783E/F Super I/O chip w/LPC interface | 25 | * IT8783E/F Super I/O chip w/LPC interface |
24 | * Sis950 A clone of the IT8705F | 26 | * Sis950 A clone of the IT8705F |
@@ -61,8 +63,8 @@ | |||
61 | 63 | ||
62 | #define DRVNAME "it87" | 64 | #define DRVNAME "it87" |
63 | 65 | ||
64 | enum chips { it87, it8712, it8716, it8718, it8720, it8721, it8728, it8782, | 66 | enum chips { it87, it8712, it8716, it8718, it8720, it8721, it8728, it8771, |
65 | it8783 }; | 67 | it8772, it8782, it8783 }; |
66 | 68 | ||
67 | static unsigned short force_id; | 69 | static unsigned short force_id; |
68 | module_param(force_id, ushort, 0); | 70 | module_param(force_id, ushort, 0); |
@@ -140,6 +142,8 @@ static inline void superio_exit(void) | |||
140 | #define IT8721F_DEVID 0x8721 | 142 | #define IT8721F_DEVID 0x8721 |
141 | #define IT8726F_DEVID 0x8726 | 143 | #define IT8726F_DEVID 0x8726 |
142 | #define IT8728F_DEVID 0x8728 | 144 | #define IT8728F_DEVID 0x8728 |
145 | #define IT8771E_DEVID 0x8771 | ||
146 | #define IT8772E_DEVID 0x8772 | ||
143 | #define IT8782F_DEVID 0x8782 | 147 | #define IT8782F_DEVID 0x8782 |
144 | #define IT8783E_DEVID 0x8783 | 148 | #define IT8783E_DEVID 0x8783 |
145 | #define IT87_ACT_REG 0x30 | 149 | #define IT87_ACT_REG 0x30 |
@@ -281,6 +285,24 @@ static const struct it87_devices it87_devices[] = { | |||
281 | | FEAT_TEMP_OFFSET | FEAT_TEMP_PECI, | 285 | | FEAT_TEMP_OFFSET | FEAT_TEMP_PECI, |
282 | .peci_mask = 0x07, | 286 | .peci_mask = 0x07, |
283 | }, | 287 | }, |
288 | [it8771] = { | ||
289 | .name = "it8771", | ||
290 | .features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS | ||
291 | | FEAT_TEMP_OFFSET | FEAT_TEMP_PECI, | ||
292 | /* PECI: guesswork */ | ||
293 | /* 12mV ADC (OHM) */ | ||
294 | /* 16 bit fans (OHM) */ | ||
295 | .peci_mask = 0x07, | ||
296 | }, | ||
297 | [it8772] = { | ||
298 | .name = "it8772", | ||
299 | .features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS | ||
300 | | FEAT_TEMP_OFFSET | FEAT_TEMP_PECI, | ||
301 | /* PECI (coreboot) */ | ||
302 | /* 12mV ADC (HWSensors4, OHM) */ | ||
303 | /* 16 bit fans (HWSensors4, OHM) */ | ||
304 | .peci_mask = 0x07, | ||
305 | }, | ||
284 | [it8782] = { | 306 | [it8782] = { |
285 | .name = "it8782", | 307 | .name = "it8782", |
286 | .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | 308 | .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET |
@@ -1708,6 +1730,12 @@ static int __init it87_find(unsigned short *address, | |||
1708 | case IT8728F_DEVID: | 1730 | case IT8728F_DEVID: |
1709 | sio_data->type = it8728; | 1731 | sio_data->type = it8728; |
1710 | break; | 1732 | break; |
1733 | case IT8771E_DEVID: | ||
1734 | sio_data->type = it8771; | ||
1735 | break; | ||
1736 | case IT8772E_DEVID: | ||
1737 | sio_data->type = it8772; | ||
1738 | break; | ||
1711 | case IT8782F_DEVID: | 1739 | case IT8782F_DEVID: |
1712 | sio_data->type = it8782; | 1740 | sio_data->type = it8782; |
1713 | break; | 1741 | break; |
@@ -1825,10 +1853,11 @@ static int __init it87_find(unsigned short *address, | |||
1825 | 1853 | ||
1826 | reg = superio_inb(IT87_SIO_GPIO3_REG); | 1854 | reg = superio_inb(IT87_SIO_GPIO3_REG); |
1827 | if (sio_data->type == it8721 || sio_data->type == it8728 || | 1855 | if (sio_data->type == it8721 || sio_data->type == it8728 || |
1856 | sio_data->type == it8771 || sio_data->type == it8772 || | ||
1828 | sio_data->type == it8782) { | 1857 | sio_data->type == it8782) { |
1829 | /* | 1858 | /* |
1830 | * IT8721F/IT8758E, and IT8782F don't have VID pins | 1859 | * IT8721F/IT8758E, and IT8782F don't have VID pins |
1831 | * at all, not sure about the IT8728F. | 1860 | * at all, not sure about the IT8728F and compatibles. |
1832 | */ | 1861 | */ |
1833 | sio_data->skip_vid = 1; | 1862 | sio_data->skip_vid = 1; |
1834 | } else { | 1863 | } else { |
@@ -1882,7 +1911,9 @@ static int __init it87_find(unsigned short *address, | |||
1882 | if (reg & (1 << 0)) | 1911 | if (reg & (1 << 0)) |
1883 | sio_data->internal |= (1 << 0); | 1912 | sio_data->internal |= (1 << 0); |
1884 | if ((reg & (1 << 1)) || sio_data->type == it8721 || | 1913 | if ((reg & (1 << 1)) || sio_data->type == it8721 || |
1885 | sio_data->type == it8728) | 1914 | sio_data->type == it8728 || |
1915 | sio_data->type == it8771 || | ||
1916 | sio_data->type == it8772) | ||
1886 | sio_data->internal |= (1 << 1); | 1917 | sio_data->internal |= (1 << 1); |
1887 | 1918 | ||
1888 | /* | 1919 | /* |