On Mon, Jan 28, 2019 at 7:44 AM Amit Kucheria <amit.kucheria@xxxxxxxxxx> wrote: > > All cpufreq drivers do similar things to register as a cooling device. > Provide a cpufreq driver flag so drivers can just ask the cpufreq core > to register the cooling device on their behalf. This allows us to get > rid of duplicated code in the drivers. > > In order to allow this, we add a struct thermal_cooling_device pointer > to struct cpufreq_policy so that drivers don't need to store it in a > private data structure. > > Suggested-by: Stephen Boyd <swboyd@xxxxxxxxxxxx> > Suggested-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> > Signed-off-by: Amit Kucheria <amit.kucheria@xxxxxxxxxx> > Reviewed-by: Matthias Kaehlcke <mka@xxxxxxxxxxxx> > Tested-by: Matthias Kaehlcke <mka@xxxxxxxxxxxx> > --- > drivers/cpufreq/cpufreq.c | 9 +++++++++ > include/linux/cpufreq.h | 9 +++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c > index e35a886e00bc..29ed78b0b77b 100644 > --- a/drivers/cpufreq/cpufreq.c > +++ b/drivers/cpufreq/cpufreq.c > @@ -19,6 +19,7 @@ > > #include <linux/cpu.h> > #include <linux/cpufreq.h> > +#include <linux/cpu_cooling.h> > #include <linux/delay.h> > #include <linux/device.h> > #include <linux/init.h> > @@ -1318,6 +1319,9 @@ static int cpufreq_online(unsigned int cpu) > if (cpufreq_driver->ready) > cpufreq_driver->ready(policy); > > + if (cpufreq_driver->flags & CPUFREQ_AUTO_REGISTER_COOLING_DEV) It would be good to use IS_ENABLED(CONFIG_CPU_THERMAL) here and below as a hint for the compiler. > + policy->cdev = of_cpufreq_cooling_register(policy); > + > pr_debug("initialization complete\n"); > > return 0; > @@ -1405,6 +1409,11 @@ static int cpufreq_offline(unsigned int cpu) > goto unlock; > } > > + if (cpufreq_driver->flags & CPUFREQ_AUTO_REGISTER_COOLING_DEV) { > + cpufreq_cooling_unregister(policy->cdev); > + policy->cdev = NULL; > + } > + > if (cpufreq_driver->stop_cpu) > cpufreq_driver->stop_cpu(policy); >