瀏覽代碼

hwmon: (it87) Support for 16-bit fan reading in it8705 >= rev 0x03

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>
Andrew Paprocki 17 年之前
父節點
當前提交
816d8c6a25
共有 2 個文件被更改,包括 15 次插入10 次删除
  1. 3 3
      Documentation/hwmon/it87
  2. 12 7
      drivers/hwmon/it87.c

+ 3 - 3
Documentation/hwmon/it87

@@ -6,7 +6,7 @@ Supported chips:
     Prefix: 'it87'
     Prefix: 'it87'
     Addresses scanned: from Super I/O config space (8 I/O ports)
     Addresses scanned: from Super I/O config space (8 I/O ports)
     Datasheet: Publicly available at the ITE website
     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
   * IT8712F
     Prefix: 'it8712'
     Prefix: 'it8712'
     Addresses scanned: from Super I/O config space (8 I/O ports)
     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
 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
 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
 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
 The IT8726F is just bit enhanced IT8716F with additional hardware
 for AMD power sequencing. Therefore the chip will appear as IT8716F
 for AMD power sequencing. Therefore the chip will appear as IT8716F

+ 12 - 7
drivers/hwmon/it87.c

@@ -272,9 +272,11 @@ struct it87_data {
 
 
 static inline int has_16bit_fans(const struct it87_data *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 == it8716
 	    || data->type == it8718;
 	    || 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,
 			it87_write_value(data, IT87_REG_FAN_16BIT,
 					 tmp | 0x07);
 					 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
 	/* Set current fan mode registers and the default settings for the