Skip to content

Commit

Permalink
staging: comedi: adv_pci1710: clarify the 'act_chanlist'
Browse files Browse the repository at this point in the history
This driver saves the channel list of a scan in the private data and uses
that list to check analog input samples for data dropout.

Currently the channel numbers are shifted 12 bits so that they match the
channel number in the samples that are read from the board. All of the
shifts make the driver a bit harder to follow.

Store the channel numbers directly to the 'act_chanlist' and shift the
sample value instead when checking for the dropout. Add a comment for
clarity.

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>
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Jan 25, 2015
1 parent e4451ee commit 133dfbf
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions drivers/staging/comedi/drivers/adv_pci1710.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,11 +293,16 @@ static int pci171x_ai_dropout(struct comedi_device *dev,
struct pci1710_private *devpriv = dev->private;

if (!board->is_pci1713) {
if ((val & 0xf000) != devpriv->act_chanlist[chan]) {
/*
* The upper 4 bits of the 16-bit sample are the channel number
* that the sample was acquired from. Verify that this channel
* number matches the expected channel number.
*/
val >>= 12;
if (val != devpriv->act_chanlist[chan]) {
dev_err(dev->class_dev,
"A/D data droput: received from channel %d, expected %d\n",
(val >> 12) & 0xf,
(devpriv->act_chanlist[chan] >> 12) & 0xf);
val, devpriv->act_chanlist[chan]);
return -ENODATA;
}
}
Expand Down Expand Up @@ -386,13 +391,10 @@ static void setup_channel_list(struct comedi_device *dev,
if (CR_AREF(chanlist[i]) == AREF_DIFF)
range |= 0x0020;
outw(range, dev->iobase + PCI171x_RANGE); /* select gain */
devpriv->act_chanlist[i] =
(CR_CHAN(chanlist[i]) << 12) & 0xf000;
}
for ( ; i < n_chan; i++) { /* store remainder of channel list */
devpriv->act_chanlist[i] =
(CR_CHAN(chanlist[i]) << 12) & 0xf000;
devpriv->act_chanlist[i] = CR_CHAN(chanlist[i]);
}
for ( ; i < n_chan; i++) /* store remainder of channel list */
devpriv->act_chanlist[i] = CR_CHAN(chanlist[i]);

devpriv->ai_et_MuxVal =
CR_CHAN(chanlist[0]) | (CR_CHAN(chanlist[seglen - 1]) << 8);
Expand Down

0 comments on commit 133dfbf

Please sign in to comment.