Skip to content

Commit

Permalink
cpufreq: arm_big_little_dt: Instantiate as platform_driver
Browse files Browse the repository at this point in the history
As multiplatform build is being adopted by more and more ARM platforms, initcall
function should be used very carefully. For example, when both arm_big_little_dt
and cpufreq-cpu0 drivers are compiled in, arm_big_little_dt driver may try to
register even if we had platform device for cpufreq-cpu0 registered.

To eliminate this undesired the effect, the patch changes arm_big_little_dt
driver to have it instantiated as a platform_driver. Then it will only run on
platforms that create the platform_device "arm-bL-cpufreq-dt".

Reported-and-tested-by: Rob Herring <robherring2@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Viresh Kumar authored and Rafael J. Wysocki committed May 22, 2013
1 parent 92a9b5c commit 9076eac
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions drivers/cpufreq/arm_big_little_dt.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/opp.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/types.h>
#include "arm_big_little.h"
Expand Down Expand Up @@ -95,7 +96,7 @@ static struct cpufreq_arm_bL_ops dt_bL_ops = {
.init_opp_table = dt_init_opp_table,
};

static int generic_bL_init(void)
static int generic_bL_probe(struct platform_device *pdev)
{
struct device_node *np;

Expand All @@ -106,13 +107,22 @@ static int generic_bL_init(void)
of_node_put(np);
return bL_cpufreq_register(&dt_bL_ops);
}
module_init(generic_bL_init);

static void generic_bL_exit(void)
static int generic_bL_remove(struct platform_device *pdev)
{
return bL_cpufreq_unregister(&dt_bL_ops);
bL_cpufreq_unregister(&dt_bL_ops);
return 0;
}
module_exit(generic_bL_exit);

static struct platform_driver generic_bL_platdrv = {
.driver = {
.name = "arm-bL-cpufreq-dt",
.owner = THIS_MODULE,
},
.probe = generic_bL_probe,
.remove = generic_bL_remove,
};
module_platform_driver(generic_bL_platdrv);

MODULE_AUTHOR("Viresh Kumar <viresh.kumar@linaro.org>");
MODULE_DESCRIPTION("Generic ARM big LITTLE cpufreq driver via DT");
Expand Down

0 comments on commit 9076eac

Please sign in to comment.