Commit 0429415a authored by Florin Leotescu's avatar Florin Leotescu Committed by Guenter Roeck
Browse files

hwmon: (emc2305) Set initial PWM minimum value during probe based on thermal state



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: default avatarFlorin Leotescu <florin.leotescu@nxp.com>
Link: https://lore.kernel.org/r/20250603113125.3175103-5-florin.leotescu@oss.nxp.com


Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent ef8b1b4e
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -317,6 +317,12 @@ static int emc2305_set_single_tz(struct device *dev, struct device_node *fan_nod
		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);
@@ -330,10 +336,10 @@ static int emc2305_set_single_tz(struct device *dev, struct device_node *fan_nod
		}
	}
	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;
}