diff options
-rw-r--r-- | drivers/staging/comedi/drivers/quatech_daqp_cs.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index dbb8593a8db..f11104252c9 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -686,20 +686,28 @@ static int daqp_di_insn_bits(struct comedi_device *dev, return insn->n; } -/* Digital output routine */ - -static int daqp_do_insn_write(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int daqp_do_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { struct daqp_private *devpriv = dev->private; + unsigned int mask = data[0]; + unsigned int bits = data[1]; if (devpriv->stop) return -EIO; - outw(data[0] & 0xf, dev->iobase + DAQP_DIGITAL_IO); + if (mask) { + s->state &= ~mask; + s->state |= (bits & mask); - return 1; + outb(s->state, dev->iobase + DAQP_DIGITAL_IO); + } + + data[1] = s->state; + + return insn->n; } static int daqp_auto_attach(struct comedi_device *dev, @@ -764,8 +772,8 @@ static int daqp_auto_attach(struct comedi_device *dev, s->type = COMEDI_SUBD_DO; s->subdev_flags = SDF_WRITEABLE; s->n_chan = 1; - s->len_chanlist = 1; - s->insn_write = daqp_do_insn_write; + s->maxdata = 1; + s->insn_bits = daqp_do_insn_bits; return 0; } |