diff options
author | Juha Yrjola <juha.yrjola@solidboot.com> | 2006-09-25 05:41:44 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2006-09-25 05:41:44 -0400 |
commit | 39020842b3d8a450e80724a71d5df676535d249e (patch) | |
tree | ca33882d0d89ba97c864c17ec950b7c1ef8c1212 /arch/arm/plat-omap/dmtimer.c | |
parent | ab0a2b9b9f536d860681dacbfb5784bd76e88a1e (diff) |
ARM: OMAP: OMAP2 dmtimer power management support
GPT1 will be set into non-posted mode, and the wakeup register
is set for all timers.
Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/plat-omap/dmtimer.c')
-rw-r--r-- | arch/arm/plat-omap/dmtimer.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 8d6197497a74..bcbb8d7392be 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -161,7 +161,7 @@ static void omap_dm_timer_reset(struct omap_dm_timer *timer) | |||
161 | { | 161 | { |
162 | u32 l; | 162 | u32 l; |
163 | 163 | ||
164 | if (timer != &dm_timers[0]) { | 164 | if (!cpu_class_is_omap2() || timer != &dm_timers[0]) { |
165 | omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06); | 165 | omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06); |
166 | omap_dm_timer_wait_for_reset(timer); | 166 | omap_dm_timer_wait_for_reset(timer); |
167 | } | 167 | } |
@@ -170,6 +170,13 @@ static void omap_dm_timer_reset(struct omap_dm_timer *timer) | |||
170 | /* Set to smart-idle mode */ | 170 | /* Set to smart-idle mode */ |
171 | l = omap_dm_timer_read_reg(timer, OMAP_TIMER_OCP_CFG_REG); | 171 | l = omap_dm_timer_read_reg(timer, OMAP_TIMER_OCP_CFG_REG); |
172 | l |= 0x02 << 3; | 172 | l |= 0x02 << 3; |
173 | |||
174 | if (cpu_class_is_omap2() && timer == &dm_timers[0]) { | ||
175 | /* Enable wake-up only for GPT1 on OMAP2 CPUs*/ | ||
176 | l |= 1 << 2; | ||
177 | /* Non-posted mode */ | ||
178 | omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0); | ||
179 | } | ||
173 | omap_dm_timer_write_reg(timer, OMAP_TIMER_OCP_CFG_REG, l); | 180 | omap_dm_timer_write_reg(timer, OMAP_TIMER_OCP_CFG_REG, l); |
174 | } | 181 | } |
175 | 182 | ||
@@ -431,6 +438,7 @@ void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, | |||
431 | unsigned int value) | 438 | unsigned int value) |
432 | { | 439 | { |
433 | omap_dm_timer_write_reg(timer, OMAP_TIMER_INT_EN_REG, value); | 440 | omap_dm_timer_write_reg(timer, OMAP_TIMER_INT_EN_REG, value); |
441 | omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG, value); | ||
434 | } | 442 | } |
435 | 443 | ||
436 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer) | 444 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer) |