staging: comedi: das16m1: remove do_bits from private data
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Fri, 30 Aug 2013 18:08:12 +0000 (11:08 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Sep 2013 14:47:41 +0000 (07:47 -0700)
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: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/das16m1.c

index b943c44..187b0a1 100644 (file)
@@ -134,7 +134,6 @@ struct das16m1_private_struct {
         * counter yet (loaded by first sample conversion) */
        u16 initial_hw_count;
        short ai_buffer[FIFO_SIZE];
-       unsigned int do_bits;   /*  saves status of digital output bits */
        unsigned int divisor1;  /*  divides master clock to obtain conversion speed */
        unsigned int divisor2;  /*  divides master clock to obtain conversion speed */
        unsigned long extra_iobase;
@@ -393,22 +392,13 @@ static int das16m1_di_rbits(struct comedi_device *dev,
 
 static int das16m1_do_wbits(struct comedi_device *dev,
                            struct comedi_subdevice *s,
-                           struct comedi_insn *insn, unsigned int *data)
+                           struct comedi_insn *insn,
+                           unsigned int *data)
 {
-       struct das16m1_private_struct *devpriv = dev->private;
-       unsigned int wbits;
-
-       /*  only set bits that have been masked */
-       data[0] &= 0xf;
-       wbits = devpriv->do_bits;
-       /*  zero bits that have been masked */
-       wbits &= ~data[0];
-       /*  set masked bits */
-       wbits |= data[0] & data[1];
-       devpriv->do_bits = wbits;
-       data[1] = wbits;
+       if (comedi_dio_update_state(s, data))
+               outb(s->state, dev->iobase + DAS16M1_DIO);
 
-       outb(devpriv->do_bits, dev->iobase + DAS16M1_DIO);
+       data[1] = s->state;
 
        return insn->n;
 }
@@ -649,7 +639,7 @@ static int das16m1_attach(struct comedi_device *dev,
        outb(TOTAL_CLEAR, dev->iobase + DAS16M1_8254_FIRST_CNTRL);
 
        /*  initialize digital output lines */
-       outb(devpriv->do_bits, dev->iobase + DAS16M1_DIO);
+       outb(0, dev->iobase + DAS16M1_DIO);
 
        /* set the interrupt level */
        if (dev->irq)