diff options
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/comedi/drivers/adv_pci1723.c | 45 |
1 files changed, 16 insertions, 29 deletions
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; } |