From: H Hartley Sweeten Date: Fri, 21 Nov 2014 21:22:30 +0000 (-0700) Subject: staging: comedi: adv_pci1723: absorb pci1723_reset() X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=5317f9a6299cefbf8eadea7d8a0355c0ec9cc2b0;p=deliverable%2Flinux.git staging: comedi: adv_pci1723: absorb pci1723_reset() This function is only called by the (*auto_attach) to reset all the analog output channels. For aesthetics, absorb the function. Fix the range programming for each channel. According to the users manual the "range strobe" register needs to be written after setting the "DAC range control" register in order to load the range setting. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/drivers/adv_pci1723.c b/drivers/staging/comedi/drivers/adv_pci1723.c index 1b59eb2ff4e9..098c69cfbaee 100644 --- a/drivers/staging/comedi/drivers/adv_pci1723.c +++ b/drivers/staging/comedi/drivers/adv_pci1723.c @@ -89,33 +89,6 @@ struct pci1723_private { unsigned short ao_data[8]; /* data output buffer */ }; -/* - * The pci1723 card reset; - */ -static int pci1723_reset(struct comedi_device *dev) -{ - struct pci1723_private *devpriv = dev->private; - int i; - - outw(PCI1723_SYNC_CTRL_SYNC, dev->iobase + PCI1723_SYNC_CTRL_REG); - - for (i = 0; i < 8; i++) { - /* set all outputs to 0V */ - devpriv->ao_data[i] = 0x8000; - outw(devpriv->ao_data[i], dev->iobase + PCI1723_AO_REG(i)); - /* set all ranges to +/- 10V */ - outw(PCI1723_CTRL_RANGE(0) | PCI1723_CTRL_CHAN(i), - PCI1723_CTRL_REG); - } - - outw(0, dev->iobase + PCI1723_RANGE_STROBE_REG); - outw(0, dev->iobase + PCI1723_SYNC_STROBE_REG); - - outw(PCI1723_SYNC_CTRL_ASYNC, dev->iobase + PCI1723_SYNC_CTRL_REG); - - return 0; -} - static int pci1723_insn_read_ao(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) @@ -201,6 +174,7 @@ static int pci1723_auto_attach(struct comedi_device *dev, struct pci1723_private *devpriv; struct comedi_subdevice *s; int ret; + int i; devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); if (!devpriv) @@ -226,6 +200,21 @@ static int pci1723_auto_attach(struct comedi_device *dev, s->insn_write = pci1723_ao_write_winsn; s->insn_read = pci1723_insn_read_ao; + /* synchronously reset all analog outputs to 0V, +/-10V range */ + outw(PCI1723_SYNC_CTRL_SYNC, dev->iobase + PCI1723_SYNC_CTRL_REG); + for (i = 0; i < s->n_chan; i++) { + outw(PCI1723_CTRL_RANGE(0) | PCI1723_CTRL_CHAN(i), + PCI1723_CTRL_REG); + outw(0, dev->iobase + PCI1723_RANGE_STROBE_REG); + + devpriv->ao_data[i] = 0x8000; + outw(devpriv->ao_data[i], dev->iobase + PCI1723_AO_REG(i)); + } + outw(0, dev->iobase + PCI1723_SYNC_STROBE_REG); + + /* disable syncronous control */ + outw(PCI1723_SYNC_CTRL_ASYNC, dev->iobase + PCI1723_SYNC_CTRL_REG); + s = &dev->subdevices[1]; s->type = COMEDI_SUBD_DIO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE; @@ -254,8 +243,6 @@ static int pci1723_auto_attach(struct comedi_device *dev, /* read DIO port state */ s->state = inw(dev->iobase + PCI1723_DIO_DATA_REG); - pci1723_reset(dev); - return 0; }