Commit 61b6c66a authored by Guenter Roeck's avatar Guenter Roeck

hwmon: (nct6775) Only display fan speed tolerance conditionally

A fan speed tolerance only makes sense if a fan target speed has been
configured in the first place. Otherwise we get odd output such as

fan1_target:0
fan1_tolerance:337500

Only display values other than 0 if a fan target speed has been configured.
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 0665a1d6
...@@ -2847,6 +2847,8 @@ store_temp_tolerance(struct device *dev, struct device_attribute *attr, ...@@ -2847,6 +2847,8 @@ store_temp_tolerance(struct device *dev, struct device_attribute *attr,
* Fan speed tolerance is a tricky beast, since the associated register is * Fan speed tolerance is a tricky beast, since the associated register is
* a tick counter, but the value is reported and configured as rpm. * a tick counter, but the value is reported and configured as rpm.
* Compute resulting low and high rpm values and report the difference. * Compute resulting low and high rpm values and report the difference.
* A fan speed tolerance only makes sense if a fan target speed has been
* configured, so only display values other than 0 if that is the case.
*/ */
static ssize_t static ssize_t
show_speed_tolerance(struct device *dev, struct device_attribute *attr, show_speed_tolerance(struct device *dev, struct device_attribute *attr,
...@@ -2855,19 +2857,23 @@ show_speed_tolerance(struct device *dev, struct device_attribute *attr, ...@@ -2855,19 +2857,23 @@ show_speed_tolerance(struct device *dev, struct device_attribute *attr,
struct nct6775_data *data = nct6775_update_device(dev); struct nct6775_data *data = nct6775_update_device(dev);
struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr); struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr);
int nr = sattr->index; int nr = sattr->index;
int low = data->target_speed[nr] - data->target_speed_tolerance[nr]; int target = data->target_speed[nr];
int high = data->target_speed[nr] + data->target_speed_tolerance[nr]; int tolerance = 0;
int tolerance;
if (target) {
if (low <= 0) int low = target - data->target_speed_tolerance[nr];
low = 1; int high = target + data->target_speed_tolerance[nr];
if (high > 0xffff)
high = 0xffff; if (low <= 0)
if (high < low) low = 1;
high = low; if (high > 0xffff)
high = 0xffff;
tolerance = (fan_from_reg16(low, data->fan_div[nr]) if (high < low)
- fan_from_reg16(high, data->fan_div[nr])) / 2; high = low;
tolerance = (fan_from_reg16(low, data->fan_div[nr])
- fan_from_reg16(high, data->fan_div[nr])) / 2;
}
return sprintf(buf, "%d\n", tolerance); return sprintf(buf, "%d\n", tolerance);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment