mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 10:04:12 +08:00
platform/x86/drivers/acerhdf: Check the interval value when it is set
Currently the code checks the interval value when the temperature is read which is bad for two reasons: - checking and setting the interval in the get_temp callback is inaccurate and awful, that can be done when changing the value. - Changing the thermal zone structure internals is an abuse of the exported structure, moreover no lock is taken here. The goal of this patch is to solve the first item by using the 'set' function called when changing the interval. The check is done there and removed from the get_temp function. If the thermal zone was not initialized yet, the interval is not updated in this case as that will happen in the init function when registering the thermal zone device. I don't have any hardware to test the changes. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Peter Kaestle <peter@piie.net> Acked-by: Hans de Goede <hdegoede@redhat.com> Link: https://lore.kernel.org/r/20201203071738.2363701-2-daniel.lezcano@linaro.org
This commit is contained in:
parent
a65181c41e
commit
f34a32fae7
@ -334,7 +334,10 @@ static void acerhdf_check_param(struct thermal_zone_device *thermal)
|
|||||||
}
|
}
|
||||||
if (verbose)
|
if (verbose)
|
||||||
pr_notice("interval changed to: %d\n", interval);
|
pr_notice("interval changed to: %d\n", interval);
|
||||||
thermal->polling_delay = interval*1000;
|
|
||||||
|
if (thermal)
|
||||||
|
thermal->polling_delay = interval*1000;
|
||||||
|
|
||||||
prev_interval = interval;
|
prev_interval = interval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -349,8 +352,6 @@ static int acerhdf_get_ec_temp(struct thermal_zone_device *thermal, int *t)
|
|||||||
{
|
{
|
||||||
int temp, err = 0;
|
int temp, err = 0;
|
||||||
|
|
||||||
acerhdf_check_param(thermal);
|
|
||||||
|
|
||||||
err = acerhdf_get_temp(&temp);
|
err = acerhdf_get_temp(&temp);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -823,8 +824,21 @@ MODULE_ALIAS("dmi:*:*Acer*:pnExtensa*5420*:");
|
|||||||
module_init(acerhdf_init);
|
module_init(acerhdf_init);
|
||||||
module_exit(acerhdf_exit);
|
module_exit(acerhdf_exit);
|
||||||
|
|
||||||
|
static int interval_set_uint(const char *val, const struct kernel_param *kp)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = param_set_uint(val, kp);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
acerhdf_check_param(thz_dev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct kernel_param_ops interval_ops = {
|
static const struct kernel_param_ops interval_ops = {
|
||||||
.set = param_set_uint,
|
.set = interval_set_uint,
|
||||||
.get = param_get_uint,
|
.get = param_get_uint,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user