]> Pileus Git - ~andy/linux/commitdiff
staging: comedi: addi_apci_1032: fix i_APCI1032_ReadMoreDigitalInput()
authorH Hartley Sweeten <hartleys@visionengravers.com>
Mon, 5 Nov 2012 21:39:30 +0000 (14:39 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 6 Nov 2012 08:30:57 +0000 (09:30 +0100)
This function is the insn_bits operation for the digital input subdevice.
According to the comedi API it's supposed return the status of the inputs
in data[1]. The addi-drivers abuse the API and try to make it conform to
their own use.

Fix this function so it follows the comedi API.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.c

index 337a46ef0cf803f2ead2d6a473b80992c8b4ce84..aa4f022b9c79db5717137e8472a1e63f7284c522 100644 (file)
@@ -204,43 +204,8 @@ static int i_APCI1032_ReadMoreDigitalInput(struct comedi_device *dev,
                                           struct comedi_insn *insn,
                                           unsigned int *data)
 {
-       unsigned int ui_PortValue = data[0];
-       unsigned int ui_Mask = 0;
-       unsigned int ui_NoOfChannels;
+       data[1] = inl(dev->iobase + APCI1032_DI_REG);
 
-       ui_NoOfChannels = CR_CHAN(insn->chanspec);
-       if (data[1] == 0) {
-               *data = inl(dev->iobase + APCI1032_DI_REG);
-               switch (ui_NoOfChannels) {
-               case 2:
-                       ui_Mask = 3;
-                       *data = (*data >> (2 * ui_PortValue)) & ui_Mask;
-                       break;
-               case 4:
-                       ui_Mask = 15;
-                       *data = (*data >> (4 * ui_PortValue)) & ui_Mask;
-                       break;
-               case 8:
-                       ui_Mask = 255;
-                       *data = (*data >> (8 * ui_PortValue)) & ui_Mask;
-                       break;
-               case 16:
-                       ui_Mask = 65535;
-                       *data = (*data >> (16 * ui_PortValue)) & ui_Mask;
-                       break;
-               case 31:
-                       break;
-               default:
-                       /* comedi_error(dev," \nchan spec wrong\n"); */
-                       return -EINVAL; /*  "sorry channel spec wrong " */
-                       break;
-               }               /* switch(ui_NoOfChannels) */
-       }                       /* if(data[1]==0) */
-       else {
-               if (data[1] == 1)
-                       *data = ui_InterruptStatus;
-                               /* if(data[1]==1) */
-       }                       /* else if(data[1]==0) */
        return insn->n;
 }