aboutsummaryrefslogtreecommitdiffstats
path: root/i2c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2005-11-29 13:30:13 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2005-11-29 13:30:13 -0800
commit63a3d8031a84a3c926149088e8b5051d5da8047e (patch)
tree2c1efdbe15abb6ec0f8dff984d50110a1d4bfa5f /i2c
parent731e918a4a85c611ca2b7bca552c5f4ae10d1f53 (diff)
downloadpatches-63a3d8031a84a3c926149088e8b5051d5da8047e.tar.gz
added i2c patch
Diffstat (limited to 'i2c')
-rw-r--r--i2c/hwmon-w83792d-fan-pins-fixes.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/i2c/hwmon-w83792d-fan-pins-fixes.patch b/i2c/hwmon-w83792d-fan-pins-fixes.patch
new file mode 100644
index 0000000000000..38f1adeeed192
--- /dev/null
+++ b/i2c/hwmon-w83792d-fan-pins-fixes.patch
@@ -0,0 +1,76 @@
+From khali@linux-fr.org Tue Nov 29 13:26:51 2005
+Date: Tue, 29 Nov 2005 22:27:14 +0100
+From: Jean Delvare <khali@linux-fr.org>
+To: Greg KH <greg@kroah.com>
+Cc: Yuan Mu <ymu@winbond.com.tw>
+Subject: [PATCH] hwmon: w83792d fix unused fan pins
+Message-Id: <20051129222714.0b53543e.khali@linux-fr.org>
+Content-Disposition: inline; filename=hwmon-w83792d-fan-pins-fixes.patch
+
+1. This patch add check for fan4,5,6,7 and do not create device file
+ if their pins are not configured as fan.
+2. Fix the issue that can not set fan divisor to 128.
+3. Fix the index out of bounds bug in w83792d_detect function.
+
+Signed-off-by: Yuan Mu <ymu@winbond.com.tw>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ drivers/hwmon/w83792d.c | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+--- gregkh-2.6.orig/drivers/hwmon/w83792d.c
++++ gregkh-2.6/drivers/hwmon/w83792d.c
+@@ -193,6 +193,7 @@ static const u8 W83792D_REG_LEVELS[3][4]
+ 0xE2 } /* (bit3-0) SmartFanII: Fan3 Level 3 */
+ };
+
++#define W83792D_REG_GPIO_EN 0x1A
+ #define W83792D_REG_CONFIG 0x40
+ #define W83792D_REG_VID_FANDIV 0x47
+ #define W83792D_REG_CHIPID 0x49
+@@ -257,7 +258,7 @@ DIV_TO_REG(long val)
+ {
+ int i;
+ val = SENSORS_LIMIT(val, 1, 128) >> 1;
+- for (i = 0; i < 6; i++) {
++ for (i = 0; i < 7; i++) {
+ if (val == 0)
+ break;
+ val >>= 1;
+@@ -1282,8 +1283,8 @@ w83792d_detect(struct i2c_adapter *adapt
+ w83792d_init_client(new_client);
+
+ /* A few vars need to be filled upon startup */
+- for (i = 1; i <= 7; i++) {
+- data->fan_min[i - 1] = w83792d_read_value(new_client,
++ for (i = 0; i < 7; i++) {
++ data->fan_min[i] = w83792d_read_value(new_client,
+ W83792D_REG_FAN_MIN[i]);
+ }
+
+@@ -1306,10 +1307,20 @@ w83792d_detect(struct i2c_adapter *adapt
+ device_create_file_fan(new_client, 1);
+ device_create_file_fan(new_client, 2);
+ device_create_file_fan(new_client, 3);
+- device_create_file_fan(new_client, 4);
+- device_create_file_fan(new_client, 5);
+- device_create_file_fan(new_client, 6);
+- device_create_file_fan(new_client, 7);
++
++ /* Read GPIO enable register to check if pins for fan 4,5 are used as
++ GPIO */
++ val1 = w83792d_read_value(new_client, W83792D_REG_GPIO_EN);
++ if (!(val1 & 0x40))
++ device_create_file_fan(new_client, 4);
++ if (!(val1 & 0x20))
++ device_create_file_fan(new_client, 5);
++
++ val1 = w83792d_read_value(new_client, W83792D_REG_PIN);
++ if (val1 & 0x40)
++ device_create_file_fan(new_client, 6);
++ if (val1 & 0x04)
++ device_create_file_fan(new_client, 7);
+
+ device_create_file_temp1(new_client); /* Temp1 */
+ device_create_file_temp_add(new_client, 2); /* Temp2 */