]> git.karo-electronics.de Git - linux-beck.git/commitdiff
staging: comedi: ni_labpc: fix 8255 dio subdevice init
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Fri, 22 Mar 2013 16:44:38 +0000 (09:44 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Mar 2013 18:41:51 +0000 (11:41 -0700)
The subdev_8255_init() function can fail. Check for failure and
return the errno.

Consolidate the mmio/ioport calls to subdev_8255_init(). The callback
function can be added with a simple ? : test and the cast of the iobase
is not necessary.

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/ni_labpc.c

index ef9a206068fd66ad7083a66ad5b62728cbeb49ac..94de40b273de1a8a90bd7bb971877a39859f61d1 100644 (file)
@@ -1393,8 +1393,7 @@ static int labpc_ao_insn_read(struct comedi_device *dev,
        return 1;
 }
 
-static int labpc_dio_mem_callback(int dir, int port, int data,
-                                 unsigned long iobase)
+static int labpc_8255_mmio(int dir, int port, int data, unsigned long iobase)
 {
        if (dir) {
                writeb(data, (void __iomem *)(iobase + port));
@@ -1802,13 +1801,11 @@ int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
 
        /* 8255 dio */
        s = &dev->subdevices[2];
-       /*  if board uses io memory we have to give a custom callback
-        * function to the 8255 driver */
-       if (board->has_mmio)
-               subdev_8255_init(dev, s, labpc_dio_mem_callback,
-                                (unsigned long)(dev->iobase + DIO_BASE_REG));
-       else
-               subdev_8255_init(dev, s, NULL, dev->iobase + DIO_BASE_REG);
+       ret = subdev_8255_init(dev, s,
+                              (board->has_mmio) ? labpc_8255_mmio : NULL,
+                              dev->iobase + DIO_BASE_REG);
+       if (ret)
+               return ret;
 
        /*  calibration subdevices for boards that have one */
        s = &dev->subdevices[3];