> +static ssize_t mlxsw_hwmon_fan_fault_show(struct device *dev,
> +                                       struct device_attribute *attr,
> +                                       char *buf)
> +{
> +     struct mlxsw_hwmon_attr *mlwsw_hwmon_attr =
> +                     container_of(attr, struct mlxsw_hwmon_attr, dev_attr);
> +     struct mlxsw_hwmon *mlxsw_hwmon = mlwsw_hwmon_attr->hwmon;
> +     char mfsm_pl[MLXSW_REG_MFSM_LEN];
> +     u16 tach;
> +     int err;
> +
> +     mlxsw_reg_mfsm_pack(mfsm_pl, mlwsw_hwmon_attr->type_index);
> +     err = mlxsw_reg_query(mlxsw_hwmon->core, MLXSW_REG(mfsm), mfsm_pl);
> +     if (err) {
> +             dev_err(mlxsw_hwmon->bus_info->dev, "Failed to query fan\n");
> +             return err;
> +     }
> +     tach = mlxsw_reg_mfsm_rpm_get(mfsm_pl);
> +
> +     return sprintf(buf, "%u\n", (tach < mlxsw_hwmon->tach_min) ? 1 : 0);
> +}

Documentation/hwmon/sysfs-interface says:

Alarms are direct indications read from the chips. The drivers do NOT
make comparisons of readings to thresholds. This allows violations
between readings to be caught and alarmed. The exact definition of an
alarm (for example, whether a threshold must be met or must be exceeded
to cause an alarm) is chip-dependent.

Now, this is a fault, not an alarm. But does the same apply?

     Andrew

Reply via email to