|
@@ -494,6 +494,7 @@ static int pci171x_insn_write_ao(struct comedi_device *dev,
|
|
|
struct comedi_insn *insn, unsigned int *data)
|
|
|
{
|
|
|
struct pci1710_private *devpriv = dev->private;
|
|
|
+ unsigned int val;
|
|
|
int n, chan, range, ofs;
|
|
|
|
|
|
chan = CR_CHAN(insn->chanspec);
|
|
@@ -509,11 +510,14 @@ static int pci171x_insn_write_ao(struct comedi_device *dev,
|
|
|
outw(devpriv->da_ranges, dev->iobase + PCI171x_DAREF);
|
|
|
ofs = PCI171x_DA1;
|
|
|
}
|
|
|
+ val = devpriv->ao_data[chan];
|
|
|
|
|
|
- for (n = 0; n < insn->n; n++)
|
|
|
- outw(data[n], dev->iobase + ofs);
|
|
|
+ for (n = 0; n < insn->n; n++) {
|
|
|
+ val = data[n];
|
|
|
+ outw(val, dev->iobase + ofs);
|
|
|
+ }
|
|
|
|
|
|
- devpriv->ao_data[chan] = data[n];
|
|
|
+ devpriv->ao_data[chan] = val;
|
|
|
|
|
|
return n;
|
|
|
|
|
@@ -679,6 +683,7 @@ static int pci1720_insn_write_ao(struct comedi_device *dev,
|
|
|
struct comedi_insn *insn, unsigned int *data)
|
|
|
{
|
|
|
struct pci1710_private *devpriv = dev->private;
|
|
|
+ unsigned int val;
|
|
|
int n, rangereg, chan;
|
|
|
|
|
|
chan = CR_CHAN(insn->chanspec);
|
|
@@ -688,13 +693,15 @@ static int pci1720_insn_write_ao(struct comedi_device *dev,
|
|
|
outb(rangereg, dev->iobase + PCI1720_RANGE);
|
|
|
devpriv->da_ranges = rangereg;
|
|
|
}
|
|
|
+ val = devpriv->ao_data[chan];
|
|
|
|
|
|
for (n = 0; n < insn->n; n++) {
|
|
|
- outw(data[n], dev->iobase + PCI1720_DA0 + (chan << 1));
|
|
|
+ val = data[n];
|
|
|
+ outw(val, dev->iobase + PCI1720_DA0 + (chan << 1));
|
|
|
outb(0, dev->iobase + PCI1720_SYNCOUT); /* update outputs */
|
|
|
}
|
|
|
|
|
|
- devpriv->ao_data[chan] = data[n];
|
|
|
+ devpriv->ao_data[chan] = val;
|
|
|
|
|
|
return n;
|
|
|
}
|