From: H Hartley Sweeten Date: Tue, 4 Mar 2014 18:29:32 +0000 (-0700) Subject: staging: comedi: pcl812: interrupt handlers should not busywait X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=db0446d0e2a059d3961210664a08dcd8104e448b;p=openwrt%2Fstaging%2Fblogic.git staging: comedi: pcl812: interrupt handlers should not busywait The interrupt is only generated by the hardware at the completion of an A/D conversion. Because of this the sanity check to make sure that the A/D conversion is complete and data is available is probably unnecessary but it doesn't hurt anything. The busywait loop is a different issue. Interrupt routines should not busywait. That's just mean... Remove the bustwait and use pcl812_ai_eoc() to check for the end-of- conversion. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/drivers/pcl812.c b/drivers/staging/comedi/drivers/pcl812.c index d67df0aaf241..d84348d1d854 100644 --- a/drivers/staging/comedi/drivers/pcl812.c +++ b/drivers/staging/comedi/drivers/pcl812.c @@ -887,8 +887,6 @@ static int pcl812_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) static irqreturn_t interrupt_pcl812_ai_int(int irq, void *d) { - char err = 1; - unsigned int timeout; struct comedi_device *dev = d; struct pcl812_private *devpriv = dev->private; struct comedi_subdevice *s = dev->read_subdev; @@ -897,26 +895,7 @@ static irqreturn_t interrupt_pcl812_ai_int(int irq, void *d) s->async->events = 0; - timeout = 50; /* wait max 50us, it must finish under 33us */ - if (s->maxdata > 0x0fff) { - while (timeout--) { - if (!(inb(dev->iobase + ACL8216_STATUS) & ACL8216_DRDY)) { - err = 0; - break; - } - udelay(1); - } - } else { - while (timeout--) { - if (!(inb(dev->iobase + PCL812_AD_HI) & PCL812_DRDY)) { - err = 0; - break; - } - udelay(1); - } - } - - if (err) { + if (pcl812_ai_eoc(dev, s, NULL, 0)) { dev_dbg(dev->class_dev, "A/D cmd IRQ without DRDY!\n"); s->cancel(dev, s); s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR;