static void pcm990_unmask_irq(unsigned int irq) { int pcm990_irq = (irq - PCM027_IRQ(0)); /* the irq can be acknowledged only if deasserted, so it's done here */ PCM990_INTSETCLR |= 1 << pcm990_irq; PCM990_INTMSKENA = (pcm990_irq_enabled |= (1 << pcm990_irq)); }
static void pcm990_mask_ack_irq(struct irq_data *d) { int pcm990_irq = (d->irq - PCM027_IRQ(0)); pcm990_irq_enabled &= ~(1 << pcm990_irq); pcm990_cpld_writeb(pcm990_irq_enabled, PCM990_CTRL_INTMSKENA); }
static void __init pcm990_init_irq(void) { int irq; /* setup extra PCM990 irqs */ for (irq = PCM027_IRQ(0); irq <= PCM027_IRQ(3); irq++) { set_irq_chip(irq, &pcm990_irq_chip); set_irq_handler(irq, handle_level_irq); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } PCM990_INTMSKENA = 0x00; /* disable all Interrupts */ PCM990_INTSETCLR = 0xFF; set_irq_chained_handler(PCM990_CTRL_INT_IRQ, pcm990_irq_handler); set_irq_type(PCM990_CTRL_INT_IRQ, PCM990_CTRL_INT_IRQ_EDGE); }
static void __init pcm990_init_irq(void) { int irq; /* setup extra PCM990 irqs */ for (irq = PCM027_IRQ(0); irq <= PCM027_IRQ(3); irq++) { irq_set_chip_and_handler(irq, &pcm990_irq_chip, handle_level_irq); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } /* disable all Interrupts */ pcm990_cpld_writeb(0x0, PCM990_CTRL_INTMSKENA); pcm990_cpld_writeb(0xff, PCM990_CTRL_INTSETCLR); irq_set_chained_handler(PCM990_CTRL_INT_IRQ, pcm990_irq_handler); irq_set_irq_type(PCM990_CTRL_INT_IRQ, PCM990_CTRL_INT_IRQ_EDGE); }
static void pcm990_irq_handler(unsigned int irq, struct irq_desc *desc) { unsigned long pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled; do { desc->chip->ack(irq); /* clear our parent IRQ */ if (likely(pending)) { irq = PCM027_IRQ(0) + __ffs(pending); ipipe_handle_chained_irq(irq); } pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled; } while (pending); }
static void pcm990_irq_handler(unsigned int irq, struct irq_desc *desc) { unsigned long pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled; do { /* clear our parent IRQ */ desc->irq_data.chip->irq_ack(&desc->irq_data); if (likely(pending)) { irq = PCM027_IRQ(0) + __ffs(pending); generic_handle_irq(irq); } pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled; } while (pending); }
static void pcm990_unmask_irq(struct irq_data *d) { int pcm990_irq = (d->irq - PCM027_IRQ(0)); u8 val; /* the irq can be acknowledged only if deasserted, so it's done here */ pcm990_irq_enabled |= (1 << pcm990_irq); val = pcm990_cpld_readb(PCM990_CTRL_INTSETCLR); val |= 1 << pcm990_irq; pcm990_cpld_writeb(val, PCM990_CTRL_INTSETCLR); pcm990_cpld_writeb(pcm990_irq_enabled, PCM990_CTRL_INTMSKENA); }
static void pcm990_irq_handler(unsigned int irq, struct irq_desc *desc) { unsigned long pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled; do { GEDR(PCM990_CTRL_INT_IRQ_GPIO) = GPIO_bit(PCM990_CTRL_INT_IRQ_GPIO); if (likely(pending)) { irq = PCM027_IRQ(0) + __ffs(pending); desc = irq_desc + irq; desc_handle_irq(irq, desc); } pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled; } while (pending); }
static void pcm990_mask_ack_irq(unsigned int irq) { int pcm990_irq = (irq - PCM027_IRQ(0)); PCM990_INTMSKENA = (pcm990_irq_enabled &= ~(1 << pcm990_irq)); }
static void pcm990_mask_ack_irq(struct irq_data *d) { int pcm990_irq = (d->irq - PCM027_IRQ(0)); PCM990_INTMSKENA = (pcm990_irq_enabled &= ~(1 << pcm990_irq)); }