diff options
author | H Hartley Sweeten <hartleys@visionengravers.com> | 2012-06-27 22:06:14 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-07-06 22:40:06 (GMT) |
commit | 8366404bf1c034d902af06a6a6d88fe77a2cc7fb (patch) | |
tree | f693058a7ca5dd58ec7ff06a319dc1e65bf0d4c6 | |
parent | 5c67df8b98316fbfede8d4d6bac64d52d4327357 (diff) | |
download | linux-fsl-qoriq-8366404bf1c034d902af06a6a6d88fe77a2cc7fb.tar.xz |
staging: comedi: adl_pci6208: cleanup pci6208_ao_winsn()
Use the defines for the register map to make the code a bit
clearer. Shorten or rename some of the local variables for
the same reason.
Only the last value written to the DAC needs to be cached in
the ao_readback variable.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/drivers/adl_pci6208.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/staging/comedi/drivers/adl_pci6208.c b/drivers/staging/comedi/drivers/adl_pci6208.c index d15f0cb..7120878 100644 --- a/drivers/staging/comedi/drivers/adl_pci6208.c +++ b/drivers/staging/comedi/drivers/adl_pci6208.c @@ -82,21 +82,24 @@ static int pci6208_ao_winsn(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { struct pci6208_private *devpriv = dev->private; - int i = 0, Data_Read; - unsigned short chan = CR_CHAN(insn->chanspec); + int chan = CR_CHAN(insn->chanspec); unsigned long invert = 1 << (16 - 1); - unsigned long out_value; + unsigned long value = 0; + unsigned short status; + int i; for (i = 0; i < insn->n; i++) { - out_value = data[i] ^ invert; + value = data[i] ^ invert; + do { - Data_Read = (inw(dev->iobase) & 1); - } while (Data_Read); - outw(out_value, dev->iobase + (0x02 * chan)); - devpriv->ao_readback[chan] = out_value; + status = inw(dev->iobase + PCI6208_AO_STATUS); + } while (status & PCI6208_AO_STATUS_DATA_SEND); + + outw(value, dev->iobase + PCI6208_AO_CONTROL(chan)); } + devpriv->ao_readback[chan] = value; - return i; + return insn->n; } static int pci6208_ao_rinsn(struct comedi_device *dev, |