Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70f72867 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman
Browse files

staging: comedi: ni_labpc: use the comedi_device 'mmio' member



Use the new 'mmio' member in the comedi_device for the ioremap'ed
base address.

Only the ni_labpc_pci module does the ioremap, its also the only
module that sets the 'has_mmio' member in the boardinfo. Remove
this member from the boardinfo and use dev->mmio to determine if
the I/O is memory mapped.

Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent adcd16a2
Loading
Loading
Loading
Loading
+12 −26
Original line number Diff line number Diff line
@@ -141,17 +141,13 @@ static void labpc_outb(struct comedi_device *dev,

static unsigned int labpc_readb(struct comedi_device *dev, unsigned long reg)
{
	void __iomem *mmio = (void __iomem *)dev->iobase;

	return readb(mmio + reg);
	return readb(dev->mmio + reg);
}

static void labpc_writeb(struct comedi_device *dev,
			 unsigned int byte, unsigned long reg)
{
	void __iomem *mmio = (void __iomem *)dev->iobase;

	writeb(byte, mmio + reg);
	writeb(byte, dev->mmio + reg);
}

#if IS_ENABLED(CONFIG_COMEDI_NI_LABPC_ISA)
@@ -181,13 +177,9 @@ static void labpc_counter_load(struct comedi_device *dev,
			       unsigned int count,
			       unsigned int mode)
{
	const struct labpc_boardinfo *board = comedi_board(dev);

	if (board->has_mmio) {
		void __iomem *mmio = (void __iomem *)dev->iobase;

		i8254_mm_set_mode(mmio + reg, 0, counter_number, mode);
		i8254_mm_write(mmio + reg, 0, counter_number, count);
	if (dev->mmio) {
		i8254_mm_set_mode(dev->mmio + reg, 0, counter_number, mode);
		i8254_mm_write(dev->mmio + reg, 0, counter_number, count);
	} else {
		i8254_set_mode(dev->iobase + reg, 0, counter_number, mode);
		i8254_write(dev->iobase + reg, 0, counter_number, count);
@@ -199,16 +191,11 @@ static void labpc_counter_set_mode(struct comedi_device *dev,
				   unsigned int counter_number,
				   unsigned int mode)
{
	const struct labpc_boardinfo *board = comedi_board(dev);

	if (board->has_mmio) {
		void __iomem *mmio = (void __iomem *)dev->iobase;

		i8254_mm_set_mode(mmio + reg, 0, counter_number, mode);
	} else {
	if (dev->mmio)
		i8254_mm_set_mode(dev->mmio + reg, 0, counter_number, mode);
	else
		i8254_set_mode(dev->iobase + reg, 0, counter_number, mode);
}
}

static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
{
@@ -1051,14 +1038,13 @@ static int labpc_ao_insn_read(struct comedi_device *dev,
static int labpc_8255_mmio(int dir, int port, int data, unsigned long arg)
{
	struct comedi_device *dev = (struct comedi_device *)arg;
	void __iomem *mmio = (void __iomem *)dev->iobase + DIO_BASE_REG;

	if (dir) {
		writeb(data, mmio + port);
		writeb(data, dev->mmio + DIO_BASE_REG + port);
		return 0;
	}

	return readb(mmio + port);
	return readb(dev->mmio + DIO_BASE_REG + port);
}

/* lowlevel write to eeprom/dac */
@@ -1342,7 +1328,7 @@ int labpc_common_attach(struct comedi_device *dev,
	int ret;
	int i;

	if (board->has_mmio) {
	if (dev->mmio) {
		devpriv->read_byte = labpc_readb;
		devpriv->write_byte = labpc_writeb;
	} else {
@@ -1416,7 +1402,7 @@ int labpc_common_attach(struct comedi_device *dev,

	/* 8255 dio */
	s = &dev->subdevices[2];
	if (board->has_mmio) {
	if (dev->mmio) {
		ret = subdev_8255_init(dev, s, labpc_8255_mmio,
				       (unsigned long)dev);
	} else {
+0 −1
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ struct labpc_boardinfo {
	unsigned ai_scan_up:1;		/* can auto scan up in ai channels */
	unsigned has_ao:1;		/* has analog outputs */
	unsigned is_labpc1200:1;	/* has extra regs compared to pc+ */
	unsigned has_mmio:1;		/* uses memory mapped io */
};

struct labpc_private {
+4 −7
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ static const struct labpc_boardinfo labpc_pci_boards[] = {
		.ai_scan_up		= 1,
		.has_ao			= 1,
		.is_labpc1200		= 1,
		.has_mmio		= 1,
	},
};

@@ -81,7 +80,6 @@ static int labpc_pci_auto_attach(struct comedi_device *dev,
	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
	const struct labpc_boardinfo *board = NULL;
	struct labpc_private *devpriv;
	void __iomem *mmio;
	int ret;

	if (context < ARRAY_SIZE(labpc_pci_boards))
@@ -99,10 +97,9 @@ static int labpc_pci_auto_attach(struct comedi_device *dev,
	if (ret)
		return ret;

	mmio = pci_ioremap_bar(pcidev, 1);
	if (!mmio)
	dev->mmio = pci_ioremap_bar(pcidev, 1);
	if (!dev->mmio)
		return -ENOMEM;
	dev->iobase = (unsigned long)mmio;

	devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
	if (!devpriv)
@@ -113,8 +110,8 @@ static int labpc_pci_auto_attach(struct comedi_device *dev,

static void labpc_pci_detach(struct comedi_device *dev)
{
	if (dev->iobase)
		iounmap((void __iomem *)dev->iobase);
	if (dev->mmio)
		iounmap(dev->mmio);
	if (dev->irq)
		free_irq(dev->irq, dev);
	comedi_pci_disable(dev);