This file is is bit of a mess. It's included by the ni_atmio, ni_mio_cs, and
ni_pcimio drivers. The ni_pcimio driver is the only one that uses DMA. It
defines PCIDMA so that the dma code is compiled it. This causes a bunch
of ifdef'ery in the file.

The DIO subdevice for the ni_pcidio "is_m_series" boards is quite different
from the standard e-series DIO. Mainly it supports async commands that use
DMA.

Tidy up some of the ifdef'ery by adding ifdef to the subdevice init.

Also and ifdef to the interrupt handler and remove the unnecessary if
(!devpriv->is_m_series) check in handle_cdio_interrupt().

Consolidate the other ifdef's to block out the affected code.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers/ni_mio_common.c | 26 ++++++++------------------
 1 file changed, 8 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c 
b/drivers/staging/comedi/drivers/ni_mio_common.c
index 11a2453..8544de1 100644
--- a/drivers/staging/comedi/drivers/ni_mio_common.c
+++ b/drivers/staging/comedi/drivers/ni_mio_common.c
@@ -667,11 +667,8 @@ static int ni_request_gpct_mite_channel(struct 
comedi_device *dev,
        return 0;
 }
 
-#endif /*  PCIDMA */
-
 static int ni_request_cdo_mite_channel(struct comedi_device *dev)
 {
-#ifdef PCIDMA
        struct ni_private *devpriv = dev->private;
        struct mite_channel *mite_chan;
        unsigned long flags;
@@ -700,9 +697,9 @@ static int ni_request_cdo_mite_channel(struct comedi_device 
*dev)
                        NI_M_CDIO_DMA_SEL_CDO(bits));
 
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
-#endif /*  PCIDMA */
        return 0;
 }
+#endif /*  PCIDMA */
 
 static void ni_release_ai_mite_channel(struct comedi_device *dev)
 {
@@ -759,11 +756,9 @@ static void ni_release_gpct_mite_channel(struct 
comedi_device *dev,
        }
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
 }
-#endif /*  PCIDMA */
 
 static void ni_release_cdo_mite_channel(struct comedi_device *dev)
 {
-#ifdef PCIDMA
        struct ni_private *devpriv = dev->private;
        unsigned long flags;
 
@@ -775,10 +770,8 @@ static void ni_release_cdo_mite_channel(struct 
comedi_device *dev)
                devpriv->cdo_mite_chan = NULL;
        }
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
-#endif /*  PCIDMA */
 }
 
-#ifdef PCIDMA
 static void ni_e_series_enable_second_irq(struct comedi_device *dev,
                                          unsigned gpct_index, short enable)
 {
@@ -3505,6 +3498,7 @@ static int ni_dio_insn_bits(struct comedi_device *dev,
        return insn->n;
 }
 
+#ifdef PCIDMA
 static int ni_m_series_dio_insn_config(struct comedi_device *dev,
                                       struct comedi_subdevice *s,
                                       struct comedi_insn *insn,
@@ -3610,10 +3604,8 @@ static int ni_cdo_inttrig(struct comedi_device *dev,
        const unsigned timeout = 1000;
        int retval = 0;
        unsigned i;
-#ifdef PCIDMA
        struct ni_private *devpriv = dev->private;
        unsigned long flags;
-#endif
 
        if (trig_num != cmd->start_arg)
                return -EINVAL;
@@ -3623,7 +3615,6 @@ static int ni_cdo_inttrig(struct comedi_device *dev,
        /* read alloc the entire buffer */
        comedi_buf_read_alloc(s, s->async->prealloc_bufsz);
 
-#ifdef PCIDMA
        spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
        if (devpriv->cdo_mite_chan) {
                mite_prep_dma(devpriv->cdo_mite_chan, 32, 32);
@@ -3635,7 +3626,7 @@ static int ni_cdo_inttrig(struct comedi_device *dev,
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
        if (retval < 0)
                return retval;
-#endif
+
        /*
         * XXX not sure what interrupt C group does
         * wait for dma to fill output fifo
@@ -3716,13 +3707,8 @@ static void handle_cdio_interrupt(struct comedi_device 
*dev)
        struct ni_private *devpriv = dev->private;
        unsigned cdio_status;
        struct comedi_subdevice *s = &dev->subdevices[NI_DIO_SUBDEV];
-#ifdef PCIDMA
        unsigned long flags;
-#endif
 
-       if (!devpriv->is_m_series)
-               return;
-#ifdef PCIDMA
        spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
        if (devpriv->cdo_mite_chan) {
                unsigned cdo_mite_status =
@@ -3735,7 +3721,6 @@ static void handle_cdio_interrupt(struct comedi_device 
*dev)
                mite_sync_output_dma(devpriv->cdo_mite_chan, s);
        }
        spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags);
-#endif
 
        cdio_status = ni_readl(dev, NI_M_CDIO_STATUS_REG);
        if (cdio_status & NI_M_CDIO_STATUS_CDO_ERROR) {
@@ -3751,6 +3736,7 @@ static void handle_cdio_interrupt(struct comedi_device 
*dev)
        }
        comedi_handle_events(dev, s);
 }
+#endif /*  PCIDMA */
 
 static int ni_serial_hw_readwrite8(struct comedi_device *dev,
                                   struct comedi_subdevice *s,
@@ -5266,7 +5252,9 @@ static irqreturn_t ni_E_interrupt(int irq, void *d)
                handle_b_interrupt(dev, b_status, ao_mite_status);
        handle_gpct_interrupt(dev, 0);
        handle_gpct_interrupt(dev, 1);
+#ifdef PCIDMA
        handle_cdio_interrupt(dev);
+#endif
 
        spin_unlock_irqrestore(&dev->spinlock, flags);
        return IRQ_HANDLED;
@@ -5405,6 +5393,7 @@ static int ni_E_init(struct comedi_device *dev,
        s->maxdata      = 1;
        s->range_table  = &range_digital;
        if (devpriv->is_m_series) {
+#ifdef PCIDMA
                s->subdev_flags |= SDF_LSAMPL;
                s->insn_bits    = ni_m_series_dio_insn_bits;
                s->insn_config  = ni_m_series_dio_insn_config;
@@ -5424,6 +5413,7 @@ static int ni_E_init(struct comedi_device *dev,
                               NI_M_CDI_CMD_RESET,
                          NI_M_CDIO_CMD_REG);
                ni_writel(dev, s->io_bits, NI_M_DIO_DIR_REG);
+#endif /* PCIDMA */
        } else {
                s->insn_bits    = ni_dio_insn_bits;
                s->insn_config  = ni_dio_insn_config;
-- 
2.6.3

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

Reply via email to