Follow the usual behaviour for comedi read and write instructions of
returning the number of data values read or written.  When reading back
written values, read back the number of values specified by `insn->n`
instead of reading back a single value.

Signed-off-by: Ian Abbott <[email protected]>
Cc: Frank Mori Hess <[email protected]>
---
 drivers/staging/comedi/drivers/adv_pci1724.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/comedi/drivers/adv_pci1724.c 
b/drivers/staging/comedi/drivers/adv_pci1724.c
index 4649a29..af64d59 100644
--- a/drivers/staging/comedi/drivers/adv_pci1724.c
+++ b/drivers/staging/comedi/drivers/adv_pci1724.c
@@ -327,7 +327,7 @@ static int ao_winsn(struct comedi_device *dev, struct 
comedi_subdevice *s,
                        return retval;
                devpriv->ao_value[channel] = data[i];
        }
-       return 1;
+       return insn->n;
 }
 
 static int ao_readback_insn(struct comedi_device *dev,
@@ -336,15 +336,17 @@ static int ao_readback_insn(struct comedi_device *dev,
 {
        struct adv_pci1724_private *devpriv = dev->private;
        int channel = CR_CHAN(insn->chanspec);
+       int i;
 
        if (devpriv->ao_value[channel] < 0) {
                comedi_error(dev,
                             "Cannot read back channels which have not yet been 
written to.");
                return -EIO;
        }
-       data[0] = devpriv->ao_value[channel];
+       for (i = 0; i < insn->n; i++)
+               data[i] = devpriv->ao_value[channel];
 
-       return 1;
+       return insn->n;
 }
 
 static int offset_write_insn(struct comedi_device *dev,
@@ -366,7 +368,7 @@ static int offset_write_insn(struct comedi_device *dev,
                devpriv->offset_value[channel] = data[i];
        }
 
-       return 1;
+       return insn->n;
 }
 
 static int offset_read_insn(struct comedi_device *dev,
@@ -375,15 +377,17 @@ static int offset_read_insn(struct comedi_device *dev,
 {
        struct adv_pci1724_private *devpriv = dev->private;
        unsigned int channel = CR_CHAN(insn->chanspec);
+       int i;
 
        if (devpriv->offset_value[channel] < 0) {
                comedi_error(dev,
                             "Cannot read back channels which have not yet been 
written to.");
                return -EIO;
        }
-       data[0] = devpriv->offset_value[channel];
+       for (i = 0; i < insn->n; i++)
+               data[i] = devpriv->offset_value[channel];
 
-       return 1;
+       return insn->n;
 }
 
 static int gain_write_insn(struct comedi_device *dev,
@@ -405,7 +409,7 @@ static int gain_write_insn(struct comedi_device *dev,
                devpriv->gain_value[channel] = data[i];
        }
 
-       return 1;
+       return insn->n;
 }
 
 static int gain_read_insn(struct comedi_device *dev,
@@ -414,15 +418,17 @@ static int gain_read_insn(struct comedi_device *dev,
 {
        struct adv_pci1724_private *devpriv = dev->private;
        unsigned int channel = CR_CHAN(insn->chanspec);
+       int i;
 
        if (devpriv->gain_value[channel] < 0) {
                comedi_error(dev,
                             "Cannot read back channels which have not yet been 
written to.");
                return -EIO;
        }
-       data[0] = devpriv->gain_value[channel];
+       for (i = 0; i < insn->n; i++)
+               data[i] = devpriv->gain_value[channel];
 
-       return 1;
+       return insn->n;
 }
 
 MODULE_AUTHOR("Comedi http://www.comedi.org";);
-- 
1.8.1.2

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to