| From 65ed293a729de0061f1c31d4782f1b709033dfe3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 3 Jun 2025 14:31:25 +0300 |
| Subject: hwmon: (emc2305) Set initial PWM minimum value during probe based on |
| thermal state |
| |
| From: Florin Leotescu <florin.leotescu@nxp.com> |
| |
| [ Upstream commit 0429415a084a15466e87d504e8c2a502488184a5 ] |
| |
| Prevent the PWM value from being set to minimum when thermal zone |
| temperature exceeds any trip point during driver probe. Otherwise, the |
| PWM fan speed will remains at minimum speed and not respond to |
| temperature changes. |
| |
| Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com> |
| Link: https://lore.kernel.org/r/20250603113125.3175103-5-florin.leotescu@oss.nxp.com |
| Signed-off-by: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/hwmon/emc2305.c | 10 ++++++++-- |
| 1 file changed, 8 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/hwmon/emc2305.c b/drivers/hwmon/emc2305.c |
| index e42ae43f3de4..286582e99c28 100644 |
| --- a/drivers/hwmon/emc2305.c |
| +++ b/drivers/hwmon/emc2305.c |
| @@ -301,6 +301,12 @@ static int emc2305_set_single_tz(struct device *dev, int idx) |
| dev_err(dev, "Failed to register cooling device %s\n", emc2305_fan_name[idx]); |
| return PTR_ERR(data->cdev_data[cdev_idx].cdev); |
| } |
| + |
| + if (data->cdev_data[cdev_idx].cur_state > 0) |
| + /* Update pwm when temperature is above trips */ |
| + pwm = EMC2305_PWM_STATE2DUTY(data->cdev_data[cdev_idx].cur_state, |
| + data->max_state, EMC2305_FAN_MAX); |
| + |
| /* Set minimal PWM speed. */ |
| if (data->pwm_separate) { |
| ret = emc2305_set_pwm(dev, pwm, cdev_idx); |
| @@ -314,10 +320,10 @@ static int emc2305_set_single_tz(struct device *dev, int idx) |
| } |
| } |
| data->cdev_data[cdev_idx].cur_state = |
| - EMC2305_PWM_DUTY2STATE(data->pwm_min[cdev_idx], data->max_state, |
| + EMC2305_PWM_DUTY2STATE(pwm, data->max_state, |
| EMC2305_FAN_MAX); |
| data->cdev_data[cdev_idx].last_hwmon_state = |
| - EMC2305_PWM_DUTY2STATE(data->pwm_min[cdev_idx], data->max_state, |
| + EMC2305_PWM_DUTY2STATE(pwm, data->max_state, |
| EMC2305_FAN_MAX); |
| return 0; |
| } |
| -- |
| 2.39.5 |
| |