===================================================================
@@ -75,13 +75,19 @@
{1, 10000, 30000, 300000},
};
-/* FIXME: These are not the optimal setup values to be used on 3430sdp*/
+/* 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,
+ /* CLK SETUPTIME for RET & OFF */
+ .clksetup_ret = 0xff,
+ .clksetup_off = 0xff,
+ /* VOLT SETUPTIME for RET & OFF */
+ .voltsetup_time1_ret = 0xfff,
+ .voltsetup_time2_ret = 0xfff,
+ .voltsetup_time1_off = 0xfff,
+ .voltsetup_time2_off = 0xfff,
.voltoffset = 0xff,
.voltsetup2 = 0xff,
+ /* VC COMMAND VALUES for VDD1/VDD2 */
.vdd0_on = 0x30,
.vdd0_onlp = 0x20,
.vdd0_ret = 0x1e,
===================================================================
@@ -25,6 +25,29 @@
#include "mux.h"
#include "sdram-hynix-h8mbx00u0mer-0em.h"
+#include "pm.h"
+
+static struct prm_setup_vc omap3_setuptime_table = {
+ /* CLK SETUPTIME for RET & OFF */
+ .clksetup_ret = 0xff,
+ .clksetup_off = 0xff,
+ /* VOLT SETUPTIME for RET & OFF */
+ .voltsetup_time1_ret = 0xfff,
+ .voltsetup_time2_ret = 0xfff,
+ .voltsetup_time1_off = 0xfff,
+ .voltsetup_time2_off = 0xfff,
+ .voltoffset = 0xff,
+ .voltsetup2 = 0xff,
+ /* VC COMMAND VALUES for VDD1/VDD2 */
+ .vdd0_on = 0x28, /* 1.1v */
+ .vdd0_onlp = 0x20, /* 1.0v */
+ .vdd0_ret = 0x13, /* 0.83v */
+ .vdd0_off = 0x00, /* 0.6v */
+ .vdd1_on = 0x2B, /* 1.1375v */
+ .vdd1_onlp = 0x20, /* 1.0v */
+ .vdd1_ret = 0x14, /* 0.85v */
+ .vdd1_off = 0x00, /* 0.6v */
+};
#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
@@ -97,7 +120,7 @@
static void __init omap_sdp_init(void)
{
omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
- zoom_peripherals_init();
+ zoom_peripherals_init(&omap3_setuptime_table);
board_smc91x_init();
enable_board_wakeup_source();
usb_ehci_init(&ehci_pdata);
===================================================================
@@ -26,6 +26,7 @@
#include "mux.h"
#include "mmc-twl4030.h"
+#include "pm.h"
/* Zoom2 has Qwerty keyboard*/
static int board_keymap[] = {
@@ -271,10 +272,11 @@
OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
}
-void __init zoom_peripherals_init(void)
+void __init zoom_peripherals_init(void *peripheral_data)
{
omap_i2c_init();
omap_serial_init();
usb_musb_init();
enable_board_wakeup_source();
+ omap3_pm_init_vc((struct prm_setup_vc *)peripheral_data);
}
===================================================================
@@ -26,6 +26,29 @@
#include "mux.h"
#include "sdram-micron-mt46h32m32lf-6.h"
#include "omap3-opp.h"
+#include "pm.h"
+
+static struct prm_setup_vc omap3_setuptime_table = {
+ /* CLK SETUPTIME for RET & OFF */
+ .clksetup_ret = 0xff,
+ .clksetup_off = 0xff,
+ /* VOLT SETUPTIME for RET & OFF */
+ .voltsetup_time1_ret = 0xfff,
+ .voltsetup_time2_ret = 0xfff,
+ .voltsetup_time1_off = 0xfff,
+ .voltsetup_time2_off = 0xfff,
+ .voltoffset = 0xff,
+ .voltsetup2 = 0xff,
+ /* VC COMMAND VALUES for VDD1/VDD2 */
+ .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 void __init omap_zoom2_init_irq(void)
{
@@ -82,7 +105,7 @@
static void __init omap_zoom2_init(void)
{
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
- zoom_peripherals_init();
+ zoom_peripherals_init(&omap3_setuptime_table);
zoom_debugboard_init();
}
===================================================================
@@ -24,6 +24,29 @@
#include "mux.h"
#include "sdram-hynix-h8mbx00u0mer-0em.h"
+#include "pm.h"
+
+static struct prm_setup_vc omap3_setuptime_table = {
+ /* CLK SETUPTIME for RET & OFF */
+ .clksetup_ret = 0xff,
+ .clksetup_off = 0xff,
+ /* VOLT SETUPTIME for RET & OFF */
+ .voltsetup_time1_ret = 0xfff,
+ .voltsetup_time2_ret = 0xfff,
+ .voltsetup_time1_off = 0xfff,
+ .voltsetup_time2_off = 0xfff,
+ .voltoffset = 0xff,
+ .voltsetup2 = 0xff,
+ /* VC COMMAND VALUES for VDD1/VDD2 */
+ .vdd0_on = 0x28, /* 1.1v */
+ .vdd0_onlp = 0x20, /* 1.0v */
+ .vdd0_ret = 0x13, /* 0.83v */
+ .vdd0_off = 0x00, /* 0.6v */
+ .vdd1_on = 0x2B, /* 1.1375v */
+ .vdd1_onlp = 0x20, /* 1.0v */
+ .vdd1_ret = 0x14, /* 0.85v */
+ .vdd1_off = 0x00, /* 0.6v */
+};
static void __init omap_zoom_map_io(void)
{
@@ -66,7 +89,7 @@
static void __init omap_zoom_init(void)
{
omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
- zoom_peripherals_init();
+ zoom_peripherals_init(&omap3_setuptime_table);
zoom_debugboard_init();
omap_mux_init_gpio(64, OMAP_PIN_OUTPUT);
===================================================================
@@ -2,4 +2,4 @@
* Defines for zoom boards
*/
extern int __init zoom_debugboard_init(void);
-extern void __init zoom_peripherals_init(void);
+extern void __init zoom_peripherals_init(void *);
===================================================================
@@ -41,9 +41,14 @@
#endif
struct prm_setup_vc {
- u16 clksetup;
- u16 voltsetup_time1;
- u16 voltsetup_time2;
+/* CLK SETUPTIME for RET & OFF */
+ u16 clksetup_ret;
+ u16 clksetup_off;
+/* VOLT SETUPTIME for RET & OFF */
+ u16 voltsetup_time1_ret;
+ u16 voltsetup_time2_ret;
+ u16 voltsetup_time1_off;
+ u16 voltsetup_time2_off;
u16 voltoffset;
u16 voltsetup2;
/* PRM_VC_CMD_VAL_0 specific bits */
===================================================================
@@ -96,11 +96,17 @@
static struct powerdomain *cam_pwrdm;
static struct prm_setup_vc prm_setup = {
- .clksetup = 0xff,
- .voltsetup_time1 = 0xfff,
- .voltsetup_time2 = 0xfff,
+ /* CLK SETUPTIME for RET & OFF */
+ .clksetup_ret = 0xff,
+ .clksetup_off = 0xff,
+ /* VOLT SETUPTIME for RET & OFF */
+ .voltsetup_time1_ret = 0xfff,
+ .voltsetup_time2_ret = 0xfff,
+ .voltsetup_time1_off = 0xfff,
+ .voltsetup_time2_off = 0xfff,
.voltoffset = 0xff,
.voltsetup2 = 0xff,
+ /* VC COMMAND VALUES for VDD1/VDD2 */
.vdd0_on = 0x30, /* 1.2v */
.vdd0_onlp = 0x20, /* 1.0v */
.vdd0_ret = 0x1e, /* 0.975v */
@@ -374,6 +380,10 @@
int core_prev_state, per_prev_state;
u32 sdrc_pwr = 0;
int per_state_modified = 0;
+ u16 clksetup = 0xff;
+ u16 voltsetup_time1 = 0xfff;
+ u16 voltsetup_time2 = 0xfff;
+ u16 voltsetup2_sys_off = 0x0;
if (!_omap_sram_idle)
return;
@@ -438,20 +448,43 @@
omap_uart_prepare_idle(0);
omap_uart_prepare_idle(1);
if (core_next_state == PWRDM_POWER_OFF) {
+ /* VOLT & CLK SETUPTIME for OFF */
+ clksetup = prm_setup.clksetup_off;
+ voltsetup_time1 = prm_setup.voltsetup_time1_off;
+ voltsetup_time2 = prm_setup.voltsetup_time2_off;
+
u32 voltctrl = OMAP3430_AUTO_OFF;
- if (voltage_off_while_idle)
+ if (voltage_off_while_idle) {
voltctrl |= OMAP3430_SEL_OFF;
+ voltsetup2_sys_off = prm_setup.voltsetup2;
+ }
prm_set_mod_reg_bits(voltctrl,
OMAP3430_GR_MOD,
OMAP3_PRM_VOLTCTRL_OFFSET);
omap3_core_save_context();
omap3_prcm_save_context();
} else if (core_next_state == PWRDM_POWER_RET) {
+ /* VOLT & CLK SETUPTIME for RET */
+ clksetup = prm_setup.clksetup_ret;
+ voltsetup_time1 = prm_setup.voltsetup_time1_ret;
+ voltsetup_time2 = prm_setup.voltsetup_time2_ret;
+
prm_set_mod_reg_bits(OMAP3430_AUTO_RET,
OMAP3430_GR_MOD,
OMAP3_PRM_VOLTCTRL_OFFSET);
}
+ /* Write setup times */
+ prm_write_mod_reg(clksetup, OMAP3430_GR_MOD,
+ OMAP3_PRM_CLKSETUP_OFFSET);
+ prm_write_mod_reg((voltsetup_time2 <<
+ OMAP3430_SETUP_TIME2_SHIFT) |
+ (voltsetup_time1 <<
+ OMAP3430_SETUP_TIME1_SHIFT),
+ OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);
+ prm_write_mod_reg(voltsetup2_sys_off, OMAP3430_GR_MOD,
+ OMAP3_PRM_VOLTSETUP2_OFFSET);
+
/* Enable IO-PAD and IO-CHAIN wakeups */
prm_set_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
omap3_enable_io_chain();
@@ -1077,12 +1110,17 @@
{
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;
+ /* CLK SETUPTIME for RET & OFF */
+ prm_setup.clksetup_ret = setup_vc->clksetup_ret;
+ prm_setup.clksetup_off = setup_vc->clksetup_off;
+ /* VOLT SETUPTIME for RET & OFF */
+ prm_setup.voltsetup_time1_ret = setup_vc->voltsetup_time1_ret;
+ prm_setup.voltsetup_time2_ret = setup_vc->voltsetup_time2_ret;
+ prm_setup.voltsetup_time1_off = setup_vc->voltsetup_time1_off;
+ prm_setup.voltsetup_time2_off = setup_vc->voltsetup_time2_off;
prm_setup.voltoffset = setup_vc->voltoffset;
prm_setup.voltsetup2 = setup_vc->voltsetup2;
+ /* VC COMMAND VALUES for VDD1/VDD2 */
prm_setup.vdd0_on = setup_vc->vdd0_on;
prm_setup.vdd0_onlp = setup_vc->vdd0_onlp;
prm_setup.vdd0_ret = setup_vc->vdd0_ret;
@@ -1259,11 +1297,11 @@
OMAP3_PRM_VC_I2C_CFG_OFFSET);
/* Write setup times */
- prm_write_mod_reg(prm_setup.clksetup, OMAP3430_GR_MOD,
+ prm_write_mod_reg(prm_setup.clksetup_ret, OMAP3430_GR_MOD,
OMAP3_PRM_CLKSETUP_OFFSET);
- prm_write_mod_reg((prm_setup.voltsetup_time2 <<
+ prm_write_mod_reg((prm_setup.voltsetup_time2_ret <<
OMAP3430_SETUP_TIME2_SHIFT) |
- (prm_setup.voltsetup_time1 <<
+ (prm_setup.voltsetup_time1_ret <<
OMAP3430_SETUP_TIME1_SHIFT),
OMAP3430_GR_MOD, OMAP3_PRM_VOLTSETUP1_OFFSET);