aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/w83627ehf.c
diff options
context:
space:
mode:
authorIan Dobson <i.dobson@planet-ian.com>2011-03-07 14:21:12 -0800
committerGuenter Roeck <guenter.roeck@ericsson.com>2011-03-14 22:39:19 -0700
commitd42e869acf0da4502c452b786dee35f0ecf4cbc8 (patch)
treee737f36e9328d1ce776176bfb643eebdf1fefc3d /drivers/hwmon/w83627ehf.c
parent2dd59c26e9336db676956589320f1bc71dc1b2e7 (diff)
downloadkernel_samsung_smdk4412-d42e869acf0da4502c452b786dee35f0ecf4cbc8.zip
kernel_samsung_smdk4412-d42e869acf0da4502c452b786dee35f0ecf4cbc8.tar.gz
kernel_samsung_smdk4412-d42e869acf0da4502c452b786dee35f0ecf4cbc8.tar.bz2
hwmon: (w83627ehf) Add fan debounce support for NCT6775F and NCT6776F
NCT6776F and NCT6775F support debouncing the fan RPM signal. This can help improve the stability of th RPM signal for some fans (Arctic cooling fans for example). This patch adds a module parameter fan_debounce, which when set to 1 enables debounce for all fans that the chip supports. Signed-off-by: Ian Dobson <i.dobson@planet-ian.com> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Diffstat (limited to 'drivers/hwmon/w83627ehf.c')
-rw-r--r--drivers/hwmon/w83627ehf.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 460292b..d180319 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -79,6 +79,10 @@ static unsigned short force_id;
module_param(force_id, ushort, 0);
MODULE_PARM_DESC(force_id, "Override the detected device ID");
+static unsigned short fan_debounce;
+module_param(fan_debounce, ushort, 0);
+MODULE_PARM_DESC(fan_debounce, "Enable debouncing for fan RPM signal");
+
#define DRVNAME "w83627ehf"
/*
@@ -187,6 +191,7 @@ static const u16 W83627EHF_REG_TEMP_CONFIG[] = { 0, 0x152, 0x252, 0 };
/* NCT6775F has its own fan divider registers */
#define NCT6775_REG_FANDIV1 0x506
#define NCT6775_REG_FANDIV2 0x507
+#define NCT6775_REG_FAN_DEBOUNCE 0xf0
#define W83627EHF_REG_ALARM1 0x459
#define W83627EHF_REG_ALARM2 0x45A
@@ -2089,6 +2094,22 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
fan5pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x02);
fan4min = fan4pin;
}
+
+ if (fan_debounce &&
+ (sio_data->kind == nct6775 || sio_data->kind == nct6776)) {
+ u8 tmp;
+
+ superio_select(sio_data->sioreg, W83627EHF_LD_HWM);
+ tmp = superio_inb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE);
+ if (sio_data->kind == nct6776)
+ superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
+ 0x3e | tmp);
+ else
+ superio_outb(sio_data->sioreg, NCT6775_REG_FAN_DEBOUNCE,
+ 0x1e | tmp);
+ pr_info("Enabled fan debounce for chip %s\n", data->name);
+ }
+
superio_exit(sio_data->sioreg);
/* It looks like fan4 and fan5 pins can be alternatively used