mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
staging: comedi: ni_660x: tidy up ni_660x_dio_insn_bits()
Use some local variables to clarify this function. This (*insn_bits) function is a bit different from most comedi drivers. Add some comments to clarify why the shifts are used. 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>
This commit is contained in:
parent
7e90618694
commit
826f783a0e
@ -780,21 +780,30 @@ static void init_tio_chip(struct comedi_device *dev, int chipset)
|
||||
|
||||
static int ni_660x_dio_insn_bits(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s,
|
||||
struct comedi_insn *insn, unsigned int *data)
|
||||
struct comedi_insn *insn,
|
||||
unsigned int *data)
|
||||
{
|
||||
unsigned int base_bitfield_channel = CR_CHAN(insn->chanspec);
|
||||
unsigned int shift = CR_CHAN(insn->chanspec);
|
||||
unsigned int mask = data[0] << shift;
|
||||
unsigned int bits = data[1] << shift;
|
||||
|
||||
/* Check if we have to write some bits */
|
||||
if (data[0]) {
|
||||
s->state &= ~(data[0] << base_bitfield_channel);
|
||||
s->state |= (data[0] & data[1]) << base_bitfield_channel;
|
||||
/* Write out the new digital output lines */
|
||||
/*
|
||||
* There are 40 channels in this subdevice but only 32 are usable
|
||||
* as DIO. The shift adjusts the mask/bits to account for the base
|
||||
* channel in insn->chanspec. The state update can then be handled
|
||||
* normally for the 32 usable channels.
|
||||
*/
|
||||
if (mask) {
|
||||
s->state &= ~mask;
|
||||
s->state |= (bits & mask);
|
||||
ni_660x_write(dev, 0, s->state, NI660X_DIO32_OUTPUT);
|
||||
}
|
||||
/* on return, data[1] contains the value of the digital
|
||||
* input and output lines. */
|
||||
data[1] = (ni_660x_read(dev, 0, NI660X_DIO32_INPUT) >>
|
||||
base_bitfield_channel);
|
||||
|
||||
/*
|
||||
* Return the input channels, shifted back to account for the base
|
||||
* channel.
|
||||
*/
|
||||
data[1] = ni_660x_read(dev, 0, NI660X_DIO32_INPUT) >> shift;
|
||||
|
||||
return insn->n;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user