diff options
Diffstat (limited to 'drivers/hwmon/f75375s.c')
| -rw-r--r-- | drivers/hwmon/f75375s.c | 18 | 
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c index eedf574ab53..6bab2001ef3 100644 --- a/drivers/hwmon/f75375s.c +++ b/drivers/hwmon/f75375s.c @@ -172,7 +172,7 @@ static inline void f75375_write8(struct i2c_client *client, u8 reg,  static inline void f75375_write16(struct i2c_client *client, u8 reg,  		u16 value)  { -	int err = i2c_smbus_write_byte_data(client, reg, (value << 8)); +	int err = i2c_smbus_write_byte_data(client, reg, (value >> 8));  	if (err)  		return;  	i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF)); @@ -200,9 +200,6 @@ static struct f75375_data *f75375_update_device(struct device *dev)  				f75375_read16(client, F75375_REG_FAN_MIN(nr));  			data->fan_target[nr] =  				f75375_read16(client, F75375_REG_FAN_EXP(nr)); -			data->pwm[nr] =	f75375_read8(client, -				F75375_REG_FAN_PWM_DUTY(nr)); -  		}  		for (nr = 0; nr < 4; nr++) {  			data->in_max[nr] = @@ -218,6 +215,8 @@ static struct f75375_data *f75375_update_device(struct device *dev)  	if (time_after(jiffies, data->last_updated + 2 * HZ)  		|| !data->valid) {  		for (nr = 0; nr < 2; nr++) { +			data->pwm[nr] =	f75375_read8(client, +				F75375_REG_FAN_PWM_DUTY(nr));  			/* assign MSB, therefore shift it by 8 bits */  			data->temp11[nr] =  				f75375_read8(client, F75375_REG_TEMP(nr)) << 8; @@ -341,8 +340,6 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)  			fanmode |= (1 << F75387_FAN_MANU_MODE(nr));  			fanmode |= (1 << F75387_FAN_DUTY_MODE(nr));  			data->pwm[nr] = 255; -			f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), -					data->pwm[nr]);  			break;  		case 1: /* PWM */  			fanmode  |= (1 << F75387_FAN_MANU_MODE(nr)); @@ -362,14 +359,12 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)  		case 0: /* full speed */  			fanmode  |= (3 << FAN_CTRL_MODE(nr));  			data->pwm[nr] = 255; -			f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), -					data->pwm[nr]);  			break;  		case 1: /* PWM */  			fanmode  |= (3 << FAN_CTRL_MODE(nr));  			break;  		case 2: /* AUTOMATIC*/ -			fanmode  |= (2 << FAN_CTRL_MODE(nr)); +			fanmode  |= (1 << FAN_CTRL_MODE(nr));  			break;  		case 3: /* fan speed */  			break; @@ -378,6 +373,9 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)  	f75375_write8(client, F75375_REG_FAN_TIMER, fanmode);  	data->pwm_enable[nr] = val; +	if (val == 0) +		f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), +				data->pwm[nr]);  	return 0;  } @@ -723,7 +721,7 @@ static void f75375_init(struct i2c_client *client, struct f75375_data *data,  			if (data->kind == f75387) {  				bool manu, duty; -				if (!(conf & (1 << F75387_FAN_CTRL_LINEAR(nr)))) +				if (!(mode & (1 << F75387_FAN_CTRL_LINEAR(nr))))  					data->pwm_mode[nr] = 1;  				manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1);  |