]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/blackfin/mach-common/ints-priority.c
Merge branch 'linus' into cpus4096
[linux-2.6-omap-h63xx.git] / arch / blackfin / mach-common / ints-priority.c
index 225ef14af75eade0ef629575cc5ab646db063796..64d746114e4b2897ee28cc6c4a4d0091d0b5a6b3 100644 (file)
@@ -316,7 +316,7 @@ static void bfin_demux_error_irq(unsigned int int_err_irq,
                printk(KERN_ERR
                       "%s : %s : LINE %d :\nIRQ ?: PERIPHERAL ERROR"
                       " INTERRUPT ASSERTED BUT NO SOURCE FOUND\n",
-                      __FUNCTION__, __FILE__, __LINE__);
+                      __func__, __FILE__, __LINE__);
 
 }
 #endif                         /* BF537_GENERIC_ERROR_INT_DEMUX */
@@ -326,6 +326,7 @@ static void bfin_demux_error_irq(unsigned int int_err_irq,
 static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)];
 static unsigned short gpio_edge_triggered[gpio_bank(MAX_BLACKFIN_GPIOS)];
 
+extern void bfin_gpio_irq_prepare(unsigned gpio);
 
 static void bfin_gpio_ack_irq(unsigned int irq)
 {
@@ -364,35 +365,25 @@ static void bfin_gpio_unmask_irq(unsigned int irq)
 
 static unsigned int bfin_gpio_irq_startup(unsigned int irq)
 {
-       unsigned int ret;
        u16 gpionr = irq - IRQ_PF0;
-       char buf[8];
 
-       if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) {
-               snprintf(buf, sizeof buf, "IRQ %d", irq);
-               ret = gpio_request(gpionr, buf);
-               if (ret)
-                       return ret;
-       }
+       if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr)))
+               bfin_gpio_irq_prepare(gpionr);
 
        gpio_enabled[gpio_bank(gpionr)] |= gpio_bit(gpionr);
        bfin_gpio_unmask_irq(irq);
 
-       return ret;
+       return 0;
 }
 
 static void bfin_gpio_irq_shutdown(unsigned int irq)
 {
        bfin_gpio_mask_irq(irq);
-       gpio_free(irq - IRQ_PF0);
        gpio_enabled[gpio_bank(irq - IRQ_PF0)] &= ~gpio_bit(irq - IRQ_PF0);
 }
 
 static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
 {
-
-       unsigned int ret;
-       char buf[8];
        u16 gpionr = irq - IRQ_PF0;
 
        if (type == IRQ_TYPE_PROBE) {
@@ -404,12 +395,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
 
        if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING |
                    IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
-               if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) {
-                       snprintf(buf, sizeof buf, "IRQ %d", irq);
-                       ret = gpio_request(gpionr, buf);
-                       if (ret)
-                               return ret;
-               }
+               if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr)))
+                       bfin_gpio_irq_prepare(gpionr);
 
                gpio_enabled[gpio_bank(gpionr)] |= gpio_bit(gpionr);
        } else {
@@ -472,6 +459,8 @@ static struct irq_chip bfin_gpio_irqchip = {
        .mask = bfin_gpio_mask_irq,
        .mask_ack = bfin_gpio_mask_ack_irq,
        .unmask = bfin_gpio_unmask_irq,
+       .disable = bfin_gpio_mask_irq,
+       .enable = bfin_gpio_unmask_irq,
        .set_type = bfin_gpio_irq_type,
        .startup = bfin_gpio_irq_startup,
        .shutdown = bfin_gpio_irq_shutdown,
@@ -595,6 +584,8 @@ static struct pin_int_t *pint[NR_PINT_SYS_IRQS] = {
        (struct pin_int_t *)PINT3_MASK_SET,
 };
 
+extern void bfin_gpio_irq_prepare(unsigned gpio);
+
 inline unsigned short get_irq_base(u8 bank, u8 bmap)
 {
 
@@ -697,8 +688,6 @@ static void bfin_gpio_unmask_irq(unsigned int irq)
 
 static unsigned int bfin_gpio_irq_startup(unsigned int irq)
 {
-       unsigned int ret;
-       char buf[8];
        u16 gpionr = irq_to_gpio(irq);
        u8 pint_val = irq2pint_lut[irq - SYS_IRQS];
 
@@ -709,17 +698,13 @@ static unsigned int bfin_gpio_irq_startup(unsigned int irq)
                return -ENODEV;
        }
 
-       if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) {
-               snprintf(buf, sizeof buf, "IRQ %d", irq);
-               ret = gpio_request(gpionr, buf);
-               if (ret)
-                       return ret;
-       }
+       if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr)))
+               bfin_gpio_irq_prepare(gpionr);
 
        gpio_enabled[gpio_bank(gpionr)] |= gpio_bit(gpionr);
        bfin_gpio_unmask_irq(irq);
 
-       return ret;
+       return 0;
 }
 
 static void bfin_gpio_irq_shutdown(unsigned int irq)
@@ -727,15 +712,12 @@ static void bfin_gpio_irq_shutdown(unsigned int irq)
        u16 gpionr = irq_to_gpio(irq);
 
        bfin_gpio_mask_irq(irq);
-       gpio_free(gpionr);
        gpio_enabled[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
 }
 
 static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
 {
 
-       unsigned int ret;
-       char buf[8];
        u16 gpionr = irq_to_gpio(irq);
        u8 pint_val = irq2pint_lut[irq - SYS_IRQS];
        u32 pintbit = PINT_BIT(pint_val);
@@ -753,12 +735,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
 
        if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING |
                    IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
-               if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) {
-                       snprintf(buf, sizeof buf, "IRQ %d", irq);
-                       ret = gpio_request(gpionr, buf);
-                       if (ret)
-                               return ret;
-               }
+               if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr)))
+                       bfin_gpio_irq_prepare(gpionr);
 
                gpio_enabled[gpio_bank(gpionr)] |= gpio_bit(gpionr);
        } else {
@@ -766,8 +744,6 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
                return 0;
        }
 
-       gpio_direction_input(gpionr);
-
        if ((type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW)))
                pint[bank]->invert_set = pintbit;       /* low or falling edge denoted by one */
        else
@@ -872,6 +848,8 @@ static struct irq_chip bfin_gpio_irqchip = {
        .mask = bfin_gpio_mask_irq,
        .mask_ack = bfin_gpio_mask_ack_irq,
        .unmask = bfin_gpio_unmask_irq,
+       .disable = bfin_gpio_mask_irq,
+       .enable = bfin_gpio_unmask_irq,
        .set_type = bfin_gpio_irq_type,
        .startup = bfin_gpio_irq_startup,
        .shutdown = bfin_gpio_irq_shutdown,
@@ -965,8 +943,6 @@ int __init init_arch_irq(void)
 
        local_irq_disable();
 
-       init_exception_buff();
-
 #ifdef CONFIG_BF54x
 # ifdef CONFIG_PINTx_REASSIGN
        pint[0]->assign = CONFIG_PINT0_ASSIGN;