Skip to content

Commit

Permalink
cpufreq: SPEAr: 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 SPEAr cpufreq driver is enabled on a kernel
booted on a non-SPEAr board, we will get following boot time error:

	spear_cpufreq: Invalid cpufreq_tbl

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

This patch also creates platform node for SPEAr13xx boards.

Reported-by: Josh Cartwright <joshc@codeaurora.org>
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 Mar 12, 2014
1 parent 96bbbe4 commit 2449d33
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
1 change: 1 addition & 0 deletions arch/arm/mach-spear/spear1310.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
static void __init spear1310_dt_init(void)
{
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
platform_device_register_simple("spear-cpufreq", -1, NULL, 0);
}

static const char * const spear1310_dt_board_compat[] = {
Expand Down
1 change: 1 addition & 0 deletions arch/arm/mach-spear/spear1340.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ static void __init spear1340_dt_init(void)
{
of_platform_populate(NULL, of_default_bus_match_table,
spear1340_auxdata_lookup, NULL);
platform_device_register_simple("spear-cpufreq", -1, NULL, 0);
}

static const char * const spear1340_dt_board_compat[] = {
Expand Down
13 changes: 11 additions & 2 deletions drivers/cpufreq/spear-cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/types.h>

Expand Down Expand Up @@ -166,7 +167,7 @@ static struct cpufreq_driver spear_cpufreq_driver = {
.attr = cpufreq_generic_attr,
};

static int spear_cpufreq_driver_init(void)
static int spear_cpufreq_probe(struct platform_device *pdev)
{
struct device_node *np;
const struct property *prop;
Expand Down Expand Up @@ -234,7 +235,15 @@ static int spear_cpufreq_driver_init(void)
of_node_put(np);
return ret;
}
late_initcall(spear_cpufreq_driver_init);

static struct platform_driver spear_cpufreq_platdrv = {
.driver = {
.name = "spear-cpufreq",
.owner = THIS_MODULE,
},
.probe = spear_cpufreq_probe,
};
module_platform_driver(spear_cpufreq_platdrv);

MODULE_AUTHOR("Deepak Sikri <deepak.sikri@st.com>");
MODULE_DESCRIPTION("SPEAr CPUFreq driver");
Expand Down

0 comments on commit 2449d33

Please sign in to comment.