[PATCH 15/29] staging: comedi: dt282x: tidy up dt282x_ao_dma_interrupt()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The main interrupt handler already has the comedi_subdevice pointer
needed in this function. Pass that subdevice pointer so that it does
not need to be fetched as a local variable.

Tidy up the function a bit.

Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx>
Cc: Ian Abbott <abbotti@xxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 drivers/staging/comedi/drivers/dt282x.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c
index 3071f11..40c5794 100644
--- a/drivers/staging/comedi/drivers/dt282x.c
+++ b/drivers/staging/comedi/drivers/dt282x.c
@@ -461,31 +461,27 @@ static void dt282x_munge(struct comedi_device *dev,
 	}
 }
 
-static void dt282x_ao_dma_interrupt(struct comedi_device *dev)
+static void dt282x_ao_dma_interrupt(struct comedi_device *dev,
+				    struct comedi_subdevice *s)
 {
 	struct dt282x_private *devpriv = dev->private;
-	struct comedi_subdevice *s = dev->write_subdev;
-	void *ptr;
+	int cur_dma = devpriv->current_dma_index;
+	void *ptr = devpriv->dma[cur_dma].buf;
 	int size;
-	int i;
 
 	outw(devpriv->supcsr | DT2821_CLRDMADNE, dev->iobase + DT2821_SUPCSR);
 
-	i = devpriv->current_dma_index;
-	ptr = devpriv->dma[i].buf;
+	disable_dma(devpriv->dma[cur_dma].chan);
 
-	disable_dma(devpriv->dma[i].chan);
-
-	devpriv->current_dma_index = 1 - i;
+	devpriv->current_dma_index = 1 - cur_dma;
 
 	size = cfc_read_array_from_buffer(s, ptr, devpriv->dma_maxsize);
 	if (size == 0) {
 		dev_err(dev->class_dev, "AO underrun\n");
 		s->async->events |= COMEDI_CB_OVERFLOW;
-		return;
+	} else {
+		dt282x_prep_ao_dma(dev, cur_dma, size);
 	}
-	dt282x_prep_ao_dma(dev, i, size);
-	return;
 }
 
 static void dt282x_ai_dma_interrupt(struct comedi_device *dev)
@@ -556,7 +552,7 @@ static irqreturn_t dt282x_interrupt(int irq, void *d)
 		if (devpriv->dma_dir == DMA_MODE_READ)
 			dt282x_ai_dma_interrupt(dev);
 		else
-			dt282x_ao_dma_interrupt(dev);
+			dt282x_ao_dma_interrupt(dev, s_ao);
 		handled = 1;
 	}
 	if (adcsr & DT2821_ADERR) {
-- 
1.9.3

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux