Introduce the OMAP3630 OPPs including the defined OPP tuples.

Further information on OMAP3630 can be found here:
http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=12836&contentId=52606

OMAP36xx family introduces:
VDD1 with 4 OPPs, of which OPP3 & 4 are available only on devices yet
to be introduced in 36xx family. Meanwhile, VDD2 has 2 opps.

Device Support of OPPs->
           |<-3630-600->| (default)
           |<-      3630-800    ->| (device: TBD)
           |<-      3630-1000            ->| (device: TBD)
H/w OPP-> OPP50 OPP100       OPP-Turbo   OPP1G-SB
VDD1      OPP1  OPP2         OPP3        OPP4
VDD2      OPP1  OPP2         OPP2        OPP2

Note:
a) TI h/w naming for OPPs are now standardized in terms of OPP50, 100,
   Turbo and SB. This maps as shown above to the opp IDs (s/w term).
b) For boards which need custom VDD1/2 OPPs, the opp table can be
   updated by the board file on a need basis after the
   omap3_pm_init_opp_table call. The OPPs introduced here are the
   official OPP table at this point in time.

Cc: Benoit Cousson <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Madhusudhan Chikkature Rajashekar <[email protected]>
Cc: Paul Walmsley <[email protected]>
Cc: Romit Dasgupta <[email protected]>
Cc: Sanjeev Premi <[email protected]>
Cc: Santosh Shilimkar <[email protected]>
Cc: Sergio Alberto Aguirre Rodriguez <[email protected]>
Cc: Thara Gopinath <[email protected]>
Cc: Vishwanath Sripathy <[email protected]>

Signed-off-by: Nishanth Menon <[email protected]>
---
 arch/arm/mach-omap2/pm34xx.c |   49 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index ad21f5f..05ecf02 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -143,6 +143,41 @@ static struct omap_opp_def __initdata 
omap34xx_dsp_rate_table[] = {
        {.enabled = 0, .freq = 0, .u_volt = 0}
 };
 
+static struct omap_opp_def __initdata omap36xx_mpu_rate_table[] = {
+       /*OPP1 - OPP50*/
+       {.enabled = true,  .freq = 300000000, .u_volt = 930000},
+       /*OPP2 - OPP100*/
+       {.enabled = true,  .freq = 600000000, .u_volt = 1100000},
+       /*OPP3 - OPP-Turbo*/
+       {.enabled = false, .freq = 800000000, .u_volt = 1260000},
+       /*OPP4 - OPP-SB*/
+       {.enabled = false, .freq = 1000000000, .u_volt = 1310000},
+       /* Terminator */
+       {.enabled = 0, .freq = 0, .u_volt = 0}
+};
+
+static struct omap_opp_def __initdata omap36xx_l3_rate_table[] = {
+       /*OPP1 - OPP50 */
+       {.enabled = true, .freq = 100000000, .u_volt = 930000},
+       /*OPP2 - OPP100, OPP-Turbo, OPP-SB*/
+       {.enabled = true, .freq = 200000000, .u_volt = 1137500},
+       /* Terminator */
+       {.enabled = 0, .freq = 0, .u_volt = 0}
+};
+
+static struct omap_opp_def __initdata omap36xx_dsp_rate_table[] = {
+       /*OPP1 - OPP50*/
+       {.enabled = true,  .freq = 260000000, .u_volt = 930000},
+       /*OPP2 - OPP100*/
+       {.enabled = true,  .freq = 520000000, .u_volt = 1100000},
+       /*OPP3 - OPP-Turbo*/
+       {.enabled = false, .freq = 660000000, .u_volt = 1260000},
+       /*OPP4 - OPP-SB*/
+       {.enabled = false, .freq = 875000000, .u_volt = 1310000},
+       /* Terminator */
+       {.enabled = 0, .freq = 0, .u_volt = 0}
+};
+
 struct omap_opp *omap3_mpu_rate_table;
 struct omap_opp *omap3_dsp_rate_table;
 struct omap_opp *omap3_l3_rate_table;
@@ -1299,18 +1334,28 @@ static void __init configure_vc(void)
 void __init omap3_pm_init_opp_table(void)
 {
        int ret, i;
+       struct omap_opp_def **omap3_opp_def_list;
        struct omap_opp_def *omap34xx_opp_def_list[] = {
                omap34xx_mpu_rate_table,
                omap34xx_l3_rate_table,
                omap34xx_dsp_rate_table
        };
+       struct omap_opp_def *omap36xx_opp_def_list[] = {
+               omap36xx_mpu_rate_table,
+               omap36xx_l3_rate_table,
+               omap36xx_dsp_rate_table
+       };
        struct omap_opp **omap3_rate_tables[] = {
                &omap3_mpu_rate_table,
                &omap3_l3_rate_table,
                &omap3_dsp_rate_table
        };
-       for (i = 0; i < ARRAY_SIZE(omap34xx_opp_def_list); i++) {
-               ret = opp_init(omap3_rate_tables[i], omap34xx_opp_def_list[i]);
+
+       omap3_opp_def_list = cpu_is_omap3630() ? omap36xx_opp_def_list :
+                               omap34xx_opp_def_list;
+
+       for (i = 0; i < ARRAY_SIZE(omap3_rate_tables); i++) {
+               ret = opp_init(omap3_rate_tables[i], omap3_opp_def_list[i]);
                /* We dont want half configured system at the moment */
                BUG_ON(ret);
        }
-- 
1.6.3.3

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

Reply via email to