The drivers that use this module with memory mapped io all have the ioremap'ed base address stored in the comedi_device 'mmio' member. Modify subdev_8255_io() to handle the memory mapped io. This allows removing the private callbacks from some of the drivers. Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx> Cc: Ian Abbott <abbotti@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/staging/comedi/drivers/8255.c | 14 ++++++++++++-- drivers/staging/comedi/drivers/8255_pci.c | 20 ++------------------ drivers/staging/comedi/drivers/cb_pcidas64.c | 13 +------------ drivers/staging/comedi/drivers/ni_labpc.c | 18 +----------------- 4 files changed, 16 insertions(+), 49 deletions(-) diff --git a/drivers/staging/comedi/drivers/8255.c b/drivers/staging/comedi/drivers/8255.c index 39cf12e..4095a87 100644 --- a/drivers/staging/comedi/drivers/8255.c +++ b/drivers/staging/comedi/drivers/8255.c @@ -100,11 +100,21 @@ struct subdev_8255_private { static int subdev_8255_io(struct comedi_device *dev, int dir, int port, int data, unsigned long regbase) { + unsigned int offset = regbase + port; + + if (dev->mmio) { + if (dir) { + writeb(data, dev->mmio + offset); + return 0; + } + return readb(dev->mmio + offset); + } + if (dir) { - outb(data, dev->iobase + regbase + port); + outb(data, dev->iobase + offset); return 0; } - return inb(dev->iobase + regbase + port); + return inb(dev->iobase + offset); } void subdev_8255_interrupt(struct comedi_device *dev, diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c index 24e9099..1418cd6 100644 --- a/drivers/staging/comedi/drivers/8255_pci.c +++ b/drivers/staging/comedi/drivers/8255_pci.c @@ -190,23 +190,12 @@ static int pci_8255_mite_init(struct pci_dev *pcidev) return 0; } -static int pci_8255_mmio(struct comedi_device *dev, - int dir, int port, int data, unsigned long iobase) -{ - if (dir) { - writeb(data, dev->mmio + iobase + port); - return 0; - } - return readb(dev->mmio + iobase + port); -} - static int pci_8255_auto_attach(struct comedi_device *dev, unsigned long context) { struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct pci_8255_boardinfo *board = NULL; struct comedi_subdevice *s; - bool is_mmio; int ret; int i; @@ -227,9 +216,7 @@ static int pci_8255_auto_attach(struct comedi_device *dev, return ret; } - is_mmio = (pci_resource_flags(pcidev, board->dio_badr) & - IORESOURCE_MEM) != 0; - if (is_mmio) { + if ((pci_resource_flags(pcidev, board->dio_badr) & IORESOURCE_MEM)) { dev->mmio = pci_ioremap_bar(pcidev, board->dio_badr); if (!dev->mmio) return -ENOMEM; @@ -248,10 +235,7 @@ static int pci_8255_auto_attach(struct comedi_device *dev, for (i = 0; i < board->n_8255; i++) { s = &dev->subdevices[i]; - if (is_mmio) - ret = subdev_8255_init(dev, s, pci_8255_mmio, i * 4); - else - ret = subdev_8255_init(dev, s, NULL, i * 4); + ret = subdev_8255_init(dev, s, NULL, i * 4); if (ret) return ret; } diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index f94923b..9c18789 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -3369,16 +3369,6 @@ static int ao_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int dio_callback(struct comedi_device *dev, - int dir, int port, int data, unsigned long iobase) -{ - if (dir) { - writeb(data, dev->mmio + iobase + port); - return 0; - } - return readb(dev->mmio + iobase + port); -} - static int dio_callback_4020(struct comedi_device *dev, int dir, int port, int data, unsigned long iobase) { @@ -3842,8 +3832,7 @@ static int setup_subdevices(struct comedi_device *dev) ret = subdev_8255_init(dev, s, dio_callback_4020, I8255_4020_REG); } else { - ret = subdev_8255_init(dev, s, dio_callback, - DIO_8255_OFFSET); + ret = subdev_8255_init(dev, s, NULL, DIO_8255_OFFSET); } if (ret) return ret; diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 8f914de..5515b36 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -1035,17 +1035,6 @@ static int labpc_ao_insn_read(struct comedi_device *dev, return 1; } -static int labpc_8255_mmio(struct comedi_device *dev, - int dir, int port, int data, unsigned long iobase) -{ - if (dir) { - writeb(data, dev->mmio + iobase + port); - return 0; - } - - return readb(dev->mmio + iobase + port); -} - /* lowlevel write to eeprom/dac */ static void labpc_serial_out(struct comedi_device *dev, unsigned int value, unsigned int value_width) @@ -1401,12 +1390,7 @@ int labpc_common_attach(struct comedi_device *dev, /* 8255 dio */ s = &dev->subdevices[2]; - if (dev->mmio) { - ret = subdev_8255_init(dev, s, labpc_8255_mmio, - DIO_BASE_REG); - } else { - ret = subdev_8255_init(dev, s, NULL, DIO_BASE_REG); - } + ret = subdev_8255_init(dev, s, NULL, DIO_BASE_REG); if (ret) return ret; -- 2.0.3 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel