/* Disable (mask) all interrupts */
writel(0xffffffff, aic->regs + AIC_MDCR);
/* * Make sure the interrupt controller is ready to serve new interrupts. * Reading from IPER indicates that the nIRQ signal may be deasserted, * and writing to EOSCR indicates that interrupt handling has finished.
*/
readl(aic->regs + AIC_IPER);
writel(0, aic->regs + AIC_EOSCR);
/* Initialize trigger mode and priority of each interrupt source */ for (i = 0; i < AIC_NUM_IRQS; i++)
writel(AIC_SCR_SRCTYPE_HIGH_LEVEL | AIC_SCR_PRIORITY(7),
aic->regs + AIC_SCR(i));
}
staticvoid __exception_irq_entry wpcm450_aic_handle_irq(struct pt_regs *regs)
{ int hwirq;
/* Determine the interrupt source */ /* Read IPER to signal that nIRQ can be de-asserted */
hwirq = readl(aic->regs + AIC_IPER) / 4;
staticint wpcm450_aic_set_type(struct irq_data *d, unsignedint flow_type)
{ /* * The hardware supports high/low level, as well as rising/falling edge * modes, and the DT binding accommodates for that, but as long as * other modes than high level mode are not used and can't be tested, * they are rejected in this driver.
*/ if ((flow_type & IRQ_TYPE_SENSE_MASK) != IRQ_TYPE_LEVEL_HIGH) return -EINVAL;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.