Commit 8c32d5da authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: das1800: remove do_bits from private data

Use the subdevice 'state' variable instead of carrying the state of
the output channels in the private data.

Use comedi_dio_update_state() to handle the boilerplate code to update
the subdevice s->state.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4800fee7
...@@ -427,7 +427,6 @@ struct das1800_private { ...@@ -427,7 +427,6 @@ struct das1800_private {
volatile unsigned int count; /* number of data points left to be taken */ volatile unsigned int count; /* number of data points left to be taken */
unsigned int divisor1; /* value to load into board's counter 1 for timed conversions */ unsigned int divisor1; /* value to load into board's counter 1 for timed conversions */
unsigned int divisor2; /* value to load into board's counter 2 for timed conversions */ unsigned int divisor2; /* value to load into board's counter 2 for timed conversions */
int do_bits; /* digital output bits */
int irq_dma_bits; /* bits for control register b */ int irq_dma_bits; /* bits for control register b */
/* dma bits for control register b, stored so that dma can be /* dma bits for control register b, stored so that dma can be
* turned on and off */ * turned on and off */
...@@ -1319,24 +1318,15 @@ static int das1800_di_rbits(struct comedi_device *dev, ...@@ -1319,24 +1318,15 @@ static int das1800_di_rbits(struct comedi_device *dev,
return insn->n; return insn->n;
} }
/* writes to digital output channels */
static int das1800_do_wbits(struct comedi_device *dev, static int das1800_do_wbits(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data) struct comedi_insn *insn,
unsigned int *data)
{ {
struct das1800_private *devpriv = dev->private; if (comedi_dio_update_state(s, data))
unsigned int wbits; outb(s->state, dev->iobase + DAS1800_DIGITAL);
/* only set bits that have been masked */
data[0] &= (1 << s->n_chan) - 1;
wbits = devpriv->do_bits;
wbits &= ~data[0];
wbits |= data[0] & data[1];
devpriv->do_bits = wbits;
outb(devpriv->do_bits, dev->iobase + DAS1800_DIGITAL);
data[1] = devpriv->do_bits; data[1] = s->state;
return insn->n; return insn->n;
} }
...@@ -1644,7 +1634,7 @@ static int das1800_attach(struct comedi_device *dev, ...@@ -1644,7 +1634,7 @@ static int das1800_attach(struct comedi_device *dev,
das1800_cancel(dev, dev->read_subdev); das1800_cancel(dev, dev->read_subdev);
/* initialize digital out channels */ /* initialize digital out channels */
outb(devpriv->do_bits, dev->iobase + DAS1800_DIGITAL); outb(0, dev->iobase + DAS1800_DIGITAL);
/* initialize analog out channels */ /* initialize analog out channels */
if (thisboard->ao_ability == 1) { if (thisboard->ao_ability == 1) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment