| From 9c62e2282900332c8b711d9f9e37af369a8ef71b Mon Sep 17 00:00:00 2001 |
| From: Tim Harvey <tharvey@gateworks.com> |
| Date: Fri, 18 Jul 2025 13:02:59 -0700 |
| Subject: hwmon: (gsc-hwmon) fix fan pwm setpoint show functions |
| |
| From: Tim Harvey <tharvey@gateworks.com> |
| |
| commit 9c62e2282900332c8b711d9f9e37af369a8ef71b upstream. |
| |
| The Linux hwmon sysfs API values for pwmX_auto_pointY_pwm represent an |
| integer value between 0 (0%) to 255 (100%) and the pwmX_auto_pointY_temp |
| represent millidegrees Celcius. |
| |
| Commit a6d80df47ee2 ("hwmon: (gsc-hwmon) fix fan pwm temperature |
| scaling") properly addressed the incorrect scaling in the |
| pwm_auto_point_temp_store implementation but erroneously scaled |
| the pwm_auto_point_pwm_show (pwm value) instead of the |
| pwm_auto_point_temp_show (temp value) resulting in: |
| # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_pwm |
| 25500 |
| # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_temp |
| 4500 |
| |
| Fix the scaling of these attributes: |
| # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_pwm |
| 255 |
| # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_temp |
| 45000 |
| |
| Fixes: a6d80df47ee2 ("hwmon: (gsc-hwmon) fix fan pwm temperature scaling") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Tim Harvey <tharvey@gateworks.com> |
| Link: https://lore.kernel.org/r/20250718200259.1840792-1-tharvey@gateworks.com |
| Signed-off-by: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/hwmon/gsc-hwmon.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/hwmon/gsc-hwmon.c |
| +++ b/drivers/hwmon/gsc-hwmon.c |
| @@ -65,7 +65,7 @@ static ssize_t pwm_auto_point_temp_show( |
| return ret; |
| |
| ret = regs[0] | regs[1] << 8; |
| - return sprintf(buf, "%d\n", ret * 10); |
| + return sprintf(buf, "%d\n", ret * 100); |
| } |
| |
| static ssize_t pwm_auto_point_temp_store(struct device *dev, |
| @@ -100,7 +100,7 @@ static ssize_t pwm_auto_point_pwm_show(s |
| { |
| struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
| |
| - return sprintf(buf, "%d\n", 255 * (50 + (attr->index * 10))); |
| + return sprintf(buf, "%d\n", 255 * (50 + (attr->index * 10)) / 100); |
| } |
| |
| static SENSOR_DEVICE_ATTR_RO(pwm1_auto_point1_pwm, pwm_auto_point_pwm, 0); |