linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-arm / arch-omap / system.h
index ac2bfa4..6724a81 100644 (file)
@@ -4,17 +4,17 @@
  */
 #ifndef __ASM_ARCH_SYSTEM_H
 #define __ASM_ARCH_SYSTEM_H
+#include <linux/config.h>
 #include <linux/clk.h>
 
 #include <asm/mach-types.h>
 #include <asm/hardware.h>
+#include <asm/arch/prcm.h>
 
 #ifndef CONFIG_MACH_VOICEBLUE
 #define voiceblue_reset()              do {} while (0)
 #endif
 
-extern void omap_prcm_arch_reset(char mode);
-
 static inline void arch_idle(void)
 {
        cpu_do_idle();
@@ -38,12 +38,24 @@ static inline void omap1_arch_reset(char mode)
                omap_writew(1, ARM_RSTCT1);
 }
 
+static inline void omap2_arch_reset(char mode)
+{
+       u32 rate;
+       struct clk *vclk, *sclk;
+
+       vclk = clk_get(NULL, "virt_prcm_set");
+       sclk = clk_get(NULL, "sys_ck");
+       rate = clk_get_rate(sclk);
+       clk_set_rate(vclk, rate);       /* go to bypass for OMAP limitation */
+       RM_RSTCTRL_WKUP |= 2;
+}
+
 static inline void arch_reset(char mode)
 {
        if (!cpu_is_omap24xx())
                omap1_arch_reset(mode);
        else
-               omap_prcm_arch_reset(mode);
+               omap2_arch_reset(mode);
 }
 
 #endif