Re: [PATCH] hwmon: (emc6w201) Fix temperature limit range

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

 



Hi Guenter,

On Tue,  5 Aug 2014 09:57:03 -0700, Guenter Roeck wrote:
> Temperature limit range is [-128, 127], not [-127, 128].
> The wrong range caused a bad limit to be written into the chip
> if the limit was set to a value of 128 degrees C or above.

According to the datasheet, -128 is not actually a valid temperature
limit, so I would clamp to [-127, 127]. The temperature sensors return
-128 to indicate an error, not a temperature of -128°C.

> Also use DIV_ROUND_CLOSEST instead of a plan divide operation
> to reduce the rounding error when writing temperature limits.

Good idea.

> 
> Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx>
> ---
>  drivers/hwmon/emc6w201.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/hwmon/emc6w201.c b/drivers/hwmon/emc6w201.c
> index e87da90..80c2f42 100644
> --- a/drivers/hwmon/emc6w201.c
> +++ b/drivers/hwmon/emc6w201.c
> @@ -252,12 +252,12 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
>  	if (err < 0)
>  		return err;
>  
> -	val /= 1000;
> +	val = DIV_ROUND_CLOSEST(val, 1000);
>  	reg = (sf == min) ? EMC6W201_REG_TEMP_LOW(nr)
>  			  : EMC6W201_REG_TEMP_HIGH(nr);
>  
>  	mutex_lock(&data->update_lock);
> -	data->temp[sf][nr] = clamp_val(val, -127, 128);
> +	data->temp[sf][nr] = clamp_val(val, -128, 127);
>  	err = emc6w201_write8(client, reg, data->temp[sf][nr]);
>  	mutex_unlock(&data->update_lock);
>  


-- 
Jean Delvare
SUSE L3 Support

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors





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

  Powered by Linux