Commit 28e8c898 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: adl_pci9118: use comedi_buf_write_samples()

Use comedi_buf_write_samples() to add the samples to the async buffer.
The number of bytes to add is determined automatically based on the
number of samples and the bytes_per_sample().

Change the return type of move_block_from_dma() to void and remove the
unnecessary check of the return value of comedi_buf_write_samples().
The callers don't check the return and it's really not necessary. If
comedi_buf_write_samples() fails to allocate enough space in the async
buffer to add all the samples it sets the COMEDI_CB_OVERFLOW event.
This will cause the async command to (*cancel) when the events are
handled.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8d47c085
...@@ -472,26 +472,21 @@ static unsigned int defragment_dma_buffer(struct comedi_device *dev, ...@@ -472,26 +472,21 @@ static unsigned int defragment_dma_buffer(struct comedi_device *dev,
return j; return j;
} }
static int move_block_from_dma(struct comedi_device *dev, static void move_block_from_dma(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
unsigned short *dma_buffer, unsigned short *dma_buffer,
unsigned int num_samples) unsigned int num_samples)
{ {
struct pci9118_private *devpriv = dev->private; struct pci9118_private *devpriv = dev->private;
struct comedi_cmd *cmd = &s->async->cmd; struct comedi_cmd *cmd = &s->async->cmd;
unsigned int num_bytes;
num_samples = defragment_dma_buffer(dev, s, dma_buffer, num_samples); num_samples = defragment_dma_buffer(dev, s, dma_buffer, num_samples);
devpriv->ai_act_scan += devpriv->ai_act_scan +=
(s->async->cur_chan + num_samples) / cmd->scan_end_arg; (s->async->cur_chan + num_samples) / cmd->scan_end_arg;
s->async->cur_chan += num_samples; s->async->cur_chan += num_samples;
s->async->cur_chan %= cmd->scan_end_arg; s->async->cur_chan %= cmd->scan_end_arg;
num_bytes =
cfc_write_array_to_buffer(s, dma_buffer, comedi_buf_write_samples(s, dma_buffer, num_samples);
num_samples * sizeof(short));
if (num_bytes < num_samples * sizeof(short))
return -1;
return 0;
} }
static void pci9118_exttrg_enable(struct comedi_device *dev, bool enable) static void pci9118_exttrg_enable(struct comedi_device *dev, bool enable)
...@@ -617,7 +612,7 @@ static void interrupt_pci9118_ai_onesample(struct comedi_device *dev, ...@@ -617,7 +612,7 @@ static void interrupt_pci9118_ai_onesample(struct comedi_device *dev,
sampl = inl(dev->iobase + PCI9118_AI_FIFO_REG); sampl = inl(dev->iobase + PCI9118_AI_FIFO_REG);
cfc_write_to_buffer(s, sampl); comedi_buf_write_samples(s, &sampl, 1);
s->async->cur_chan++; s->async->cur_chan++;
if (s->async->cur_chan >= cmd->scan_end_arg) { if (s->async->cur_chan >= cmd->scan_end_arg) {
/* one scan done */ /* one scan done */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment