On 07/02/2014 04:00 AM, qiang.z...@freescale.com wrote: >>> +static irqreturn_t flexcan_err_irq(int irq, void *dev_id) { >>> + struct net_device *dev = dev_id; >>> + struct flexcan_priv *priv = netdev_priv(dev); >>> + struct flexcan_regs __iomem *regs = priv->base; >>> + u32 reg_ctrl, reg_esr; >>> + >>> + reg_esr = flexcan_read(®s->esr); >>> + reg_ctrl = flexcan_read(®s->ctrl); >>> + >>> + if (reg_esr & FLEXCAN_ESR_ALL_INT) { >>> + if (reg_esr & FLEXCAN_ESR_ERR_INT) >>> + flexcan_write(reg_ctrl & ~FLEXCAN_CTRL_ERR_MSK, >>> + ®s->ctrl); >>> + flexcan_irq(irq, dev); >> >> I still don't understand why you need a special flexcan_err_irq() >> function. Why don't you just call: >> >> request_irq(priv->err_irq, flexcan_irq, IRQF_SHARED, dev->name, dev); >> >> instead? > > Flexcan_irq is for flexcan normal interrupt(such as Message Buffer, Wake up > and so on). > And it will return IRQ_HANDLED if flexcan_irq is triggered. > But err_irq is shared with other devices, it should return IRQ_HANDLED when > the interrupt > is triggered by flexcan device, if not return IRQ_NONE.
What about fixing flexcan_irq() first and the make use of it? Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev