vserver 1.9.5.x5
[linux-2.6.git] / arch / arm / mach-integrator / integrator_cp.c
index 0f5fc78..68e15c3 100644 (file)
@@ -35,7 +35,9 @@
 #include <asm/mach/irq.h>
 #include <asm/mach/mmc.h>
 #include <asm/mach/map.h>
+#include <asm/mach/time.h>
 
+#include "common.h"
 #include "clock.h"
 
 #define INTCP_PA_MMC_BASE              0x1c000000
@@ -442,6 +444,14 @@ static int cp_clcd_setup(struct clcd_fb *fb)
        return 0;
 }
 
+static int cp_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma)
+{
+       return dma_mmap_writecombine(&fb->dev->dev, vma,
+                                    fb->fb.screen_base,
+                                    fb->fb.fix.smem_start,
+                                    fb->fb.fix.smem_len);
+}
+
 static void cp_clcd_remove(struct clcd_fb *fb)
 {
        dma_free_writecombine(&fb->dev->dev, fb->fb.fix.smem_len,
@@ -454,6 +464,7 @@ static struct clcd_board clcd_data = {
        .decode         = clcdfb_decode,
        .enable         = cp_clcd_enable,
        .setup          = cp_clcd_setup,
+       .mmap           = cp_clcd_mmap,
        .remove         = cp_clcd_remove,
 };
 
@@ -496,17 +507,22 @@ static void __init intcp_init(void)
 
 #define TIMER_CTRL_IE  (1 << 5)                        /* Interrupt Enable */
 
-static void __init intcp_init_time(void)
+static void __init intcp_timer_init(void)
 {
        integrator_time_init(1000000 / HZ, TIMER_CTRL_IE);
 }
 
+static struct sys_timer cp_timer = {
+       .init           = intcp_timer_init,
+       .offset         = integrator_gettimeoffset,
+};
+
 MACHINE_START(CINTEGRATOR, "ARM-IntegratorCP")
        MAINTAINER("ARM Ltd/Deep Blue Solutions Ltd")
        BOOT_MEM(0x00000000, 0x16000000, 0xf1600000)
        BOOT_PARAMS(0x00000100)
        MAPIO(intcp_map_io)
        INITIRQ(intcp_init_irq)
-       INITTIME(intcp_init_time)
+       .timer          = &cp_timer,
        INIT_MACHINE(intcp_init)
 MACHINE_END