CHROMIUM: arm: s5p: fix section mismatch for gpioint
[cascardo/linux.git] / arch / arm / plat-s5p / irq-gpioint.c
index 82c7311..d38d6eb 100644 (file)
@@ -77,6 +77,16 @@ static int s5p_gpioint_set_type(struct irq_data *d, unsigned int type)
        return 0;
 }
 
+static void s5p_gpioint_resume(struct irq_data *data)
+{
+       struct irq_chip_generic *gc = irq_data_get_irq_chip_data(data);
+       struct irq_chip_regs *regs =
+               &container_of(data->chip, struct irq_chip_type, chip)->regs;
+
+       irq_reg_writel(gc->mask_cache, gc->reg_base + regs->mask);
+       irq_reg_writel(gc->type_cache, gc->reg_base + regs->type);
+}
+
 static void s5p_gpioint_handler(unsigned int irq, struct irq_desc *desc)
 {
        struct s5p_gpioint_bank *bank = irq_get_handler_data(irq);
@@ -110,7 +120,7 @@ static void s5p_gpioint_handler(unsigned int irq, struct irq_desc *desc)
        chained_irq_exit(chip, desc);
 }
 
-static __init int s5p_gpioint_add(struct samsung_gpio_chip *chip)
+static __devinit int s5p_gpioint_add(struct samsung_gpio_chip *chip)
 {
        static int used_gpioint_groups = 0;
        int group = chip->group;
@@ -162,7 +172,8 @@ static __init int s5p_gpioint_add(struct samsung_gpio_chip *chip)
        ct->chip.irq_ack = irq_gc_ack_set_bit;
        ct->chip.irq_mask = irq_gc_mask_set_bit;
        ct->chip.irq_unmask = irq_gc_mask_clr_bit;
-       ct->chip.irq_set_type = s5p_gpioint_set_type,
+       ct->chip.irq_set_type = s5p_gpioint_set_type;
+       ct->chip.irq_resume = s5p_gpioint_resume;
        ct->regs.ack = PEND_OFFSET + REG_OFFSET(group - bank->start);
        ct->regs.mask = MASK_OFFSET + REG_OFFSET(group - bank->start);
        ct->regs.type = CON_OFFSET + REG_OFFSET(group - bank->start);
@@ -172,7 +183,7 @@ static __init int s5p_gpioint_add(struct samsung_gpio_chip *chip)
        return 0;
 }
 
-int __init s5p_register_gpio_interrupt(int pin)
+int __devinit s5p_register_gpio_interrupt(int pin)
 {
        struct samsung_gpio_chip *my_chip = samsung_gpiolib_getchip(pin);
        int offset, group;
@@ -199,7 +210,8 @@ int __init s5p_register_gpio_interrupt(int pin)
        return ret;
 }
 
-int __init s5p_register_gpioint_bank(int chain_irq, int start, int nr_groups)
+int __devinit s5p_register_gpioint_bank(int chain_irq, int start,
+                                       int nr_groups)
 {
        struct s5p_gpioint_bank *bank;