mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 12:43:55 +08:00
staging: comedi: ni_atmio16d: fix atmio16d_dio_insn_config()
This is the (*insn_config) function for a DIO subdevice. It should be using the data[0] value as the "instruction" to perform on the subdevice. Use the comedi_dio_insn_config() helper to properly handle instructions. 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
49b71ebab2
commit
f9f34d57ba
@ -576,15 +576,19 @@ static int atmio16d_dio_insn_config(struct comedi_device *dev,
|
||||
unsigned int *data)
|
||||
{
|
||||
struct atmio16d_private *devpriv = dev->private;
|
||||
int i;
|
||||
int mask;
|
||||
unsigned int chan = CR_CHAN(insn->chanspec);
|
||||
unsigned int mask;
|
||||
int ret;
|
||||
|
||||
if (chan < 4)
|
||||
mask = 0x0f;
|
||||
else
|
||||
mask = 0xf0;
|
||||
|
||||
ret = comedi_dio_insn_config(dev, s, insn, data, mask);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < insn->n; i++) {
|
||||
mask = (CR_CHAN(insn->chanspec) < 4) ? 0x0f : 0xf0;
|
||||
s->io_bits &= ~mask;
|
||||
if (data[i])
|
||||
s->io_bits |= mask;
|
||||
}
|
||||
devpriv->com_reg_2_state &= ~(COMREG2_DOUTEN0 | COMREG2_DOUTEN1);
|
||||
if (s->io_bits & 0x0f)
|
||||
devpriv->com_reg_2_state |= COMREG2_DOUTEN0;
|
||||
@ -592,7 +596,7 @@ static int atmio16d_dio_insn_config(struct comedi_device *dev,
|
||||
devpriv->com_reg_2_state |= COMREG2_DOUTEN1;
|
||||
outw(devpriv->com_reg_2_state, dev->iobase + COM_REG_2);
|
||||
|
||||
return i;
|
||||
return insn->n;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user