diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2021-03-08 14:30:37 +0100 |
---|---|---|
committer | Chanwoo Choi <cw00.choi@samsung.com> | 2021-03-09 15:40:16 +0900 |
commit | 1224451bb6f938023dd7fa4e7ba43bfb185bc9e3 (patch) | |
tree | b07a6b84d8c641c7eecc92d948344ab47c7d0f09 /drivers/devfreq/devfreq.c | |
parent | fe07bfda2fb9cdef8a4d4008a409bb02f35f1bd8 (diff) | |
download | lwn-1224451bb6f938023dd7fa4e7ba43bfb185bc9e3.tar.gz lwn-1224451bb6f938023dd7fa4e7ba43bfb185bc9e3.zip |
PM / devfreq: Register devfreq as a cooling device on demand
Currently the default behavior is to manually having the devfreq
backend to register themselves as a devfreq cooling device.
Instead of adding the code in the drivers for the thermal cooling
device registering, let's provide a flag in the devfreq's profile to
tell the common devfreq code to register the newly created devfreq as
a cooling device.
Suggested-by: Chanwoo Choi <cwchoi00@gmail.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Diffstat (limited to 'drivers/devfreq/devfreq.c')
-rw-r--r-- | drivers/devfreq/devfreq.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index bf3047896e41..b6d3e7db0b09 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -11,6 +11,7 @@ #include <linux/kmod.h> #include <linux/sched.h> #include <linux/debugfs.h> +#include <linux/devfreq_cooling.h> #include <linux/errno.h> #include <linux/err.h> #include <linux/init.h> @@ -935,6 +936,12 @@ struct devfreq *devfreq_add_device(struct device *dev, mutex_unlock(&devfreq_list_lock); + if (devfreq->profile->is_cooling_device) { + devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL); + if (IS_ERR(devfreq->cdev)) + devfreq->cdev = NULL; + } + return devfreq; err_init: @@ -960,6 +967,8 @@ int devfreq_remove_device(struct devfreq *devfreq) if (!devfreq) return -EINVAL; + devfreq_cooling_unregister(devfreq->cdev); + if (devfreq->governor) { devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_STOP, NULL); |