summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-11-21 14:22:30 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-11-26 15:39:59 -0800
commit5317f9a6299cefbf8eadea7d8a0355c0ec9cc2b0 (patch)
treee440970b9977fa328b5b8593339eb16e92218dbf /drivers/staging/comedi
parentb5ed2b28433e9b8826a30fbc942bc2309dca7031 (diff)
downloadop-kernel-dev-5317f9a6299cefbf8eadea7d8a0355c0ec9cc2b0.zip
op-kernel-dev-5317f9a6299cefbf8eadea7d8a0355c0ec9cc2b0.tar.gz
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 <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi')
-rw-r--r--drivers/staging/comedi/drivers/adv_pci1723.c45
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 1b59eb2..098c69c 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;
}
OpenPOWER on IntegriCloud