From: H Hartley Sweeten Date: Tue, 4 Nov 2014 17:55:28 +0000 (-0700) Subject: staging: comedi: addi_apci_3120: move apci3120_interrupt_dma() to driver X-Git-Tag: v3.19-rc1~66^2~251 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=cd68e0e2d00501ff7e59c8213bfb9bd31d42c820;p=karo-tx-linux.git staging: comedi: addi_apci_3120: move apci3120_interrupt_dma() to driver Move this function from the included source file to the main driver source file. Remove the now empty included source file. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c deleted file mode 100644 index c6008711c3d3..000000000000 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This is a handler for the DMA interrupt. - * This function copies the data to Comedi Buffer. - * For continuous DMA it reinitializes the DMA operation. - * For single mode DMA it stop the acquisition. - */ -static void apci3120_interrupt_dma(int irq, void *d) -{ - struct comedi_device *dev = d; - struct apci3120_private *devpriv = dev->private; - struct comedi_subdevice *s = dev->read_subdev; - struct comedi_async *async = s->async; - struct comedi_cmd *cmd = &async->cmd; - struct apci3120_dmabuf *dmabuf; - unsigned int nbytes; - unsigned int nsamples; - - dmabuf = &devpriv->dmabuf[devpriv->cur_dmabuf]; - - nbytes = dmabuf->use_size - inl(devpriv->amcc + AMCC_OP_REG_MWTC); - - if (nbytes < dmabuf->use_size) - dev_err(dev->class_dev, "Interrupted DMA transfer!\n"); - if (nbytes & 1) { - dev_err(dev->class_dev, "Odd count of bytes in DMA ring!\n"); - async->events |= COMEDI_CB_ERROR; - return; - } - nsamples = comedi_bytes_to_samples(s, nbytes); - - if (devpriv->use_double_buffer) { - struct apci3120_dmabuf *next_dmabuf; - - next_dmabuf = &devpriv->dmabuf[!devpriv->cur_dmabuf]; - - /* start DMA on next buffer */ - apci3120_init_dma(dev, next_dmabuf); - } - - if (nsamples) { - comedi_buf_write_samples(s, dmabuf->virt, nsamples); - - if (!(cmd->flags & CMDF_WAKE_EOS)) - async->events |= COMEDI_CB_EOS; - } - - if ((async->events & COMEDI_CB_CANCEL_MASK) || - (cmd->stop_src == TRIG_COUNT && async->scans_done >= cmd->stop_arg)) - return; - - if (devpriv->use_double_buffer) { - /* switch dma buffers for next interrupt */ - devpriv->cur_dmabuf = !devpriv->cur_dmabuf; - } else { - /* restart DMA if is not using double buffering */ - apci3120_init_dma(dev, dmabuf); - } -} diff --git a/drivers/staging/comedi/drivers/addi_apci_3120.c b/drivers/staging/comedi/drivers/addi_apci_3120.c index fce177bd2db2..9bdd7277caa1 100644 --- a/drivers/staging/comedi/drivers/addi_apci_3120.c +++ b/drivers/staging/comedi/drivers/addi_apci_3120.c @@ -435,7 +435,58 @@ static void apci3120_set_chanlist(struct comedi_device *dev, devpriv->mode |= APCI3120_MODE_SCAN_ENA; } -#include "addi-data/hwdrv_apci3120.c" +static void apci3120_interrupt_dma(int irq, void *d) +{ + struct comedi_device *dev = d; + struct apci3120_private *devpriv = dev->private; + struct comedi_subdevice *s = dev->read_subdev; + struct comedi_async *async = s->async; + struct comedi_cmd *cmd = &async->cmd; + struct apci3120_dmabuf *dmabuf; + unsigned int nbytes; + unsigned int nsamples; + + dmabuf = &devpriv->dmabuf[devpriv->cur_dmabuf]; + + nbytes = dmabuf->use_size - inl(devpriv->amcc + AMCC_OP_REG_MWTC); + + if (nbytes < dmabuf->use_size) + dev_err(dev->class_dev, "Interrupted DMA transfer!\n"); + if (nbytes & 1) { + dev_err(dev->class_dev, "Odd count of bytes in DMA ring!\n"); + async->events |= COMEDI_CB_ERROR; + return; + } + nsamples = comedi_bytes_to_samples(s, nbytes); + + if (devpriv->use_double_buffer) { + struct apci3120_dmabuf *next_dmabuf; + + next_dmabuf = &devpriv->dmabuf[!devpriv->cur_dmabuf]; + + /* start DMA on next buffer */ + apci3120_init_dma(dev, next_dmabuf); + } + + if (nsamples) { + comedi_buf_write_samples(s, dmabuf->virt, nsamples); + + if (!(cmd->flags & CMDF_WAKE_EOS)) + async->events |= COMEDI_CB_EOS; + } + + if ((async->events & COMEDI_CB_CANCEL_MASK) || + (cmd->stop_src == TRIG_COUNT && async->scans_done >= cmd->stop_arg)) + return; + + if (devpriv->use_double_buffer) { + /* switch dma buffers for next interrupt */ + devpriv->cur_dmabuf = !devpriv->cur_dmabuf; + } else { + /* restart DMA if is not using double buffering */ + apci3120_init_dma(dev, dmabuf); + } +} static irqreturn_t apci3120_interrupt(int irq, void *d) {