summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/ni_labpc_isadma.c
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2013-06-28 17:09:26 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-23 14:27:52 -0700
commit9bd53e0398f490707549455c00475af4923df872 (patch)
treeb10e05f084b2f8e37624f74e2119f2adb7c34a75 /drivers/staging/comedi/drivers/ni_labpc_isadma.c
parentf88e8e09880d4abe3cad98ec8889e0f46eb89e4d (diff)
staging: comedi: ni_labpc: migrate DMA status handling
Migrate the code for checking and handling the interrupt status handling for ISA DMA transfers into new a new function `labpc_handle_dma_status()` in the "ni_labpc_isadma" module. Provide a dummy inline function in "ni_labpc_isadma.h" if the "ni_labpc_isadma" module is not being built. The static function `handle_isa_dma()` also needs to move across to the new module. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_labpc_isadma.c')
-rw-r--r--drivers/staging/comedi/drivers/ni_labpc_isadma.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/staging/comedi/drivers/ni_labpc_isadma.c b/drivers/staging/comedi/drivers/ni_labpc_isadma.c
index c4bfecc07b63..2149596830af 100644
--- a/drivers/staging/comedi/drivers/ni_labpc_isadma.c
+++ b/drivers/staging/comedi/drivers/ni_labpc_isadma.c
@@ -137,6 +137,33 @@ void labpc_drain_dma(struct comedi_device *dev)
}
EXPORT_SYMBOL_GPL(labpc_drain_dma);
+static void handle_isa_dma(struct comedi_device *dev)
+{
+ struct labpc_private *devpriv = dev->private;
+
+ labpc_drain_dma(dev);
+
+ enable_dma(devpriv->dma_chan);
+
+ /* clear dma tc interrupt */
+ devpriv->write_byte(0x1, dev->iobase + DMATC_CLEAR_REG);
+}
+
+void labpc_handle_dma_status(struct comedi_device *dev)
+{
+ const struct labpc_boardinfo *board = comedi_board(dev);
+ struct labpc_private *devpriv = dev->private;
+
+ /*
+ * if a dma terminal count of external stop trigger
+ * has occurred
+ */
+ if (devpriv->stat1 & STAT1_GATA0 ||
+ (board->is_labpc1200 && devpriv->stat2 & STAT2_OUTA1))
+ handle_isa_dma(dev);
+}
+EXPORT_SYMBOL_GPL(labpc_handle_dma_status);
+
int labpc_init_dma_chan(struct comedi_device *dev, unsigned int dma_chan)
{
struct labpc_private *devpriv = dev->private;