aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2016-05-03 12:30:01 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-06-17 20:42:21 -0700
commit243c701308e9798d3bdd55cc2446cbbdbc44ea28 (patch)
tree4fb11e30668dbc353025c6ce963c624a97299f67
parentstaging: comedi: das16m1: minor cleanup to das16m1_ai_insn_read() (diff)
staging: comedi: das16m1: convert munge_sample_array() into a subdevice (*munge)
For aesthetics, convert this function into a subdevice (*munge) function and let the comedi core handle the munging. Add a comment about why the data needs to be munged. 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>
-rw-r--r--drivers/staging/comedi/drivers/das16m1.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/staging/comedi/drivers/das16m1.c b/drivers/staging/comedi/drivers/das16m1.c
index c0f279638cd8..a8030326980f 100644
--- a/drivers/staging/comedi/drivers/das16m1.c
+++ b/drivers/staging/comedi/drivers/das16m1.c
@@ -127,11 +127,21 @@ static void das16m1_ai_set_queue(struct comedi_device *dev,
}
}
-static void munge_sample_array(unsigned short *array, unsigned int num_elements)
+static void das16m1_ai_munge(struct comedi_device *dev,
+ struct comedi_subdevice *s,
+ void *data, unsigned int num_bytes,
+ unsigned int start_chan_index)
{
+ unsigned short *array = data;
+ unsigned int nsamples = comedi_bytes_to_samples(s, num_bytes);
unsigned int i;
- for (i = 0; i < num_elements; i++)
+ /*
+ * The fifo values have the channel number in the lower 4-bits and
+ * the sample in the upper 12-bits. This just shifts the values
+ * to remove the channel numbers.
+ */
+ for (i = 0; i < nsamples; i++)
array[i] = DAS16M1_AI_TO_SAMPLE(array[i]);
}
@@ -410,7 +420,6 @@ static void das16m1_handler(struct comedi_device *dev, unsigned int status)
if (num_samples > DAS16M1_AI_FIFO_SZ)
num_samples = DAS16M1_AI_FIFO_SZ;
insw(dev->iobase, devpriv->ai_buffer, num_samples);
- munge_sample_array(devpriv->ai_buffer, num_samples);
comedi_buf_write_samples(s, devpriv->ai_buffer, num_samples);
devpriv->adc_count += num_samples;
@@ -560,6 +569,7 @@ static int das16m1_attach(struct comedi_device *dev,
s->do_cmd = das16m1_ai_cmd;
s->cancel = das16m1_ai_cancel;
s->poll = das16m1_ai_poll;
+ s->munge = das16m1_ai_munge;
}
/* Digital Input subdevice */