diff mbox series

[hwmon,1/1] hwmon: (mlxreg-fan) Return zero speed for broken fan

Message ID 20230212145730.24247-1-vadimp@nvidia.com (mailing list archive)
State Accepted
Headers show
Series [hwmon,1/1] hwmon: (mlxreg-fan) Return zero speed for broken fan | expand

Commit Message

Vadim Pasternak Feb. 12, 2023, 2:57 p.m. UTC
Currently for broken fan driver returns value calculated based on error
code (0xFF) in related fan speed register.
Thus, for such fan user gets fan{n}_fault to 1 and fan{n}_input with
misleading value.

Add check for fan fault prior return speed value and return zero if
fault is detected.

Fixes: 65afb4c8e7e4 ("hwmon: (mlxreg-fan) Add support for Mellanox FAN driver")
Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
---
 drivers/hwmon/mlxreg-fan.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Guenter Roeck Feb. 12, 2023, 3:22 p.m. UTC | #1
On 2/12/23 06:57, Vadim Pasternak wrote:
> Currently for broken fan driver returns value calculated based on error
> code (0xFF) in related fan speed register.
> Thus, for such fan user gets fan{n}_fault to 1 and fan{n}_input with
> misleading value.
> 
> Add check for fan fault prior return speed value and return zero if
> fault is detected.
> 
> Fixes: 65afb4c8e7e4 ("hwmon: (mlxreg-fan) Add support for Mellanox FAN driver")
> Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>

Applied.

Thanks,
Guenter

> ---
>   drivers/hwmon/mlxreg-fan.c | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/hwmon/mlxreg-fan.c b/drivers/hwmon/mlxreg-fan.c
> index b48bd7c961d6..96017cc8da7e 100644
> --- a/drivers/hwmon/mlxreg-fan.c
> +++ b/drivers/hwmon/mlxreg-fan.c
> @@ -155,6 +155,12 @@ mlxreg_fan_read(struct device *dev, enum hwmon_sensor_types type, u32 attr,
>   			if (err)
>   				return err;
>   
> +			if (MLXREG_FAN_GET_FAULT(regval, tacho->mask)) {
> +				/* FAN is broken - return zero for FAN speed. */
> +				*val = 0;
> +				return 0;
> +			}
> +
>   			*val = MLXREG_FAN_GET_RPM(regval, fan->divider,
>   						  fan->samples);
>   			break;
diff mbox series

Patch

diff --git a/drivers/hwmon/mlxreg-fan.c b/drivers/hwmon/mlxreg-fan.c
index b48bd7c961d6..96017cc8da7e 100644
--- a/drivers/hwmon/mlxreg-fan.c
+++ b/drivers/hwmon/mlxreg-fan.c
@@ -155,6 +155,12 @@  mlxreg_fan_read(struct device *dev, enum hwmon_sensor_types type, u32 attr,
 			if (err)
 				return err;
 
+			if (MLXREG_FAN_GET_FAULT(regval, tacho->mask)) {
+				/* FAN is broken - return zero for FAN speed. */
+				*val = 0;
+				return 0;
+			}
+
 			*val = MLXREG_FAN_GET_RPM(regval, fan->divider,
 						  fan->samples);
 			break;