From f922d716074b5996a194deebff4cf0798e102327 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Sun, 24 Apr 2005 18:22:10 +0000 Subject: [PATCH] Fix PWM polarity on read, hopefully for good this time. Fix broken comment about PWM enable bit. Clean up the PWM enable/disable code. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2981 7894878c-1315-0410-8ee3-d5d059ff63e0 --- kernel/chips/smsc47m1.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/kernel/chips/smsc47m1.c b/kernel/chips/smsc47m1.c index f90f2be1..0fe12e3c 100644 --- a/kernel/chips/smsc47m1.c +++ b/kernel/chips/smsc47m1.c @@ -134,7 +134,7 @@ struct smsc47m1_data { u8 fan_min[2]; /* Register value */ u8 fan_div[2]; /* Register encoding, shifted right */ u8 alarms; /* Register encoding */ - u8 pwm[2]; /* Register value (bit 7 is enable) */ + u8 pwm[2]; /* Register value (bit 0 is disable) */ }; @@ -455,21 +455,18 @@ void smsc47m1_pwm(struct i2c_client *client, int operation, int ctl_name, else if (operation == SENSORS_PROC_REAL_READ) { smsc47m1_update_client(client); results[0] = PWM_FROM_REG(data->pwm[nr - 1]); - results[1] = data->pwm[nr - 1] & 0x01; + results[1] = !(data->pwm[nr - 1] & 0x01); *nrels_mag = 2; } else if (operation == SENSORS_PROC_REAL_WRITE) { if (*nrels_mag >= 1) { - data->pwm[nr - 1] &= 0x81; + data->pwm[nr - 1] = smsc47m1_read_value(client, + SMSC47M1_REG_PWM(nr)) & 0x81; data->pwm[nr - 1] |= PWM_TO_REG(results[0]); if (*nrels_mag >= 2) { - if(results[1] && (data->pwm[nr-1] & 0x01)) { + if (results[1]) { /* enable PWM */ -/* hope BIOS did it already - smsc47m1_write_value(client, - SMSC47M1_REG_PPIN(nr), 0x04); -*/ data->pwm[nr - 1] &= 0xfe; - } else if((!results[1]) && (!(data->pwm[nr-1] & 0x01))) { + } else { /* disable PWM */ data->pwm[nr - 1] |= 0x01; }