From 605b670e9b0ca1036dee636701af0dd220927e67 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 8 Apr 2016 12:41:40 -0700 Subject: [PATCH] staging: comedi: das1800: initialize all analog outputs 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 Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/das1800.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index 6641f2e..45d7201 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -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; }; -- 2.7.4