staging: comedi: das1800: initialize all analog outputs
authorH Hartley Sweeten <[email protected]>
Fri, 8 Apr 2016 19:41:40 +0000 (12:41 -0700)
committerGreg Kroah-Hartman <[email protected]>
Fri, 29 Apr 2016 05:16:10 +0000 (22:16 -0700)
The current code used to initialize the analog outputs only sets the
last channel. The other channels will be reloaded with the last value
that was written to them.

Move the code into the subdevice init and properly initialize all the
channels to 0V.

Signed-off-by: H Hartley Sweeten <[email protected]>
Reviewed-by: Ian Abbott <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
drivers/staging/comedi/drivers/das1800.c

index 6641f2ed3fe6f7613ec403d32663d0b0ad04eb17..45d72013917cba781b57a94941aa5612b2f18699 100644 (file)
@@ -1262,6 +1262,7 @@ static int das1800_attach(struct comedi_device *dev,
        unsigned int irq = it->options[1];
        bool is_16bit;
        int ret;
+       int i;
 
        devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
        if (!devpriv)
@@ -1365,6 +1366,12 @@ static int das1800_attach(struct comedi_device *dev,
                s->maxdata      = is_16bit ? 0xffff : 0x0fff;
                s->range_table  = &range_bipolar10;
                s->insn_write   = das1800_ao_insn_write;
+
+               /* initialize all channels to 0V */
+               for (i = 0; i < s->n_chan; i++) {
+                       outb(DAC(i), dev->iobase + DAS1800_SELECT);
+                       outw(0, dev->iobase + DAS1800_DAC);
+               }
        } else {
                s->type         = COMEDI_SUBD_UNUSED;
        }
@@ -1392,14 +1399,6 @@ static int das1800_attach(struct comedi_device *dev,
        /*  initialize digital out channels */
        outb(0, dev->iobase + DAS1800_DIGITAL);
 
-       /*  initialize analog out channels */
-       if (board->ao_ability == 1) {
-               /*  select 'update' dac channel for baseAddress + 0x0 */
-               outb(DAC(board->ao_n_chan - 1),
-                    dev->iobase + DAS1800_SELECT);
-               outw(devpriv->ao_update_bits, dev->iobase + DAS1800_DAC);
-       }
-
        return 0;
 };