X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;ds=sidebyside;f=arch%2Farm%2Fplat-s5p%2Firq-gpioint.c;h=d38d6ebf0c038e8a7bc4b52a4a9a9412cccb5560;hb=452105cb7a4b9ffc106ef50cf788bef694b4567f;hp=82c7311017a2b0e0ac30d8bf27f47bc001cc400e;hpb=afb9bd704c7116076879352a2cc2c43aa12c1e14;p=cascardo%2Flinux.git diff --git a/arch/arm/plat-s5p/irq-gpioint.c b/arch/arm/plat-s5p/irq-gpioint.c index 82c7311017a2..d38d6ebf0c03 100644 --- a/arch/arm/plat-s5p/irq-gpioint.c +++ b/arch/arm/plat-s5p/irq-gpioint.c @@ -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;