ipq806x: support independent core clocks with kernel 4.9+ Add back support for the independent_clocks definition that has been removed between kernel 4.4 and 4.9 by upstream commits eb96924acddc709db58221c210ca05cd9effb1df and e86eee6bc2aaa6b3637f6497b26beee09a91bde9 * extend the new cpufreq_dt_platform_data definition in cpufreq-dt.h * use new cpufreq-dt.h in qcom-cpufreq.c Signed-off-by: Hannu Nyman --- a/drivers/cpufreq/cpufreq-dt.h +++ b/drivers/cpufreq/cpufreq-dt.h @@ -14,6 +14,7 @@ struct cpufreq_dt_platform_data { bool have_governor_per_policy; + bool independent_clocks; }; #endif /* __CPUFREQ_DT_H__ */ --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -221,7 +221,10 @@ static int cpufreq_init(struct cpufreq_p } if (fallback) { - cpumask_setall(policy->cpus); + struct cpufreq_dt_platform_data *pd = cpufreq_get_driver_data(); + + if (!pd || !pd->independent_clocks) + cpumask_setall(policy->cpus); /* * OPP tables are initialized only for policy->cpu, do it for @@ -376,6 +379,8 @@ static int dt_cpufreq_probe(struct platf if (data && data->have_governor_per_policy) dt_cpufreq_driver.flags |= CPUFREQ_HAVE_GOVERNOR_PER_POLICY; + dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); + ret = cpufreq_register_driver(&dt_cpufreq_driver); if (ret) dev_err(&pdev->dev, "failed register driver: %d\n", ret); --- a/drivers/cpufreq/qcom-cpufreq.c +++ b/drivers/cpufreq/qcom-cpufreq.c @@ -20,7 +20,7 @@ #include #include #include -#include +#include "cpufreq-dt.h" static void __init get_krait_bin_format_a(int *speed, int *pvs, int *pvs_ver) {