Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / arch / arm / mach-ep93xx / core.c
index dcd4176..a87a784 100644 (file)
@@ -13,7 +13,6 @@
  * your option) any later version.
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/spinlock.h>
@@ -103,7 +102,8 @@ static int ep93xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        write_seqlock(&xtime_lock);
 
        __raw_writel(1, EP93XX_TIMER1_CLEAR);
-       while (__raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time
+       while ((signed long)
+               (__raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time)
                                                >= TIMER4_TICKS_PER_JIFFY) {
                last_jiffy_time += TIMER4_TICKS_PER_JIFFY;
                timer_tick(regs);
@@ -116,7 +116,7 @@ static int ep93xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
 static struct irqaction ep93xx_timer_irq = {
        .name           = "ep93xx timer",
-       .flags          = SA_INTERRUPT | SA_TIMER,
+       .flags          = IRQF_DISABLED | IRQF_TIMER,
        .handler        = ep93xx_timer_interrupt,
 };
 
@@ -124,7 +124,7 @@ static void __init ep93xx_timer_init(void)
 {
        /* Enable periodic HZ timer.  */
        __raw_writel(0x48, EP93XX_TIMER1_CONTROL);
-       __raw_writel((508000 / HZ) - 1, EP93XX_TIMER1_LOAD);
+       __raw_writel((508469 / HZ) - 1, EP93XX_TIMER1_LOAD);
        __raw_writel(0xc8, EP93XX_TIMER1_CONTROL);
 
        /* Enable lost jiffy timer.  */
@@ -432,10 +432,37 @@ static struct platform_device ep93xx_rtc_device = {
 };
 
 
+static struct resource ep93xx_ohci_resources[] = {
+       [0] = {
+               .start  = EP93XX_USB_PHYS_BASE,
+               .end    = EP93XX_USB_PHYS_BASE + 0x0fff,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_EP93XX_USB,
+               .end    = IRQ_EP93XX_USB,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ep93xx_ohci_device = {
+       .name           = "ep93xx-ohci",
+       .id             = -1,
+       .dev            = {
+               .dma_mask               = (void *)0xffffffff,
+               .coherent_dma_mask      = 0xffffffff,
+       },
+       .num_resources  = ARRAY_SIZE(ep93xx_ohci_resources),
+       .resource       = ep93xx_ohci_resources,
+};
+
+
 void __init ep93xx_init_devices(void)
 {
        unsigned int v;
 
+       ep93xx_clock_init();
+
        /*
         * Disallow access to MaverickCrunch initially.
         */
@@ -449,4 +476,5 @@ void __init ep93xx_init_devices(void)
        amba_device_register(&uart3_device, &iomem_resource);
 
        platform_device_register(&ep93xx_rtc_device);
+       platform_device_register(&ep93xx_ohci_device);
 }