An interrupt is required for command support to work with the
analog input subdevice. When used with the ISA driver, enabling
the interrupt is optional. Fix the subdevice init so that command
support is only enabled if the irq is available.

For aesthetic reasons, rename the (*insn_read) function to help
with greps.

Add some whitespace to the subdevice init. Change the 'maxdata'
value to hex as this is more common in comedi drivers.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers/ni_labpc.c | 32 +++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/comedi/drivers/ni_labpc.c 
b/drivers/staging/comedi/drivers/ni_labpc.c
index 48d5d5a..dea4cfc 100644
--- a/drivers/staging/comedi/drivers/ni_labpc.c
+++ b/drivers/staging/comedi/drivers/ni_labpc.c
@@ -259,8 +259,10 @@ static void labpc_clear_adc_fifo(const struct 
comedi_device *dev)
        devpriv->read_byte(dev->iobase + ADC_FIFO_REG);
 }
 
-static int labpc_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice 
*s,
-                         struct comedi_insn *insn, unsigned int *data)
+static int labpc_ai_insn_read(struct comedi_device *dev,
+                             struct comedi_subdevice *s,
+                             struct comedi_insn *insn,
+                             unsigned int *data)
 {
        const struct labpc_boardinfo *thisboard = comedi_board(dev);
        struct labpc_private *devpriv = dev->private;
@@ -1599,18 +1601,20 @@ int labpc_common_attach(struct comedi_device *dev,
 
        /* analog input subdevice */
        s = &dev->subdevices[0];
-       dev->read_subdev = s;
-       s->type = COMEDI_SUBD_AI;
-       s->subdev_flags =
-           SDF_READABLE | SDF_GROUND | SDF_COMMON | SDF_DIFF | SDF_CMD_READ;
-       s->n_chan = 8;
-       s->len_chanlist = 8;
-       s->maxdata = (1 << 12) - 1;     /* 12 bit resolution */
-       s->range_table = thisboard->ai_range_table;
-       s->do_cmd = labpc_ai_cmd;
-       s->do_cmdtest = labpc_ai_cmdtest;
-       s->insn_read = labpc_ai_rinsn;
-       s->cancel = labpc_cancel;
+       s->type         = COMEDI_SUBD_AI;
+       s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON | SDF_DIFF;
+       s->n_chan       = 8;
+       s->len_chanlist = 8;
+       s->maxdata      = 0x0fff;
+       s->range_table  = thisboard->ai_range_table;
+       s->insn_read    = labpc_ai_insn_read;
+       if (dev->irq) {
+               dev->read_subdev = s;
+               s->subdev_flags |= SDF_CMD_READ;
+               s->do_cmd       = labpc_ai_cmd;
+               s->do_cmdtest   = labpc_ai_cmdtest;
+               s->cancel       = labpc_cancel;
+       }
 
        /* analog output */
        s = &dev->subdevices[1];
-- 
1.8.1.4

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to