[PATCH 5/5] hwmon/lm85: Let the user set the fan min limit to 0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Trying to set the fan min limit to 0 currently writes 0 to the
> register, which is an invalid value. It's read back as -1 and the
> alarm flag is raised. Instead we should write 0xffff (maximum
> value), which reads back as 0 and no alarm flag is raised.
>
> Signed-off-by: Jean Delvare <khali at linux-fr.org>
> ---
>  drivers/hwmon/lm85.c |    9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> --- linux-2.6.22-rc6.orig/drivers/hwmon/lm85.c	2007-07-01 14:30:37.000000000 +0200
> +++ linux-2.6.22-rc6/drivers/hwmon/lm85.c	2007-07-01 17:00:44.000000000 +0200
> @@ -145,7 +145,12 @@ static int lm85_scaling[] = {  /* .001 V
>  #define INS_FROM_REG(n,val)	SCALE((val), 192, lm85_scaling[n])
>
>  /* FAN speed is measured using 90kHz clock */
> -#define FAN_TO_REG(val)		(SENSORS_LIMIT( (val)<=0?0: 5400000/(val),0,65534))
> +static inline u16 FAN_TO_REG(unsigned long val)
> +{
> +	if (!val)
> +		return 0xffff;
> +	return SENSORS_LIMIT(5400000 / val, 1, 0xfffe);
> +}
>  #define FAN_FROM_REG(val)	((val)==0?-1:(val)==0xffff?0:5400000/(val))
>
>  /* Temperature is reported in .001 degC increments */
> @@ -391,7 +396,7 @@ static ssize_t set_fan_min(struct device
>  	int nr = to_sensor_dev_attr(attr)->index;
>  	struct i2c_client *client = to_i2c_client(dev);
>  	struct lm85_data *data = i2c_get_clientdata(client);
> -	long val = simple_strtol(buf, NULL, 10);
> +	unsigned long val = simple_strtoul(buf, NULL, 10);
>
>  	mutex_lock(&data->update_lock);
>  	data->fan_min[nr] = FAN_TO_REG(val);
>

Looks good.

Acked-by: Juerg Haefliger <juergh at gmail.com>




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux