diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2015-01-14 10:05:14 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-01-17 14:32:56 -0800 |
commit | 93e604523619d32a88e0afbdfef65ec83582c209 (patch) | |
tree | 1617452353819df04278936d70357f243c892631 /drivers | |
parent | fe4a22a009982442ba8b37f4f499f708d956d16d (diff) |
staging: comedi: pcl816: use common function to setup dma
THe pcl816_ai_setup_dma() and pcl816_ai_setup_next_dma() functions are similar
other than the buffer switch and the inclusion of the "unread_samples" in
pcl818_ai_setup_next_dma() when calculating the dma size.
Merge these two functions by initializing the 'dma->cur_dma' in the callers
and passing '0' for the "unread_samples" when first starting the DMA.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/comedi/drivers/pcl816.c | 43 |
1 files changed, 11 insertions, 32 deletions
diff --git a/drivers/staging/comedi/drivers/pcl816.c b/drivers/staging/comedi/drivers/pcl816.c index 88c89df717e5..da35edfccbc3 100644 --- a/drivers/staging/comedi/drivers/pcl816.c +++ b/drivers/staging/comedi/drivers/pcl816.c @@ -142,47 +142,22 @@ static void pcl816_start_pacer(struct comedi_device *dev, bool load_counters) } static void pcl816_ai_setup_dma(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - struct pcl816_private *devpriv = dev->private; - struct comedi_isadma *dma = devpriv->dma; - struct comedi_isadma_desc *desc = &dma->desc[0]; - unsigned int nsamples; - - dma->cur_dma = 0; - - /* - * Determine dma size based on the buffer maxsize and the number of - * samples remaining in the command. - */ - nsamples = comedi_bytes_to_samples(s, desc->maxsize); - nsamples = comedi_nsamples_left(s, nsamples); - desc->size = comedi_samples_to_bytes(s, nsamples); - comedi_isadma_program(desc); -} - -static void pcl816_ai_setup_next_dma(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int unread_samples) + struct comedi_subdevice *s, + unsigned int unread_samples) { struct pcl816_private *devpriv = dev->private; struct comedi_isadma *dma = devpriv->dma; - struct comedi_isadma_desc *desc; - unsigned int max_samples; + struct comedi_isadma_desc *desc = &dma->desc[dma->cur_dma]; + unsigned int max_samples = comedi_bytes_to_samples(s, desc->maxsize); unsigned int nsamples; comedi_isadma_disable(dma->chan); - dma->cur_dma = 1 - dma->cur_dma; - desc = &dma->desc[dma->cur_dma]; - /* * Determine dma size based on the buffer maxsize plus the number of * unread samples and the number of samples remaining in the command. */ - max_samples = comedi_bytes_to_samples(s, desc->maxsize); - nsamples = max_samples + unread_samples; - nsamples = comedi_nsamples_left(s, nsamples); + nsamples = comedi_nsamples_left(s, max_samples + unread_samples); if (nsamples > unread_samples) { nsamples -= unread_samples; desc->size = comedi_samples_to_bytes(s, nsamples); @@ -321,7 +296,9 @@ static irqreturn_t pcl816_interrupt(int irq, void *d) bufptr = devpriv->ai_poll_ptr; devpriv->ai_poll_ptr = 0; - pcl816_ai_setup_next_dma(dev, s, nsamples); + /* restart dma with the next buffer */ + dma->cur_dma = 1 - dma->cur_dma; + pcl816_ai_setup_dma(dev, s, nsamples); transfer_from_dma_buf(dev, s, desc->virt_addr, bufptr, nsamples); @@ -485,7 +462,9 @@ static int pcl816_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_poll_ptr = 0; devpriv->ai_cmd_canceled = 0; - pcl816_ai_setup_dma(dev, s); + /* setup and enable dma for the first buffer */ + dma->cur_dma = 0; + pcl816_ai_setup_dma(dev, s, 0); pcl816_start_pacer(dev, true); |