static asmlinkage void __exception_irq_entry omap_intc_handle_irq(struct pt_regs *regs) { u32 irqnr = 0; int handled_irq = 0; int i; do { for (i = 0; i < omap_nr_pending; i++) { irqnr = intc_readl(INTC_PENDING_IRQ0 + (0x20 * i)); if (irqnr) goto out; } out: if (!irqnr) break; irqnr = intc_readl(INTC_SIR); irqnr &= ACTIVEIRQ_MASK; if (irqnr) { handle_domain_irq(domain, irqnr, regs); handled_irq = 1; } } while (irqnr); /* * If an irq is masked or deasserted while active, we will * keep ending up here with no irq handled. So remove it from * the INTC with an ack. */ if (!handled_irq) omap_ack_irq(NULL); }
static void omap_mask_ack_irq(unsigned int irq) { omap_mask_irq(irq); omap_ack_irq(irq); }
void omap3_intc_suspend(void) { /* A pending interrupt would prevent OMAP from entering suspend */ omap_ack_irq(NULL); }
static void omap_mask_ack_irq(struct irq_data *d) { irq_gc_mask_disable_reg(d); omap_ack_irq(d); }
static void omap_mask_ack_irq(struct irq_data *d) { omap_mask_irq(d); omap_ack_irq(d); }