For board files which choose to override the defaults, the existing
mechanism will work, for boards that would like to work with defaults,
allow init_common_hw to call init_opp_table to initialize if not
already initialized. this will allow all omap boards which have opp
tables predefined for a silicon to use the same.

Originally reported for overo: 
http://marc.info/?t=127265269400004&r=1&w=2

Signed-off-by: Nishanth Menon <n...@ti.com>
Reported-by: Peter Tseng <tsenpe...@gmail.com>
Cc: Cliff Brake <cliff.br...@gmail.com>
Cc: Kevin Hilman <khil...@deeprootsystems.com>
---
NOTE: This makes rest of the current board omap3_pm_init_opp_table
calls redundant, but also allows for custom boards to go ahead and
customize their own custom OPPs in parallel.

 arch/arm/mach-omap2/cpufreq34xx.c |   11 +++++++++++
 arch/arm/mach-omap2/io.c          |    4 ++++
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/cpufreq34xx.c 
b/arch/arm/mach-omap2/cpufreq34xx.c
index 8747dd6..b9d75cf 100644
--- a/arch/arm/mach-omap2/cpufreq34xx.c
+++ b/arch/arm/mach-omap2/cpufreq34xx.c
@@ -110,6 +110,9 @@ static struct omap_opp_def __initdata 
omap36xx_dsp_rate_table[] = {
        OMAP_OPP_DEF(0, 0, 0)
 };
 
+/* Temp variable to allow multiple calls */
+static u8 __initdata omap3_table_init;
+
 int __init omap3_pm_init_opp_table(void)
 {
        int i, r;
@@ -130,6 +133,14 @@ int __init omap3_pm_init_opp_table(void)
                OPP_DSP
        };
 
+       /*
+        * Allow multiple calls, but initialize only if not already initalized
+        * even if the previous call failed, coz, no reason we'd succeed again
+        */
+       if (omap3_table_init)
+               return 0;
+       omap3_table_init = 1;
+
        omap3_opp_def_list = cpu_is_omap3630() ? omap36xx_opp_def_list :
                                omap34xx_opp_def_list;
 
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index 984bdbf..203c7e8 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -47,6 +47,7 @@
 #include "clockdomains.h"
 #include <plat/omap_hwmod.h>
 
+#include "omap3-opp.h"
 /*
  * The machine specific code may provide the extra mapping besides the
  * default mapping provided here.
@@ -307,6 +308,9 @@ static int __init _omap2_init_reprogram_sdrc(void)
 void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
                                 struct omap_sdrc_params *sdrc_cs1)
 {
+       /* initialize the opp table if board file has not done so */
+       omap3_pm_init_opp_table();
+
        pwrdm_init(powerdomains_omap);
        clkdm_init(clockdomains_omap, clkdm_autodeps);
        if (cpu_is_omap242x())
-- 
1.6.3.3

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to