Re: [PATCH] hwmon: (pmbus) Fix low limit temperature alarms

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

 



Hi Guenter,

On Sat, 10 Sep 2011 13:27:54 -0700, Guenter Roeck wrote:
> Temperature alarms are detected by checking the alarm bit and comparing
> temperature limits against the current temperature. For low limits, this
> comparison needs to be reversed (temp < limit instead of temp > limit).
> This was not taken into account, resulting in wrong alarms if a temperature
> fell below a low limit.
> 
> Fix by adding a low limit flag in the limit data structure. When creating the
> sensor entry, the order of registers to compare is now reversed for low limits.
> 
> Signed-off-by: Guenter Roeck <guenter.roeck@xxxxxxxxxxxx>
> ---
> Candidate for -stable.
> 
>  drivers/hwmon/pmbus/pmbus_core.c |   10 +++++++++-
>  1 files changed, 9 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
> index 1798f52..410aa12 100644
> --- a/drivers/hwmon/pmbus/pmbus_core.c
> +++ b/drivers/hwmon/pmbus/pmbus_core.c
> @@ -978,6 +978,8 @@ static void pmbus_find_max_attr(struct i2c_client *client,
>  struct pmbus_limit_attr {
>  	u16 reg;		/* Limit register */
>  	bool update;		/* True if register needs updates */
> +	bool low;		/* True if low limit; for limits with compare
> +				   functions only */
>  	const char *attr;	/* Attribute name */
>  	const char *alarm;	/* Alarm attribute name */
>  	u32 sbit;		/* Alarm attribute status bit */
> @@ -1029,7 +1031,8 @@ static bool pmbus_add_limit_attrs(struct i2c_client *client,
>  				if (attr->compare) {
>  					pmbus_add_boolean_cmp(data, name,
>  						l->alarm, index,
> -						cbase, cindex,
> +						l->low ? cindex : cbase,
> +						l->low ? cbase : cindex,
>  						attr->sbase + page, l->sbit);
>  				} else {
>  					pmbus_add_boolean_reg(data, name,
> @@ -1366,16 +1369,19 @@ static const struct pmbus_sensor_attr power_attributes[] = {
>  static const struct pmbus_limit_attr temp_limit_attrs[] = {
>  	{
>  		.reg = PMBUS_UT_WARN_LIMIT,
> +		.low = true,
>  		.attr = "min",
>  		.alarm = "min_alarm",
>  		.sbit = PB_TEMP_UT_WARNING,
>  	}, {
>  		.reg = PMBUS_UT_FAULT_LIMIT,
> +		.low = true,
>  		.attr = "lcrit",
>  		.alarm = "lcrit_alarm",
>  		.sbit = PB_TEMP_UT_FAULT,
>  	}, {
>  		.reg = PMBUS_OT_WARN_LIMIT,
> +		.low = true,
>  		.attr = "max",
>  		.alarm = "max_alarm",
>  		.sbit = PB_TEMP_OT_WARNING,

This one doesn't look like a "low lmit", does it?

> @@ -1399,11 +1405,13 @@ static const struct pmbus_limit_attr temp_limit_attrs[] = {
>  static const struct pmbus_limit_attr temp_limit_attrs23[] = {
>  	{
>  		.reg = PMBUS_UT_WARN_LIMIT,
> +		.low = true,
>  		.attr = "min",
>  		.alarm = "min_alarm",
>  		.sbit = PB_TEMP_UT_WARNING,
>  	}, {
>  		.reg = PMBUS_UT_FAULT_LIMIT,
> +		.low = true,
>  		.attr = "lcrit",
>  		.alarm = "lcrit_alarm",
>  		.sbit = PB_TEMP_UT_FAULT,

Looks fine otherwise.

-- 
Jean Delvare

_______________________________________________
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