static void lpd270_unmask_irq(struct irq_data *d) { int lpd270_irq = d->irq - LPD270_IRQ(0); lpd270_irq_enabled |= 1 << lpd270_irq; __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); }
static void lpd270_unmask_irq(unsigned int irq) { int lpd270_irq = irq - LPD270_IRQ(0); lpd270_irq_enabled |= 1 << lpd270_irq; __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); }
static void lpd270_mask_irq(struct irq_data *d) { int lpd270_irq = d->irq - LPD270_IRQ(0); __raw_writew(~(1 << lpd270_irq), LPD270_INT_STATUS); lpd270_irq_enabled &= ~(1 << lpd270_irq); __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); }
static void __init lpd270_init_irq(void) { int irq; pxa27x_init_irq(); __raw_writew(0, LPD270_INT_MASK); __raw_writew(0, LPD270_INT_STATUS); /* setup extra LogicPD PXA270 irqs */ for (irq = LPD270_IRQ(2); irq <= LPD270_IRQ(4); irq++) { irq_set_chip_and_handler(irq, &lpd270_irq_chip, handle_level_irq); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } irq_set_chained_handler(IRQ_GPIO(0), lpd270_irq_handler); irq_set_irq_type(IRQ_GPIO(0), IRQ_TYPE_EDGE_FALLING); }
static void lpd270_mask_irq(unsigned int irq) { int lpd270_irq = irq - LPD270_IRQ(0); __raw_writew(~(1 << lpd270_irq), LPD270_INT_STATUS); lpd270_irq_enabled &= ~(1 << lpd270_irq); __raw_writew(lpd270_irq_enabled, LPD270_INT_MASK); }
static void lpd270_irq_handler(unsigned int irq, struct irq_desc *desc) { unsigned long pending; pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled; do { /* clear useless edge notification */ desc->irq_data.chip->irq_ack(&desc->irq_data); if (likely(pending)) { irq = LPD270_IRQ(0) + __ffs(pending); generic_handle_irq(irq); pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled; } } while (pending); }
static void lpd270_irq_handler(unsigned int irq, struct irq_desc *desc) { unsigned long pending; pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled; do { GEDR(0) = GPIO_bit(0); /* clear useless edge notification */ if (likely(pending)) { irq = LPD270_IRQ(0) + __ffs(pending); desc = irq_desc + irq; desc_handle_irq(irq, desc); pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled; } } while (pending); }