hwmon: (it87) Support for 16-bit fan reading in it8705 >= rev 0x03
Andrew Paprocki [Wed, 6 Aug 2008 20:41:06 +0000 (22:41 +0200)]
The it8705 chip supports 16-bit fan tachometers in revisions at least
>= 0x03 (Version G). This patch enables 16-bit fan readings on all
revisions >= 0x03 just like the it8712, it8716, and it8718 chips.

Signed-off-by: Andrew Paprocki <andrew@ishiboo.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>

Documentation/hwmon/it87
drivers/hwmon/it87.c

index d931525..3496b70 100644 (file)
@@ -6,7 +6,7 @@ Supported chips:
     Prefix: 'it87'
     Addresses scanned: from Super I/O config space (8 I/O ports)
     Datasheet: Publicly available at the ITE website
-               http://www.ite.com.tw/
+               http://www.ite.com.tw/product_info/file/pc/IT8705F_V.0.4.1.pdf
   * IT8712F
     Prefix: 'it8712'
     Addresses scanned: from Super I/O config space (8 I/O ports)
@@ -97,8 +97,8 @@ The IT8716F, IT8718F and later IT8712F revisions have support for
 The IT8716F and IT8718F, and late IT8712F and IT8705F also have optional
 16-bit tachometer counters for fans 1 to 3. This is better (no more fan
 clock divider mess) but not compatible with the older chips and
-revisions. For now, the driver only uses the 16-bit mode on the
-late IT8712F, IT8716F and IT8718F.
+revisions. The 16-bit tachometer mode is enabled by the driver when one
+of the above chips is detected.
 
 The IT8726F is just bit enhanced IT8716F with additional hardware
 for AMD power sequencing. Therefore the chip will appear as IT8716F
index 2a36568..30cdb09 100644 (file)
@@ -272,9 +272,11 @@ struct it87_data {
 
 static inline int has_16bit_fans(const struct it87_data *data)
 {
-       /* IT8712F Datasheet 0.9.1, section 8.3.5 indicates 7h == Version I.
-          This is the first revision with 16bit tachometer support. */
-       return (data->type == it8712 && data->revision >= 0x07)
+       /* IT8705F Datasheet 0.4.1, 3h == Version G.
+          IT8712F Datasheet 0.9.1, section 8.3.5 indicates 7h == Version I.
+          These are the first revisions with 16bit tachometer support. */
+       return (data->type == it87 && data->revision >= 0x03)
+           || (data->type == it8712 && data->revision >= 0x07)
            || data->type == it8716
            || data->type == it8718;
 }
@@ -1370,10 +1372,13 @@ static void __devinit it87_init_device(struct platform_device *pdev)
                        it87_write_value(data, IT87_REG_FAN_16BIT,
                                         tmp | 0x07);
                }
-               if (tmp & (1 << 4))
-                       data->has_fan |= (1 << 3);      /* fan4 enabled */
-               if (tmp & (1 << 5))
-                       data->has_fan |= (1 << 4);      /* fan5 enabled */
+               /* IT8705F only supports three fans. */
+               if (data->type != it87) {
+                       if (tmp & (1 << 4))
+                               data->has_fan |= (1 << 3); /* fan4 enabled */
+                       if (tmp & (1 << 5))
+                               data->has_fan |= (1 << 4); /* fan5 enabled */
+               }
        }
 
        /* Set current fan mode registers and the default settings for the