|
|
|
@ -43,11 +43,11 @@ |
|
|
|
|
/*
|
|
|
|
|
* IRQ handling |
|
|
|
|
*/ |
|
|
|
|
static void stmp37xx_ack_irq(unsigned int irq) |
|
|
|
|
static void stmp37xx_ack_irq(struct irq_data *d) |
|
|
|
|
{ |
|
|
|
|
/* Disable IRQ */ |
|
|
|
|
stmp3xxx_clearl(0x04 << ((irq % 4) * 8), |
|
|
|
|
REGS_ICOLL_BASE + HW_ICOLL_PRIORITYn + irq / 4 * 0x10); |
|
|
|
|
stmp3xxx_clearl(0x04 << ((d->irq % 4) * 8), |
|
|
|
|
REGS_ICOLL_BASE + HW_ICOLL_PRIORITYn + d->irq / 4 * 0x10); |
|
|
|
|
|
|
|
|
|
/* ACK current interrupt */ |
|
|
|
|
__raw_writel(1, REGS_ICOLL_BASE + HW_ICOLL_LEVELACK); |
|
|
|
@ -56,24 +56,24 @@ static void stmp37xx_ack_irq(unsigned int irq) |
|
|
|
|
(void)__raw_readl(REGS_ICOLL_BASE + HW_ICOLL_STAT); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void stmp37xx_mask_irq(unsigned int irq) |
|
|
|
|
static void stmp37xx_mask_irq(struct irq_data *d) |
|
|
|
|
{ |
|
|
|
|
/* IRQ disable */ |
|
|
|
|
stmp3xxx_clearl(0x04 << ((irq % 4) * 8), |
|
|
|
|
REGS_ICOLL_BASE + HW_ICOLL_PRIORITYn + irq / 4 * 0x10); |
|
|
|
|
stmp3xxx_clearl(0x04 << ((d->irq % 4) * 8), |
|
|
|
|
REGS_ICOLL_BASE + HW_ICOLL_PRIORITYn + d->irq / 4 * 0x10); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void stmp37xx_unmask_irq(unsigned int irq) |
|
|
|
|
static void stmp37xx_unmask_irq(struct irq_data *d) |
|
|
|
|
{ |
|
|
|
|
/* IRQ enable */ |
|
|
|
|
stmp3xxx_setl(0x04 << ((irq % 4) * 8), |
|
|
|
|
REGS_ICOLL_BASE + HW_ICOLL_PRIORITYn + irq / 4 * 0x10); |
|
|
|
|
stmp3xxx_setl(0x04 << ((d->irq % 4) * 8), |
|
|
|
|
REGS_ICOLL_BASE + HW_ICOLL_PRIORITYn + d->irq / 4 * 0x10); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static struct irq_chip stmp37xx_chip = { |
|
|
|
|
.ack = stmp37xx_ack_irq, |
|
|
|
|
.mask = stmp37xx_mask_irq, |
|
|
|
|
.unmask = stmp37xx_unmask_irq, |
|
|
|
|
.irq_ack = stmp37xx_ack_irq, |
|
|
|
|
.irq_mask = stmp37xx_mask_irq, |
|
|
|
|
.irq_unmask = stmp37xx_unmask_irq, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void __init stmp37xx_init_irq(void) |
|
|
|
|