Merge ../linus
[linux-drm-fsl-dcu.git] / arch / arm / mach-ixp23xx / ixdp2351.c
index 00146c35daacca140f492f7e578d427c86a728d5..7a86a2516eaa57e30fc74c7330116fbff53bb02d 100644 (file)
  * warranty of any kind, whether express or implied.
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/spinlock.h>
 #include <linux/sched.h>
 #include <linux/interrupt.h>
+#include <linux/irq.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/bitops.h>
@@ -37,7 +37,6 @@
 #include <asm/memory.h>
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
-#include <asm/irq.h>
 #include <asm/system.h>
 #include <asm/tlbflush.h>
 #include <asm/pgtable.h>
@@ -61,7 +60,7 @@ static void ixdp2351_inta_unmask(unsigned int irq)
        *IXDP2351_CPLD_INTA_MASK_CLR_REG = IXDP2351_INTA_IRQ_MASK(irq);
 }
 
-static void ixdp2351_inta_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
+static void ixdp2351_inta_handler(unsigned int irq, struct irq_desc *desc)
 {
        u16 ex_interrupt =
                *IXDP2351_CPLD_INTA_STAT_REG & IXDP2351_INTA_IRQ_VALID;
@@ -71,18 +70,18 @@ static void ixdp2351_inta_handler(unsigned int irq, struct irqdesc *desc, struct
 
        for (i = 0; i < IXDP2351_INTA_IRQ_NUM; i++) {
                if (ex_interrupt & (1 << i)) {
-                       struct irqdesc *cpld_desc;
+                       struct irq_desc *cpld_desc;
                        int cpld_irq =
                                IXP23XX_MACH_IRQ(IXDP2351_INTA_IRQ_BASE + i);
                        cpld_desc = irq_desc + cpld_irq;
-                       cpld_desc->handle(cpld_irq, cpld_desc, regs);
+                       desc_handle_irq(cpld_irq, cpld_desc);
                }
        }
 
        desc->chip->unmask(irq);
 }
 
-static struct irqchip ixdp2351_inta_chip = {
+static struct irq_chip ixdp2351_inta_chip = {
        .ack    = ixdp2351_inta_mask,
        .mask   = ixdp2351_inta_mask,
        .unmask = ixdp2351_inta_unmask
@@ -98,7 +97,7 @@ static void ixdp2351_intb_unmask(unsigned int irq)
        *IXDP2351_CPLD_INTB_MASK_CLR_REG = IXDP2351_INTB_IRQ_MASK(irq);
 }
 
-static void ixdp2351_intb_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
+static void ixdp2351_intb_handler(unsigned int irq, struct irq_desc *desc)
 {
        u16 ex_interrupt =
                *IXDP2351_CPLD_INTB_STAT_REG & IXDP2351_INTB_IRQ_VALID;
@@ -108,18 +107,18 @@ static void ixdp2351_intb_handler(unsigned int irq, struct irqdesc *desc, struct
 
        for (i = 0; i < IXDP2351_INTB_IRQ_NUM; i++) {
                if (ex_interrupt & (1 << i)) {
-                       struct irqdesc *cpld_desc;
+                       struct irq_desc *cpld_desc;
                        int cpld_irq =
                                IXP23XX_MACH_IRQ(IXDP2351_INTB_IRQ_BASE + i);
                        cpld_desc = irq_desc + cpld_irq;
-                       cpld_desc->handle(cpld_irq, cpld_desc, regs);
+                       desc_handle_irq(cpld_irq, cpld_desc);
                }
        }
 
        desc->chip->unmask(irq);
 }
 
-static struct irqchip ixdp2351_intb_chip = {
+static struct irq_chip ixdp2351_intb_chip = {
        .ack    = ixdp2351_intb_mask,
        .mask   = ixdp2351_intb_mask,
        .unmask = ixdp2351_intb_unmask
@@ -143,7 +142,7 @@ void ixdp2351_init_irq(void)
             irq++) {
                if (IXDP2351_INTA_IRQ_MASK(irq) & IXDP2351_INTA_IRQ_VALID) {
                        set_irq_flags(irq, IRQF_VALID);
-                       set_irq_handler(irq, do_level_IRQ);
+                       set_irq_handler(irq, handle_level_irq);
                        set_irq_chip(irq, &ixdp2351_inta_chip);
                }
        }
@@ -154,13 +153,13 @@ void ixdp2351_init_irq(void)
             irq++) {
                if (IXDP2351_INTB_IRQ_MASK(irq) & IXDP2351_INTB_IRQ_VALID) {
                        set_irq_flags(irq, IRQF_VALID);
-                       set_irq_handler(irq, do_level_IRQ);
+                       set_irq_handler(irq, handle_level_irq);
                        set_irq_chip(irq, &ixdp2351_intb_chip);
                }
        }
 
-       set_irq_chained_handler(IRQ_IXP23XX_INTA, &ixdp2351_inta_handler);
-       set_irq_chained_handler(IRQ_IXP23XX_INTB, &ixdp2351_intb_handler);
+       set_irq_chained_handler(IRQ_IXP23XX_INTA, ixdp2351_inta_handler);
+       set_irq_chained_handler(IRQ_IXP23XX_INTB, ixdp2351_intb_handler);
 }
 
 /*
@@ -298,9 +297,29 @@ static void __init ixdp2351_map_io(void)
        iotable_init(ixdp2351_io_desc, ARRAY_SIZE(ixdp2351_io_desc));
 }
 
+static struct physmap_flash_data ixdp2351_flash_data = {
+       .width          = 1,
+};
+
+static struct resource ixdp2351_flash_resource = {
+       .start          = 0x90000000,
+       .end            = 0x93ffffff,
+       .flags          = IORESOURCE_MEM,
+};
+
+static struct platform_device ixdp2351_flash = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .dev            = {
+               .platform_data  = &ixdp2351_flash_data,
+       },
+       .num_resources  = 1,
+       .resource       = &ixdp2351_flash_resource,
+};
+
 static void __init ixdp2351_init(void)
 {
-       physmap_configure(0x90000000, 0x04000000, 1, NULL);
+       platform_device_register(&ixdp2351_flash);
 
        /*
         * Mark flash as writeable