* [PATCH/RFC 0/3] OMAP3: VC: first pass at common VC init
@ 2010-01-22 1:02 Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 1/3] OMAP3: VC: create common init code Kevin Hilman
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Kevin Hilman @ 2010-01-22 1:02 UTC (permalink / raw)
To: linux-omap, Lesly A M
In my reply to this series from Lesly:
[PATCH v2 0/6] omap3: pm: Update TRITON power scripts and making it generic
I made this proposal:
> Second, your series is making it clear we need some common VC init.
> And this common VC init should be probably be separated from PMIC
> init/setup. So before we go much further with this, I think it's time
> for some common VC infrastructure.
>
> So here's a proposal off the top of my head:
>
> - create new file(s): vc34xx.c, vc.h (or something like that)
> - move the common prm_setup_times init and structs there
> - move VC init from pm34xx.c (omap3_pm_init_vc, configure_vc, etc.)
>
> We'll then have all the VC init/setup in a single place.
To help get things moving along in that direction, I created
this series to get things started.
Comments are welcome.
This series applies on to of current PM branch, and is also available
in my tree as the branch 'pm-wip/vc',
Kevin
Kevin Hilman (3):
OMAP3: VC: create common init code
OMAP3: VC: simply struct copy in init_vc routine
OMAP3: VC: 3430SDP: remove prm_setup_vc, done in common VC code
arch/arm/mach-omap2/Makefile | 3 +-
arch/arm/mach-omap2/board-3430sdp.c | 18 ------
arch/arm/mach-omap2/pm.h | 25 ---------
arch/arm/mach-omap2/pm34xx.c | 91 -------------------------------
arch/arm/mach-omap2/vc.c | 102 +++++++++++++++++++++++++++++++++++
arch/arm/mach-omap2/vc.h | 47 ++++++++++++++++
6 files changed, 151 insertions(+), 135 deletions(-)
create mode 100644 arch/arm/mach-omap2/vc.c
create mode 100644 arch/arm/mach-omap2/vc.h
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH/RFC 1/3] OMAP3: VC: create common init code
2010-01-22 1:02 [PATCH/RFC 0/3] OMAP3: VC: first pass at common VC init Kevin Hilman
@ 2010-01-22 1:02 ` Kevin Hilman
2010-01-25 16:01 ` Cousson, Benoit
2010-01-25 19:32 ` Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 2/3] OMAP3: VC: simply struct copy in init_vc routine Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 3/3] OMAP3: VC: 3430SDP: remove prm_setup_vc, done in common VC code Kevin Hilman
2 siblings, 2 replies; 6+ messages in thread
From: Kevin Hilman @ 2010-01-22 1:02 UTC (permalink / raw)
To: linux-omap, Lesly A M
Move VC init code from PM core into separate VC core.
No functional changes.
---
arch/arm/mach-omap2/Makefile | 3 +-
arch/arm/mach-omap2/board-3430sdp.c | 1 +
arch/arm/mach-omap2/pm.h | 25 --------
arch/arm/mach-omap2/pm34xx.c | 91 ---------------------------
arch/arm/mach-omap2/vc.c | 116 +++++++++++++++++++++++++++++++++++
arch/arm/mach-omap2/vc.h | 47 ++++++++++++++
6 files changed, 166 insertions(+), 117 deletions(-)
create mode 100644 arch/arm/mach-omap2/vc.c
create mode 100644 arch/arm/mach-omap2/vc.h
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 4ca93f1..4c6f017 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -37,7 +37,8 @@ obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o
ifeq ($(CONFIG_PM),y)
obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o
obj-$(CONFIG_ARCH_OMAP24XX) += sleep24xx.o
-obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o
+obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o \
+ vc.o
obj-$(CONFIG_PM_DEBUG) += pm-debug.o
obj-$(CONFIG_OMAP_SMARTREFLEX) += smartreflex.o
endif
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 7d68445..65ab469 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -48,6 +48,7 @@
#include "mmc-twl4030.h"
#include "pm.h"
#include "omap3-opp.h"
+#include "vc.h"
#define SDP3430_TS_GPIO_IRQ_SDPV1 3
#define SDP3430_TS_GPIO_IRQ_SDPV2 2
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index 75aa685..78b5a06 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -40,31 +40,6 @@ inline void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
}
#endif
-struct prm_setup_vc {
- u16 clksetup;
- u16 voltsetup_time1;
- u16 voltsetup_time2;
- u16 voltoffset;
- u16 voltsetup2;
-/* PRM_VC_CMD_VAL_0 specific bits */
- u16 vdd0_on;
- u16 vdd0_onlp;
- u16 vdd0_ret;
- u16 vdd0_off;
-/* PRM_VC_CMD_VAL_1 specific bits */
- u16 vdd1_on;
- u16 vdd1_onlp;
- u16 vdd1_ret;
- u16 vdd1_off;
-};
-#ifdef CONFIG_PM
-extern void omap3_pm_init_vc(struct prm_setup_vc *setup_vc);
-#else
-static inline void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
-{
-}
-#endif
-
extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 190f25c..df437a5 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -95,22 +95,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
static struct powerdomain *core_pwrdm, *per_pwrdm;
static struct powerdomain *cam_pwrdm;
-static struct prm_setup_vc prm_setup = {
- .clksetup = 0xff,
- .voltsetup_time1 = 0xfff,
- .voltsetup_time2 = 0xfff,
- .voltoffset = 0xff,
- .voltsetup2 = 0xff,
- .vdd0_on = 0x30, /* 1.2v */
- .vdd0_onlp = 0x20, /* 1.0v */
- .vdd0_ret = 0x1e, /* 0.975v */
- .vdd0_off = 0x00, /* 0.6v */
- .vdd1_on = 0x2c, /* 1.15v */
- .vdd1_onlp = 0x20, /* 1.0v */
- .vdd1_ret = 0x1e, /* .975v */
- .vdd1_off = 0x00, /* 0.6v */
-};
-
static inline void omap3_per_save_context(void)
{
omap_gpio_save_context();
@@ -1072,26 +1056,6 @@ int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state)
return -EINVAL;
}
-void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
-{
- if (!setup_vc)
- return;
-
- prm_setup.clksetup = setup_vc->clksetup;
- prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
- prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
- prm_setup.voltoffset = setup_vc->voltoffset;
- prm_setup.voltsetup2 = setup_vc->voltsetup2;
- prm_setup.vdd0_on = setup_vc->vdd0_on;
- prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
- prm_setup.vdd0_ret = setup_vc->vdd0_ret;
- prm_setup.vdd0_off = setup_vc->vdd0_off;
- prm_setup.vdd1_on = setup_vc->vdd1_on;
- prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
- prm_setup.vdd1_ret = setup_vc->vdd1_ret;
- prm_setup.vdd1_off = setup_vc->vdd1_off;
-}
-
static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
{
struct power_state *pwrst;
@@ -1228,60 +1192,5 @@ err2:
return ret;
}
-static void __init configure_vc(void)
-{
-
- prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
- (R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
- OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
- prm_write_mod_reg((R_VDD2_SR_CONTROL << OMAP3430_VOLRA1_SHIFT) |
- (R_VDD1_SR_CONTROL << OMAP3430_VOLRA0_SHIFT),
- OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET);
-
- prm_write_mod_reg((prm_setup.vdd0_on << OMAP3430_VC_CMD_ON_SHIFT) |
- (prm_setup.vdd0_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
- (prm_setup.vdd0_ret << OMAP3430_VC_CMD_RET_SHIFT) |
- (prm_setup.vdd0_off << OMAP3430_VC_CMD_OFF_SHIFT),
- OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_0_OFFSET);
-
- prm_write_mod_reg((prm_setup.vdd1_on << OMAP3430_VC_CMD_ON_SHIFT) |
- (prm_setup.vdd1_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
- (prm_setup.vdd1_ret << OMAP3430_VC_CMD_RET_SHIFT) |
- (prm_setup.vdd1_off << OMAP3430_VC_CMD_OFF_SHIFT),
- OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_1_OFFSET);
-
- prm_write_mod_reg(OMAP3430_CMD1 | OMAP3430_RAV1, OMAP3430_GR_MOD,
- OMAP3_PRM_VC_CH_CONF_OFFSET);
-
- prm_write_mod_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN,
- OMAP3430_GR_MOD,
- OMAP3_PRM_VC_I2C_CFG_OFFSET);
-
- /* Write setup times */
- prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
- OMAP3_PRM_CLKSETUP_OFFSET);
- prm_write_mod_reg((prm_setup.voltsetup_time2 <<
- OMAP3430_SETUP_TIME2_SHIFT) |
- (prm_setup.voltsetup_time1 <<
- OMAP3430_SETUP_TIME1_SHIFT),
- OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
-
- prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
- OMAP3_PRM_VOLTOFFSET_OFFSET);
- prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
- OMAP3_PRM_VOLTSETUP2_OFFSET);
-}
-
-static int __init omap3_pm_early_init(void)
-{
- prm_clear_mod_reg_bits(OMAP3430_OFFMODE_POL, OMAP3430_GR_MOD,
- OMAP3_PRM_POLCTRL_OFFSET);
-
- configure_vc();
-
- return 0;
-}
-
-arch_initcall(omap3_pm_early_init);
late_initcall(omap3_pm_init);
diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
new file mode 100644
index 0000000..61d1e4a
--- /dev/null
+++ b/arch/arm/mach-omap2/vc.c
@@ -0,0 +1,116 @@
+/*
+ * OMAP 2/3 Voltage Controller
+ *
+ * Author: Kevin Hilman, Deep Root Systems, LLC
+ *
+ * Based originally on code from pm34xx.c
+ * Copyright (C) 2006-2008 Nokia Corporation
+ * Tony Lindgren <tony@atomide.com>
+ * Jouni Hogander
+ *
+ * Copyright (C) 2010 Deep Root Systems, LLC.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include "vc.h"
+#include "prm-regbits-34xx.h"
+#include "smartreflex.h"
+
+/* #include "prm.h" */
+
+static struct prm_setup_vc prm_setup = {
+ .clksetup = 0xff,
+ .voltsetup_time1 = 0xfff,
+ .voltsetup_time2 = 0xfff,
+ .voltoffset = 0xff,
+ .voltsetup2 = 0xff,
+ .vdd0_on = 0x30, /* 1.2v */
+ .vdd0_onlp = 0x20, /* 1.0v */
+ .vdd0_ret = 0x1e, /* 0.975v */
+ .vdd0_off = 0x00, /* 0.6v */
+ .vdd1_on = 0x2c, /* 1.15v */
+ .vdd1_onlp = 0x20, /* 1.0v */
+ .vdd1_ret = 0x1e, /* .975v */
+ .vdd1_off = 0x00, /* 0.6v */
+};
+
+void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
+{
+ if (!setup_vc)
+ return;
+
+ prm_setup.clksetup = setup_vc->clksetup;
+ prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
+ prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
+ prm_setup.voltoffset = setup_vc->voltoffset;
+ prm_setup.voltsetup2 = setup_vc->voltsetup2;
+ prm_setup.vdd0_on = setup_vc->vdd0_on;
+ prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
+ prm_setup.vdd0_ret = setup_vc->vdd0_ret;
+ prm_setup.vdd0_off = setup_vc->vdd0_off;
+ prm_setup.vdd1_on = setup_vc->vdd1_on;
+ prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
+ prm_setup.vdd1_ret = setup_vc->vdd1_ret;
+ prm_setup.vdd1_off = setup_vc->vdd1_off;
+}
+
+static void __init configure_vc(void)
+{
+
+ prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
+ (R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
+ OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
+ prm_write_mod_reg((R_VDD2_SR_CONTROL << OMAP3430_VOLRA1_SHIFT) |
+ (R_VDD1_SR_CONTROL << OMAP3430_VOLRA0_SHIFT),
+ OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET);
+
+ prm_write_mod_reg((prm_setup.vdd0_on << OMAP3430_VC_CMD_ON_SHIFT) |
+ (prm_setup.vdd0_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
+ (prm_setup.vdd0_ret << OMAP3430_VC_CMD_RET_SHIFT) |
+ (prm_setup.vdd0_off << OMAP3430_VC_CMD_OFF_SHIFT),
+ OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_0_OFFSET);
+
+ prm_write_mod_reg((prm_setup.vdd1_on << OMAP3430_VC_CMD_ON_SHIFT) |
+ (prm_setup.vdd1_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
+ (prm_setup.vdd1_ret << OMAP3430_VC_CMD_RET_SHIFT) |
+ (prm_setup.vdd1_off << OMAP3430_VC_CMD_OFF_SHIFT),
+ OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_1_OFFSET);
+
+ prm_write_mod_reg(OMAP3430_CMD1 | OMAP3430_RAV1, OMAP3430_GR_MOD,
+ OMAP3_PRM_VC_CH_CONF_OFFSET);
+
+ prm_write_mod_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN,
+ OMAP3430_GR_MOD,
+ OMAP3_PRM_VC_I2C_CFG_OFFSET);
+
+ /* Write setup times */
+ prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
+ OMAP3_PRM_CLKSETUP_OFFSET);
+ prm_write_mod_reg((prm_setup.voltsetup_time2 <<
+ OMAP3430_SETUP_TIME2_SHIFT) |
+ (prm_setup.voltsetup_time1 <<
+ OMAP3430_SETUP_TIME1_SHIFT),
+ OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
+
+ prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
+ OMAP3_PRM_VOLTOFFSET_OFFSET);
+ prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
+ OMAP3_PRM_VOLTSETUP2_OFFSET);
+}
+
+static int __init omap3_vc_early_init(void)
+{
+ prm_clear_mod_reg_bits(OMAP3430_OFFMODE_POL, OMAP3430_GR_MOD,
+ OMAP3_PRM_POLCTRL_OFFSET);
+
+ configure_vc();
+
+ return 0;
+}
+
+arch_initcall(omap3_vc_early_init);
diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
new file mode 100644
index 0000000..ba6dc1b
--- /dev/null
+++ b/arch/arm/mach-omap2/vc.h
@@ -0,0 +1,47 @@
+/*
+ * OMAP 2/3 Voltage Controller
+ *
+ * Author: Kevin Hilman, Deep Root Systems, LLC
+ *
+ * Based originally on code from pm34xx.c
+ * Copyright (C) 2006-2008 Nokia Corporation
+ * Tony Lindgren <tony@atomide.com>
+ * Jouni Hogander
+ *
+ * Copyright (C) 2010 Deep Root Systems, LLC.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+#ifndef __ARCH_ARM_MACH_OMAP2_VC_H
+#define __ARCH_ARM_MACH_OMAP2_VC_H
+
+#include <linux/types.h>
+
+struct prm_setup_vc {
+ u16 clksetup;
+ u16 voltsetup_time1;
+ u16 voltsetup_time2;
+ u16 voltoffset;
+ u16 voltsetup2;
+ /* PRM_VC_CMD_VAL_0 specific bits */
+ u16 vdd0_on;
+ u16 vdd0_onlp;
+ u16 vdd0_ret;
+ u16 vdd0_off;
+ /* PRM_VC_CMD_VAL_1 specific bits */
+ u16 vdd1_on;
+ u16 vdd1_onlp;
+ u16 vdd1_ret;
+ u16 vdd1_off;
+};
+#ifdef CONFIG_PM
+extern void omap3_pm_init_vc(struct prm_setup_vc *setup_vc);
+#else
+static inline void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
+{
+}
+#endif
+
+#endif
--
1.6.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH/RFC 2/3] OMAP3: VC: simply struct copy in init_vc routine
2010-01-22 1:02 [PATCH/RFC 0/3] OMAP3: VC: first pass at common VC init Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 1/3] OMAP3: VC: create common init code Kevin Hilman
@ 2010-01-22 1:02 ` Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 3/3] OMAP3: VC: 3430SDP: remove prm_setup_vc, done in common VC code Kevin Hilman
2 siblings, 0 replies; 6+ messages in thread
From: Kevin Hilman @ 2010-01-22 1:02 UTC (permalink / raw)
To: linux-omap, Lesly A M
Rather than copy each field, just to a struct copy.
---
arch/arm/mach-omap2/vc.c | 18 ++----------------
1 files changed, 2 insertions(+), 16 deletions(-)
diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index 61d1e4a..c238002 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -41,22 +41,8 @@ static struct prm_setup_vc prm_setup = {
void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
{
- if (!setup_vc)
- return;
-
- prm_setup.clksetup = setup_vc->clksetup;
- prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
- prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
- prm_setup.voltoffset = setup_vc->voltoffset;
- prm_setup.voltsetup2 = setup_vc->voltsetup2;
- prm_setup.vdd0_on = setup_vc->vdd0_on;
- prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
- prm_setup.vdd0_ret = setup_vc->vdd0_ret;
- prm_setup.vdd0_off = setup_vc->vdd0_off;
- prm_setup.vdd1_on = setup_vc->vdd1_on;
- prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
- prm_setup.vdd1_ret = setup_vc->vdd1_ret;
- prm_setup.vdd1_off = setup_vc->vdd1_off;
+ if (setup_vc)
+ prm_setup = *setup_vc;
}
static void __init configure_vc(void)
--
1.6.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH/RFC 3/3] OMAP3: VC: 3430SDP: remove prm_setup_vc, done in common VC code
2010-01-22 1:02 [PATCH/RFC 0/3] OMAP3: VC: first pass at common VC init Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 1/3] OMAP3: VC: create common init code Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 2/3] OMAP3: VC: simply struct copy in init_vc routine Kevin Hilman
@ 2010-01-22 1:02 ` Kevin Hilman
2 siblings, 0 replies; 6+ messages in thread
From: Kevin Hilman @ 2010-01-22 1:02 UTC (permalink / raw)
To: linux-omap, Lesly A M
OMAP3430SDP board can use the common default values defined in
VC init code. No need to define custom values in board file.
---
arch/arm/mach-omap2/board-3430sdp.c | 19 -------------------
1 files changed, 0 insertions(+), 19 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 65ab469..c924950 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -48,7 +48,6 @@
#include "mmc-twl4030.h"
#include "pm.h"
#include "omap3-opp.h"
-#include "vc.h"
#define SDP3430_TS_GPIO_IRQ_SDPV1 3
#define SDP3430_TS_GPIO_IRQ_SDPV2 2
@@ -76,23 +75,6 @@ static struct cpuidle_params omap3_cpuidle_params_table[] = {
{1, 10000, 30000, 300000},
};
-/* FIXME: These are not the optimal setup values to be used on 3430sdp*/
-static struct prm_setup_vc omap3_setuptime_table = {
- .clksetup = 0xff,
- .voltsetup_time1 = 0xfff,
- .voltsetup_time2 = 0xfff,
- .voltoffset = 0xff,
- .voltsetup2 = 0xff,
- .vdd0_on = 0x30,
- .vdd0_onlp = 0x20,
- .vdd0_ret = 0x1e,
- .vdd0_off = 0x00,
- .vdd1_on = 0x2c,
- .vdd1_onlp = 0x20,
- .vdd1_ret = 0x1e,
- .vdd1_off = 0x00,
-};
-
static int board_keymap[] = {
KEY(0, 0, KEY_LEFT),
KEY(0, 1, KEY_RIGHT),
@@ -344,7 +326,6 @@ static void __init omap_3430sdp_init_irq(void)
omap_board_config = sdp3430_config;
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
- omap3_pm_init_vc(&omap3_setuptime_table);
omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL, omap3_mpu_rate_table,
omap3_dsp_rate_table, omap3_l3_rate_table);
omap_init_irq();
--
1.6.6
^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: [PATCH/RFC 1/3] OMAP3: VC: create common init code
2010-01-22 1:02 ` [PATCH/RFC 1/3] OMAP3: VC: create common init code Kevin Hilman
@ 2010-01-25 16:01 ` Cousson, Benoit
2010-01-25 19:32 ` Kevin Hilman
1 sibling, 0 replies; 6+ messages in thread
From: Cousson, Benoit @ 2010-01-25 16:01 UTC (permalink / raw)
To: Kevin Hilman, linux-omap@vger.kernel.org, Manuel, Lesly Arackal
Hi Kevin,
>From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>owner@vger.kernel.org] On Behalf Of Kevin Hilman
>
>Move VC init code from PM core into separate VC core.
>
>No functional changes.
>---
> arch/arm/mach-omap2/Makefile | 3 +-
> arch/arm/mach-omap2/board-3430sdp.c | 1 +
> arch/arm/mach-omap2/pm.h | 25 --------
> arch/arm/mach-omap2/pm34xx.c | 91 ---------------------------
> arch/arm/mach-omap2/vc.c | 116
>+++++++++++++++++++++++++++++++++++
> arch/arm/mach-omap2/vc.h | 47 ++++++++++++++
> 6 files changed, 166 insertions(+), 117 deletions(-)
> create mode 100644 arch/arm/mach-omap2/vc.c
> create mode 100644 arch/arm/mach-omap2/vc.h
>
>diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
>index 4ca93f1..4c6f017 100644
>--- a/arch/arm/mach-omap2/Makefile
>+++ b/arch/arm/mach-omap2/Makefile
>@@ -37,7 +37,8 @@ obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o
> ifeq ($(CONFIG_PM),y)
> obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o
> obj-$(CONFIG_ARCH_OMAP24XX) += sleep24xx.o
>-obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o
>+obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o \
>+ vc.o
> obj-$(CONFIG_PM_DEBUG) += pm-debug.o
> obj-$(CONFIG_OMAP_SMARTREFLEX) += smartreflex.o
> endif
>diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-
>omap2/board-3430sdp.c
>index 7d68445..65ab469 100644
>--- a/arch/arm/mach-omap2/board-3430sdp.c
>+++ b/arch/arm/mach-omap2/board-3430sdp.c
>@@ -48,6 +48,7 @@
> #include "mmc-twl4030.h"
> #include "pm.h"
> #include "omap3-opp.h"
>+#include "vc.h"
>
> #define SDP3430_TS_GPIO_IRQ_SDPV1 3
> #define SDP3430_TS_GPIO_IRQ_SDPV2 2
>diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
>index 75aa685..78b5a06 100644
>--- a/arch/arm/mach-omap2/pm.h
>+++ b/arch/arm/mach-omap2/pm.h
>@@ -40,31 +40,6 @@ inline void omap3_pm_init_cpuidle(struct cpuidle_params
>*cpuidle_board_params)
> }
> #endif
>
>-struct prm_setup_vc {
>- u16 clksetup;
>- u16 voltsetup_time1;
>- u16 voltsetup_time2;
>- u16 voltoffset;
>- u16 voltsetup2;
>-/* PRM_VC_CMD_VAL_0 specific bits */
>- u16 vdd0_on;
>- u16 vdd0_onlp;
>- u16 vdd0_ret;
>- u16 vdd0_off;
>-/* PRM_VC_CMD_VAL_1 specific bits */
>- u16 vdd1_on;
>- u16 vdd1_onlp;
>- u16 vdd1_ret;
>- u16 vdd1_off;
>-};
>-#ifdef CONFIG_PM
>-extern void omap3_pm_init_vc(struct prm_setup_vc *setup_vc);
>-#else
>-static inline void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
>-{
>-}
>-#endif
>-
> extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
> extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int
>state);
>
>diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
>index 190f25c..df437a5 100644
>--- a/arch/arm/mach-omap2/pm34xx.c
>+++ b/arch/arm/mach-omap2/pm34xx.c
>@@ -95,22 +95,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
> static struct powerdomain *core_pwrdm, *per_pwrdm;
> static struct powerdomain *cam_pwrdm;
>
>-static struct prm_setup_vc prm_setup = {
>- .clksetup = 0xff,
>- .voltsetup_time1 = 0xfff,
>- .voltsetup_time2 = 0xfff,
>- .voltoffset = 0xff,
>- .voltsetup2 = 0xff,
>- .vdd0_on = 0x30, /* 1.2v */
>- .vdd0_onlp = 0x20, /* 1.0v */
>- .vdd0_ret = 0x1e, /* 0.975v */
>- .vdd0_off = 0x00, /* 0.6v */
>- .vdd1_on = 0x2c, /* 1.15v */
>- .vdd1_onlp = 0x20, /* 1.0v */
>- .vdd1_ret = 0x1e, /* .975v */
>- .vdd1_off = 0x00, /* 0.6v */
>-};
>-
> static inline void omap3_per_save_context(void)
> {
> omap_gpio_save_context();
>@@ -1072,26 +1056,6 @@ int omap3_pm_set_suspend_state(struct powerdomain
>*pwrdm, int state)
> return -EINVAL;
> }
>
>-void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
>-{
>- if (!setup_vc)
>- return;
>-
>- prm_setup.clksetup = setup_vc->clksetup;
>- prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
>- prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
>- prm_setup.voltoffset = setup_vc->voltoffset;
>- prm_setup.voltsetup2 = setup_vc->voltsetup2;
>- prm_setup.vdd0_on = setup_vc->vdd0_on;
>- prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
>- prm_setup.vdd0_ret = setup_vc->vdd0_ret;
>- prm_setup.vdd0_off = setup_vc->vdd0_off;
>- prm_setup.vdd1_on = setup_vc->vdd1_on;
>- prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
>- prm_setup.vdd1_ret = setup_vc->vdd1_ret;
>- prm_setup.vdd1_off = setup_vc->vdd1_off;
>-}
>-
> static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
> {
> struct power_state *pwrst;
>@@ -1228,60 +1192,5 @@ err2:
> return ret;
> }
>
>-static void __init configure_vc(void)
>-{
>-
>- prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
>- (R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
>- OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
>- prm_write_mod_reg((R_VDD2_SR_CONTROL << OMAP3430_VOLRA1_SHIFT) |
>- (R_VDD1_SR_CONTROL << OMAP3430_VOLRA0_SHIFT),
>- OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET);
>-
>- prm_write_mod_reg((prm_setup.vdd0_on << OMAP3430_VC_CMD_ON_SHIFT) |
>- (prm_setup.vdd0_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
>- (prm_setup.vdd0_ret << OMAP3430_VC_CMD_RET_SHIFT) |
>- (prm_setup.vdd0_off << OMAP3430_VC_CMD_OFF_SHIFT),
>- OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_0_OFFSET);
>-
>- prm_write_mod_reg((prm_setup.vdd1_on << OMAP3430_VC_CMD_ON_SHIFT) |
>- (prm_setup.vdd1_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
>- (prm_setup.vdd1_ret << OMAP3430_VC_CMD_RET_SHIFT) |
>- (prm_setup.vdd1_off << OMAP3430_VC_CMD_OFF_SHIFT),
>- OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_1_OFFSET);
>-
>- prm_write_mod_reg(OMAP3430_CMD1 | OMAP3430_RAV1, OMAP3430_GR_MOD,
>- OMAP3_PRM_VC_CH_CONF_OFFSET);
>-
>- prm_write_mod_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN,
>- OMAP3430_GR_MOD,
>- OMAP3_PRM_VC_I2C_CFG_OFFSET);
>-
>- /* Write setup times */
>- prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
>- OMAP3_PRM_CLKSETUP_OFFSET);
>- prm_write_mod_reg((prm_setup.voltsetup_time2 <<
>- OMAP3430_SETUP_TIME2_SHIFT) |
>- (prm_setup.voltsetup_time1 <<
>- OMAP3430_SETUP_TIME1_SHIFT),
>- OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
>-
>- prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
>- OMAP3_PRM_VOLTOFFSET_OFFSET);
>- prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
>- OMAP3_PRM_VOLTSETUP2_OFFSET);
>-}
>-
>-static int __init omap3_pm_early_init(void)
>-{
>- prm_clear_mod_reg_bits(OMAP3430_OFFMODE_POL, OMAP3430_GR_MOD,
>- OMAP3_PRM_POLCTRL_OFFSET);
>-
>- configure_vc();
>-
>- return 0;
>-}
>-
>-arch_initcall(omap3_pm_early_init);
> late_initcall(omap3_pm_init);
>
>diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
>new file mode 100644
>index 0000000..61d1e4a
>--- /dev/null
>+++ b/arch/arm/mach-omap2/vc.c
>@@ -0,0 +1,116 @@
>+/*
>+ * OMAP 2/3 Voltage Controller
>+ *
>+ * Author: Kevin Hilman, Deep Root Systems, LLC
>+ *
>+ * Based originally on code from pm34xx.c
>+ * Copyright (C) 2006-2008 Nokia Corporation
>+ * Tony Lindgren <tony@atomide.com>
>+ * Jouni Hogander
>+ *
>+ * Copyright (C) 2010 Deep Root Systems, LLC.
>+ *
>+ * This file is licensed under the terms of the GNU General Public
>+ * License version 2. This program is licensed "as is" without any
>+ * warranty of any kind, whether express or implied.
>+ */
>+#include <linux/kernel.h>
>+#include <linux/init.h>
>+
>+#include "vc.h"
>+#include "prm-regbits-34xx.h"
>+#include "smartreflex.h"
>+
>+/* #include "prm.h" */
>+
>+static struct prm_setup_vc prm_setup = {
>+ .clksetup = 0xff,
>+ .voltsetup_time1 = 0xfff,
>+ .voltsetup_time2 = 0xfff,
>+ .voltoffset = 0xff,
>+ .voltsetup2 = 0xff,
>+ .vdd0_on = 0x30, /* 1.2v */
>+ .vdd0_onlp = 0x20, /* 1.0v */
>+ .vdd0_ret = 0x1e, /* 0.975v */
>+ .vdd0_off = 0x00, /* 0.6v */
>+ .vdd1_on = 0x2c, /* 1.15v */
>+ .vdd1_onlp = 0x20, /* 1.0v */
>+ .vdd1_ret = 0x1e, /* .975v */
>+ .vdd1_off = 0x00, /* 0.6v */
That second part is per voltage rail, and thus should be potentially in an array in order to allow the support of various voltage partition and OMAP4 particularly.
Regards,
Benoit
>+};
>+
>+void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
>+{
>+ if (!setup_vc)
>+ return;
>+
>+ prm_setup.clksetup = setup_vc->clksetup;
>+ prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
>+ prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
>+ prm_setup.voltoffset = setup_vc->voltoffset;
>+ prm_setup.voltsetup2 = setup_vc->voltsetup2;
>+ prm_setup.vdd0_on = setup_vc->vdd0_on;
>+ prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
>+ prm_setup.vdd0_ret = setup_vc->vdd0_ret;
>+ prm_setup.vdd0_off = setup_vc->vdd0_off;
>+ prm_setup.vdd1_on = setup_vc->vdd1_on;
>+ prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
>+ prm_setup.vdd1_ret = setup_vc->vdd1_ret;
>+ prm_setup.vdd1_off = setup_vc->vdd1_off;
>+}
>+
>+static void __init configure_vc(void)
>+{
>+
>+ prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
>+ (R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
>+ OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
>+ prm_write_mod_reg((R_VDD2_SR_CONTROL << OMAP3430_VOLRA1_SHIFT) |
>+ (R_VDD1_SR_CONTROL << OMAP3430_VOLRA0_SHIFT),
>+ OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET);
>+
>+ prm_write_mod_reg((prm_setup.vdd0_on << OMAP3430_VC_CMD_ON_SHIFT) |
>+ (prm_setup.vdd0_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
>+ (prm_setup.vdd0_ret << OMAP3430_VC_CMD_RET_SHIFT) |
>+ (prm_setup.vdd0_off << OMAP3430_VC_CMD_OFF_SHIFT),
>+ OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_0_OFFSET);
>+
>+ prm_write_mod_reg((prm_setup.vdd1_on << OMAP3430_VC_CMD_ON_SHIFT) |
>+ (prm_setup.vdd1_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
>+ (prm_setup.vdd1_ret << OMAP3430_VC_CMD_RET_SHIFT) |
>+ (prm_setup.vdd1_off << OMAP3430_VC_CMD_OFF_SHIFT),
>+ OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_1_OFFSET);
>+
>+ prm_write_mod_reg(OMAP3430_CMD1 | OMAP3430_RAV1, OMAP3430_GR_MOD,
>+ OMAP3_PRM_VC_CH_CONF_OFFSET);
>+
>+ prm_write_mod_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN,
>+ OMAP3430_GR_MOD,
>+ OMAP3_PRM_VC_I2C_CFG_OFFSET);
>+
>+ /* Write setup times */
>+ prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
>+ OMAP3_PRM_CLKSETUP_OFFSET);
>+ prm_write_mod_reg((prm_setup.voltsetup_time2 <<
>+ OMAP3430_SETUP_TIME2_SHIFT) |
>+ (prm_setup.voltsetup_time1 <<
>+ OMAP3430_SETUP_TIME1_SHIFT),
>+ OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
>+
>+ prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
>+ OMAP3_PRM_VOLTOFFSET_OFFSET);
>+ prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
>+ OMAP3_PRM_VOLTSETUP2_OFFSET);
>+}
>+
>+static int __init omap3_vc_early_init(void)
>+{
>+ prm_clear_mod_reg_bits(OMAP3430_OFFMODE_POL, OMAP3430_GR_MOD,
>+ OMAP3_PRM_POLCTRL_OFFSET);
>+
>+ configure_vc();
>+
>+ return 0;
>+}
>+
>+arch_initcall(omap3_vc_early_init);
>diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
>new file mode 100644
>index 0000000..ba6dc1b
>--- /dev/null
>+++ b/arch/arm/mach-omap2/vc.h
>@@ -0,0 +1,47 @@
>+/*
>+ * OMAP 2/3 Voltage Controller
>+ *
>+ * Author: Kevin Hilman, Deep Root Systems, LLC
>+ *
>+ * Based originally on code from pm34xx.c
>+ * Copyright (C) 2006-2008 Nokia Corporation
>+ * Tony Lindgren <tony@atomide.com>
>+ * Jouni Hogander
>+ *
>+ * Copyright (C) 2010 Deep Root Systems, LLC.
>+ *
>+ * This file is licensed under the terms of the GNU General Public
>+ * License version 2. This program is licensed "as is" without any
>+ * warranty of any kind, whether express or implied.
>+ */
>+#ifndef __ARCH_ARM_MACH_OMAP2_VC_H
>+#define __ARCH_ARM_MACH_OMAP2_VC_H
>+
>+#include <linux/types.h>
>+
>+struct prm_setup_vc {
>+ u16 clksetup;
>+ u16 voltsetup_time1;
>+ u16 voltsetup_time2;
>+ u16 voltoffset;
>+ u16 voltsetup2;
>+ /* PRM_VC_CMD_VAL_0 specific bits */
>+ u16 vdd0_on;
>+ u16 vdd0_onlp;
>+ u16 vdd0_ret;
>+ u16 vdd0_off;
>+ /* PRM_VC_CMD_VAL_1 specific bits */
>+ u16 vdd1_on;
>+ u16 vdd1_onlp;
>+ u16 vdd1_ret;
>+ u16 vdd1_off;
>+};
>+#ifdef CONFIG_PM
>+extern void omap3_pm_init_vc(struct prm_setup_vc *setup_vc);
>+#else
>+static inline void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
>+{
>+}
>+#endif
>+
>+#endif
>--
>1.6.6
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-omap" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
Texas Instruments France SA, 821 Avenue Jack Kilby, 06270 Villeneuve Loubet. 036 420 040 R.C.S Antibes. Capital de EUR 753.920
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH/RFC 1/3] OMAP3: VC: create common init code
2010-01-22 1:02 ` [PATCH/RFC 1/3] OMAP3: VC: create common init code Kevin Hilman
2010-01-25 16:01 ` Cousson, Benoit
@ 2010-01-25 19:32 ` Kevin Hilman
1 sibling, 0 replies; 6+ messages in thread
From: Kevin Hilman @ 2010-01-25 19:32 UTC (permalink / raw)
To: linux-omap; +Cc: Lesly A M
Kevin Hilman <khilman@deeprootsystems.com> writes:
> Move VC init code from PM core into separate VC core.
>
> No functional changes.
FYI... retracting this patch as Thara is working on the same reorg as part of
the SmartReflex rework.
Kevin
> ---
> arch/arm/mach-omap2/Makefile | 3 +-
> arch/arm/mach-omap2/board-3430sdp.c | 1 +
> arch/arm/mach-omap2/pm.h | 25 --------
> arch/arm/mach-omap2/pm34xx.c | 91 ---------------------------
> arch/arm/mach-omap2/vc.c | 116 +++++++++++++++++++++++++++++++++++
> arch/arm/mach-omap2/vc.h | 47 ++++++++++++++
> 6 files changed, 166 insertions(+), 117 deletions(-)
> create mode 100644 arch/arm/mach-omap2/vc.c
> create mode 100644 arch/arm/mach-omap2/vc.h
>
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 4ca93f1..4c6f017 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -37,7 +37,8 @@ obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o
> ifeq ($(CONFIG_PM),y)
> obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o
> obj-$(CONFIG_ARCH_OMAP24XX) += sleep24xx.o
> -obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o
> +obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o \
> + vc.o
> obj-$(CONFIG_PM_DEBUG) += pm-debug.o
> obj-$(CONFIG_OMAP_SMARTREFLEX) += smartreflex.o
> endif
> diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
> index 7d68445..65ab469 100644
> --- a/arch/arm/mach-omap2/board-3430sdp.c
> +++ b/arch/arm/mach-omap2/board-3430sdp.c
> @@ -48,6 +48,7 @@
> #include "mmc-twl4030.h"
> #include "pm.h"
> #include "omap3-opp.h"
> +#include "vc.h"
>
> #define SDP3430_TS_GPIO_IRQ_SDPV1 3
> #define SDP3430_TS_GPIO_IRQ_SDPV2 2
> diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
> index 75aa685..78b5a06 100644
> --- a/arch/arm/mach-omap2/pm.h
> +++ b/arch/arm/mach-omap2/pm.h
> @@ -40,31 +40,6 @@ inline void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
> }
> #endif
>
> -struct prm_setup_vc {
> - u16 clksetup;
> - u16 voltsetup_time1;
> - u16 voltsetup_time2;
> - u16 voltoffset;
> - u16 voltsetup2;
> -/* PRM_VC_CMD_VAL_0 specific bits */
> - u16 vdd0_on;
> - u16 vdd0_onlp;
> - u16 vdd0_ret;
> - u16 vdd0_off;
> -/* PRM_VC_CMD_VAL_1 specific bits */
> - u16 vdd1_on;
> - u16 vdd1_onlp;
> - u16 vdd1_ret;
> - u16 vdd1_off;
> -};
> -#ifdef CONFIG_PM
> -extern void omap3_pm_init_vc(struct prm_setup_vc *setup_vc);
> -#else
> -static inline void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
> -{
> -}
> -#endif
> -
> extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
> extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
>
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index 190f25c..df437a5 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -95,22 +95,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
> static struct powerdomain *core_pwrdm, *per_pwrdm;
> static struct powerdomain *cam_pwrdm;
>
> -static struct prm_setup_vc prm_setup = {
> - .clksetup = 0xff,
> - .voltsetup_time1 = 0xfff,
> - .voltsetup_time2 = 0xfff,
> - .voltoffset = 0xff,
> - .voltsetup2 = 0xff,
> - .vdd0_on = 0x30, /* 1.2v */
> - .vdd0_onlp = 0x20, /* 1.0v */
> - .vdd0_ret = 0x1e, /* 0.975v */
> - .vdd0_off = 0x00, /* 0.6v */
> - .vdd1_on = 0x2c, /* 1.15v */
> - .vdd1_onlp = 0x20, /* 1.0v */
> - .vdd1_ret = 0x1e, /* .975v */
> - .vdd1_off = 0x00, /* 0.6v */
> -};
> -
> static inline void omap3_per_save_context(void)
> {
> omap_gpio_save_context();
> @@ -1072,26 +1056,6 @@ int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state)
> return -EINVAL;
> }
>
> -void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
> -{
> - if (!setup_vc)
> - return;
> -
> - prm_setup.clksetup = setup_vc->clksetup;
> - prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
> - prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
> - prm_setup.voltoffset = setup_vc->voltoffset;
> - prm_setup.voltsetup2 = setup_vc->voltsetup2;
> - prm_setup.vdd0_on = setup_vc->vdd0_on;
> - prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
> - prm_setup.vdd0_ret = setup_vc->vdd0_ret;
> - prm_setup.vdd0_off = setup_vc->vdd0_off;
> - prm_setup.vdd1_on = setup_vc->vdd1_on;
> - prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
> - prm_setup.vdd1_ret = setup_vc->vdd1_ret;
> - prm_setup.vdd1_off = setup_vc->vdd1_off;
> -}
> -
> static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
> {
> struct power_state *pwrst;
> @@ -1228,60 +1192,5 @@ err2:
> return ret;
> }
>
> -static void __init configure_vc(void)
> -{
> -
> - prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
> - (R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
> - OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
> - prm_write_mod_reg((R_VDD2_SR_CONTROL << OMAP3430_VOLRA1_SHIFT) |
> - (R_VDD1_SR_CONTROL << OMAP3430_VOLRA0_SHIFT),
> - OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET);
> -
> - prm_write_mod_reg((prm_setup.vdd0_on << OMAP3430_VC_CMD_ON_SHIFT) |
> - (prm_setup.vdd0_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
> - (prm_setup.vdd0_ret << OMAP3430_VC_CMD_RET_SHIFT) |
> - (prm_setup.vdd0_off << OMAP3430_VC_CMD_OFF_SHIFT),
> - OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_0_OFFSET);
> -
> - prm_write_mod_reg((prm_setup.vdd1_on << OMAP3430_VC_CMD_ON_SHIFT) |
> - (prm_setup.vdd1_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
> - (prm_setup.vdd1_ret << OMAP3430_VC_CMD_RET_SHIFT) |
> - (prm_setup.vdd1_off << OMAP3430_VC_CMD_OFF_SHIFT),
> - OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_1_OFFSET);
> -
> - prm_write_mod_reg(OMAP3430_CMD1 | OMAP3430_RAV1, OMAP3430_GR_MOD,
> - OMAP3_PRM_VC_CH_CONF_OFFSET);
> -
> - prm_write_mod_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN,
> - OMAP3430_GR_MOD,
> - OMAP3_PRM_VC_I2C_CFG_OFFSET);
> -
> - /* Write setup times */
> - prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
> - OMAP3_PRM_CLKSETUP_OFFSET);
> - prm_write_mod_reg((prm_setup.voltsetup_time2 <<
> - OMAP3430_SETUP_TIME2_SHIFT) |
> - (prm_setup.voltsetup_time1 <<
> - OMAP3430_SETUP_TIME1_SHIFT),
> - OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
> -
> - prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
> - OMAP3_PRM_VOLTOFFSET_OFFSET);
> - prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
> - OMAP3_PRM_VOLTSETUP2_OFFSET);
> -}
> -
> -static int __init omap3_pm_early_init(void)
> -{
> - prm_clear_mod_reg_bits(OMAP3430_OFFMODE_POL, OMAP3430_GR_MOD,
> - OMAP3_PRM_POLCTRL_OFFSET);
> -
> - configure_vc();
> -
> - return 0;
> -}
> -
> -arch_initcall(omap3_pm_early_init);
> late_initcall(omap3_pm_init);
>
> diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
> new file mode 100644
> index 0000000..61d1e4a
> --- /dev/null
> +++ b/arch/arm/mach-omap2/vc.c
> @@ -0,0 +1,116 @@
> +/*
> + * OMAP 2/3 Voltage Controller
> + *
> + * Author: Kevin Hilman, Deep Root Systems, LLC
> + *
> + * Based originally on code from pm34xx.c
> + * Copyright (C) 2006-2008 Nokia Corporation
> + * Tony Lindgren <tony@atomide.com>
> + * Jouni Hogander
> + *
> + * Copyright (C) 2010 Deep Root Systems, LLC.
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2. This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +
> +#include "vc.h"
> +#include "prm-regbits-34xx.h"
> +#include "smartreflex.h"
> +
> +/* #include "prm.h" */
> +
> +static struct prm_setup_vc prm_setup = {
> + .clksetup = 0xff,
> + .voltsetup_time1 = 0xfff,
> + .voltsetup_time2 = 0xfff,
> + .voltoffset = 0xff,
> + .voltsetup2 = 0xff,
> + .vdd0_on = 0x30, /* 1.2v */
> + .vdd0_onlp = 0x20, /* 1.0v */
> + .vdd0_ret = 0x1e, /* 0.975v */
> + .vdd0_off = 0x00, /* 0.6v */
> + .vdd1_on = 0x2c, /* 1.15v */
> + .vdd1_onlp = 0x20, /* 1.0v */
> + .vdd1_ret = 0x1e, /* .975v */
> + .vdd1_off = 0x00, /* 0.6v */
> +};
> +
> +void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
> +{
> + if (!setup_vc)
> + return;
> +
> + prm_setup.clksetup = setup_vc->clksetup;
> + prm_setup.voltsetup_time1 = setup_vc->voltsetup_time1;
> + prm_setup.voltsetup_time2 = setup_vc->voltsetup_time2;
> + prm_setup.voltoffset = setup_vc->voltoffset;
> + prm_setup.voltsetup2 = setup_vc->voltsetup2;
> + prm_setup.vdd0_on = setup_vc->vdd0_on;
> + prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
> + prm_setup.vdd0_ret = setup_vc->vdd0_ret;
> + prm_setup.vdd0_off = setup_vc->vdd0_off;
> + prm_setup.vdd1_on = setup_vc->vdd1_on;
> + prm_setup.vdd1_onlp = setup_vc->vdd1_onlp;
> + prm_setup.vdd1_ret = setup_vc->vdd1_ret;
> + prm_setup.vdd1_off = setup_vc->vdd1_off;
> +}
> +
> +static void __init configure_vc(void)
> +{
> +
> + prm_write_mod_reg((R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA1_SHIFT) |
> + (R_SRI2C_SLAVE_ADDR << OMAP3430_SMPS_SA0_SHIFT),
> + OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_SA_OFFSET);
> + prm_write_mod_reg((R_VDD2_SR_CONTROL << OMAP3430_VOLRA1_SHIFT) |
> + (R_VDD1_SR_CONTROL << OMAP3430_VOLRA0_SHIFT),
> + OMAP3430_GR_MOD, OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET);
> +
> + prm_write_mod_reg((prm_setup.vdd0_on << OMAP3430_VC_CMD_ON_SHIFT) |
> + (prm_setup.vdd0_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
> + (prm_setup.vdd0_ret << OMAP3430_VC_CMD_RET_SHIFT) |
> + (prm_setup.vdd0_off << OMAP3430_VC_CMD_OFF_SHIFT),
> + OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_0_OFFSET);
> +
> + prm_write_mod_reg((prm_setup.vdd1_on << OMAP3430_VC_CMD_ON_SHIFT) |
> + (prm_setup.vdd1_onlp << OMAP3430_VC_CMD_ONLP_SHIFT) |
> + (prm_setup.vdd1_ret << OMAP3430_VC_CMD_RET_SHIFT) |
> + (prm_setup.vdd1_off << OMAP3430_VC_CMD_OFF_SHIFT),
> + OMAP3430_GR_MOD, OMAP3_PRM_VC_CMD_VAL_1_OFFSET);
> +
> + prm_write_mod_reg(OMAP3430_CMD1 | OMAP3430_RAV1, OMAP3430_GR_MOD,
> + OMAP3_PRM_VC_CH_CONF_OFFSET);
> +
> + prm_write_mod_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN,
> + OMAP3430_GR_MOD,
> + OMAP3_PRM_VC_I2C_CFG_OFFSET);
> +
> + /* Write setup times */
> + prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
> + OMAP3_PRM_CLKSETUP_OFFSET);
> + prm_write_mod_reg((prm_setup.voltsetup_time2 <<
> + OMAP3430_SETUP_TIME2_SHIFT) |
> + (prm_setup.voltsetup_time1 <<
> + OMAP3430_SETUP_TIME1_SHIFT),
> + OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
> +
> + prm_write_mod_reg(prm_setup.voltoffset, OMAP3430_GR_MOD,
> + OMAP3_PRM_VOLTOFFSET_OFFSET);
> + prm_write_mod_reg(prm_setup.voltsetup2, OMAP3430_GR_MOD,
> + OMAP3_PRM_VOLTSETUP2_OFFSET);
> +}
> +
> +static int __init omap3_vc_early_init(void)
> +{
> + prm_clear_mod_reg_bits(OMAP3430_OFFMODE_POL, OMAP3430_GR_MOD,
> + OMAP3_PRM_POLCTRL_OFFSET);
> +
> + configure_vc();
> +
> + return 0;
> +}
> +
> +arch_initcall(omap3_vc_early_init);
> diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
> new file mode 100644
> index 0000000..ba6dc1b
> --- /dev/null
> +++ b/arch/arm/mach-omap2/vc.h
> @@ -0,0 +1,47 @@
> +/*
> + * OMAP 2/3 Voltage Controller
> + *
> + * Author: Kevin Hilman, Deep Root Systems, LLC
> + *
> + * Based originally on code from pm34xx.c
> + * Copyright (C) 2006-2008 Nokia Corporation
> + * Tony Lindgren <tony@atomide.com>
> + * Jouni Hogander
> + *
> + * Copyright (C) 2010 Deep Root Systems, LLC.
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2. This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +#ifndef __ARCH_ARM_MACH_OMAP2_VC_H
> +#define __ARCH_ARM_MACH_OMAP2_VC_H
> +
> +#include <linux/types.h>
> +
> +struct prm_setup_vc {
> + u16 clksetup;
> + u16 voltsetup_time1;
> + u16 voltsetup_time2;
> + u16 voltoffset;
> + u16 voltsetup2;
> + /* PRM_VC_CMD_VAL_0 specific bits */
> + u16 vdd0_on;
> + u16 vdd0_onlp;
> + u16 vdd0_ret;
> + u16 vdd0_off;
> + /* PRM_VC_CMD_VAL_1 specific bits */
> + u16 vdd1_on;
> + u16 vdd1_onlp;
> + u16 vdd1_ret;
> + u16 vdd1_off;
> +};
> +#ifdef CONFIG_PM
> +extern void omap3_pm_init_vc(struct prm_setup_vc *setup_vc);
> +#else
> +static inline void omap3_pm_init_vc(struct prm_setup_vc *setup_vc)
> +{
> +}
> +#endif
> +
> +#endif
> --
> 1.6.6
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-01-25 19:32 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-22 1:02 [PATCH/RFC 0/3] OMAP3: VC: first pass at common VC init Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 1/3] OMAP3: VC: create common init code Kevin Hilman
2010-01-25 16:01 ` Cousson, Benoit
2010-01-25 19:32 ` Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 2/3] OMAP3: VC: simply struct copy in init_vc routine Kevin Hilman
2010-01-22 1:02 ` [PATCH/RFC 3/3] OMAP3: VC: 3430SDP: remove prm_setup_vc, done in common VC code Kevin Hilman
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.