staging: comedi: 8255: add a comedi_device param to the (*io) callback
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Tue, 12 Aug 2014 18:41:19 +0000 (11:41 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 16 Aug 2014 19:23:25 +0000 (12:23 -0700)
The 8255 driver uses an (*io) callback to read/write the registers
of the 8255 device. The default callback provided by the driver uses
inb()/outb() calls to access to registers based on an 'iobase' that
was initialized during the subdev_8255_init() and a 'port' value.

The users of this module can optionally provide a custom (*io) callback
to handle the read/write in another manner.

Make the (*io) callback a bit more flexible by also passing the
comedi_device pointer as a parameter.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/8255.c
drivers/staging/comedi/drivers/8255.h
drivers/staging/comedi/drivers/8255_pci.c
drivers/staging/comedi/drivers/cb_pcidas64.c
drivers/staging/comedi/drivers/daqboard2000.c
drivers/staging/comedi/drivers/ni_labpc.c
drivers/staging/comedi/drivers/ni_mio_common.c
drivers/staging/comedi/drivers/pcl724.c

index a33a19622745550ad696b647aeb4a6d25f61c810..212e547ba77f059deb670b8c343349de43d69858 100644 (file)
@@ -94,10 +94,11 @@ I/O port base address can be found in the output of 'lspci -v'.
 
 struct subdev_8255_private {
        unsigned long iobase;
-       int (*io)(int, int, int, unsigned long);
+       int (*io)(struct comedi_device *, int, int, int, unsigned long);
 };
 
-static int subdev_8255_io(int dir, int port, int data, unsigned long iobase)
+static int subdev_8255_io(struct comedi_device *dev,
+                         int dir, int port, int data, unsigned long iobase)
 {
        if (dir) {
                outb(data, iobase + port);
@@ -113,8 +114,8 @@ void subdev_8255_interrupt(struct comedi_device *dev,
        unsigned long iobase = spriv->iobase;
        unsigned short d;
 
-       d = spriv->io(0, _8255_DATA, 0, iobase);
-       d |= (spriv->io(0, _8255_DATA + 1, 0, iobase) << 8);
+       d = spriv->io(dev, 0, _8255_DATA, 0, iobase);
+       d |= (spriv->io(dev, 0, _8255_DATA + 1, 0, iobase) << 8);
 
        comedi_buf_put(s, d);
        s->async->events |= COMEDI_CB_EOS;
@@ -136,18 +137,18 @@ static int subdev_8255_insn(struct comedi_device *dev,
        mask = comedi_dio_update_state(s, data);
        if (mask) {
                if (mask & 0xff)
-                       spriv->io(1, _8255_DATA, s->state & 0xff, iobase);
+                       spriv->io(dev, 1, _8255_DATA, s->state & 0xff, iobase);
                if (mask & 0xff00)
-                       spriv->io(1, _8255_DATA + 1, (s->state >> 8) & 0xff,
-                                 iobase);
+                       spriv->io(dev, 1, _8255_DATA + 1,
+                                 (s->state >> 8) & 0xff, iobase);
                if (mask & 0xff0000)
-                       spriv->io(1, _8255_DATA + 2, (s->state >> 16) & 0xff,
-                                 iobase);
+                       spriv->io(dev, 1, _8255_DATA + 2,
+                                 (s->state >> 16) & 0xff, iobase);
        }
 
-       v = spriv->io(0, _8255_DATA, 0, iobase);
-       v |= (spriv->io(0, _8255_DATA + 1, 0, iobase) << 8);
-       v |= (spriv->io(0, _8255_DATA + 2, 0, iobase) << 16);
+       v = spriv->io(dev, 0, _8255_DATA, 0, iobase);
+       v |= (spriv->io(dev, 0, _8255_DATA + 1, 0, iobase) << 8);
+       v |= (spriv->io(dev, 0, _8255_DATA + 2, 0, iobase) << 16);
 
        data[1] = v;
 
@@ -172,7 +173,7 @@ static void subdev_8255_do_config(struct comedi_device *dev,
        if (!(s->io_bits & 0xf00000))
                config |= CR_C_HI_IO;
 
-       spriv->io(1, _8255_CR, config, iobase);
+       spriv->io(dev, 1, _8255_CR, config, iobase);
 }
 
 static int subdev_8255_insn_config(struct comedi_device *dev,
@@ -261,7 +262,8 @@ static int subdev_8255_cancel(struct comedi_device *dev,
 }
 
 int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s,
-                    int (*io)(int, int, int, unsigned long),
+                    int (*io)(struct comedi_device *,
+                              int, int, int, unsigned long),
                     unsigned long iobase)
 {
        struct subdev_8255_private *spriv;
@@ -288,7 +290,8 @@ int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s,
 EXPORT_SYMBOL_GPL(subdev_8255_init);
 
 int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s,
-                        int (*io)(int, int, int, unsigned long),
+                        int (*io)(struct comedi_device *,
+                                  int, int, int, unsigned long),
                         unsigned long iobase)
 {
        int ret;
index 795d232a6c02301ed1c4a73520f1ba3d7e79bccc..c2c20db2f1d0388d228deb697bc7498637860c1b 100644 (file)
 #include "../comedidev.h"
 
 int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s,
-                    int (*io)(int, int, int, unsigned long),
+                    int (*io)(struct comedi_device *,
+                              int, int, int, unsigned long),
                     unsigned long iobase);
 int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s,
-                        int (*io)(int, int, int, unsigned long),
+                        int (*io)(struct comedi_device *,
+                                  int, int, int, unsigned long),
                         unsigned long iobase);
 void subdev_8255_interrupt(struct comedi_device *dev,
                           struct comedi_subdevice *s);
index f21e6567ac2f81866ea16cf9195150fee1e20bfd..cee3d18370fa730347672b58f68078c089dd8297 100644 (file)
@@ -190,7 +190,8 @@ static int pci_8255_mite_init(struct pci_dev *pcidev)
        return 0;
 }
 
-static int pci_8255_mmio(int dir, int port, int data, unsigned long iobase)
+static int pci_8255_mmio(struct comedi_device *dev,
+                        int dir, int port, int data, unsigned long iobase)
 {
        void __iomem *mmio_base = (void __iomem *)iobase;
 
index fa12614cef2a1b5f0aba9a525f686cb006dc8bb5..fafde70cbb5118b37ba03f7b088c5068bc3e0aae 100644 (file)
@@ -3369,7 +3369,8 @@ static int ao_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
        return 0;
 }
 
-static int dio_callback(int dir, int port, int data, unsigned long arg)
+static int dio_callback(struct comedi_device *dev,
+                       int dir, int port, int data, unsigned long arg)
 {
        void __iomem *iobase = (void __iomem *)arg;
 
@@ -3380,7 +3381,8 @@ static int dio_callback(int dir, int port, int data, unsigned long arg)
        return readb(iobase + port);
 }
 
-static int dio_callback_4020(int dir, int port, int data, unsigned long arg)
+static int dio_callback_4020(struct comedi_device *dev,
+                            int dir, int port, int data, unsigned long arg)
 {
        void __iomem *iobase = (void __iomem *)arg;
 
index cd369cd40114e2c50ce057070f3b504c4cfe89eb..d728fbd6d3a0e52c17b736351eb6323ec6731720 100644 (file)
@@ -651,7 +651,8 @@ static void daqboard2000_initializeDac(struct comedi_device *dev)
        daqboard2000_dacDisarm(dev);
 }
 
-static int daqboard2000_8255_cb(int dir, int port, int data,
+static int daqboard2000_8255_cb(struct comedi_device *dev,
+                               int dir, int port, int data,
                                unsigned long ioaddr)
 {
        void __iomem *mmio_base = (void __iomem *)ioaddr;
index 126d65cb39f2c051fd8764af56e444cba81bb997..fa108b9dd603a37f5cae0d14dbed513c56b4ea32 100644 (file)
@@ -1035,7 +1035,8 @@ static int labpc_ao_insn_read(struct comedi_device *dev,
        return 1;
 }
 
-static int labpc_8255_mmio(int dir, int port, int data, unsigned long arg)
+static int labpc_8255_mmio(struct comedi_device *cdev,
+                          int dir, int port, int data, unsigned long arg)
 {
        struct comedi_device *dev = (struct comedi_device *)arg;
 
index 297c95d2e0a3bea56b8b12c975f8cb42ba95ddc4..07659053f4d3634dfe3e777e6112066dd0fb94ba 100644 (file)
@@ -4176,7 +4176,8 @@ static int ni_freq_out_insn_config(struct comedi_device *dev,
        return insn->n;
 }
 
-static int ni_8255_callback(int dir, int port, int data, unsigned long arg)
+static int ni_8255_callback(struct comedi_device *cdev,
+                           int dir, int port, int data, unsigned long arg)
 {
        struct comedi_device *dev = (struct comedi_device *)arg;
 
index c7f8eb1cf8de922ad20ec3fed7cda237cc170d86..946b058eee6f2f797256a35dda1af848b94c548f 100644 (file)
@@ -81,7 +81,8 @@ static const struct pcl724_board boardtypes[] = {
        },
 };
 
-static int pcl724_8255mapped_io(int dir, int port, int data,
+static int pcl724_8255mapped_io(struct comedi_device *dev,
+                               int dir, int port, int data,
                                unsigned long iobase)
 {
        int movport = SIZE_8255 * (iobase >> 12);
This page took 0.030592 seconds and 5 git commands to generate.