Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+7 −12
Original line number Original line Diff line number Diff line
@@ -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,


	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 */