Bläddra i källkod

staging: comedi: ni_6527: remove COMEDI_MITE dependancy

The COMEDI_MITE driver is a wrapper for the National Instruments
PCI MITE ASIC. This driver includes the PCI boilerplate used to
remap the resources as well as the support code for bus mastered
DMA.

The ni_6527 does not support DMA and the COMEDI_MITE driver adds
unnecessary complexity.

Remove the need for the COMEDI_MITE driver by handling the ioremap
directly in the (*attach). Store the ioremap'ed address in the
private data.

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>
H Hartley Sweeten 12 år sedan
förälder
incheckning
42e705e91f
2 ändrade filer med 18 tillägg och 31 borttagningar
  1. 0 2
      drivers/staging/comedi/Kconfig
  2. 18 29
      drivers/staging/comedi/drivers/ni_6527.c

+ 0 - 2
drivers/staging/comedi/Kconfig

@@ -991,8 +991,6 @@ config COMEDI_ME_DAQ
 
 
 config COMEDI_NI_6527
 config COMEDI_NI_6527
 	tristate "NI 6527 support"
 	tristate "NI 6527 support"
-	depends on HAS_DMA
-	select COMEDI_MITE
 	---help---
 	---help---
 	  Enable support for the National Instruments 6527 PCI card
 	  Enable support for the National Instruments 6527 PCI card
 
 

+ 18 - 29
drivers/staging/comedi/drivers/ni_6527.c

@@ -40,7 +40,6 @@ Updated: Sat, 25 Jan 2003 13:24:40 -0800
 #include "../comedidev.h"
 #include "../comedidev.h"
 
 
 #include "comedi_fc.h"
 #include "comedi_fc.h"
-#include "mite.h"
 
 
 #define NI6527_DI_REG(x)		(0x00 + (x))
 #define NI6527_DI_REG(x)		(0x00 + (x))
 #define NI6527_DO_REG(x)		(0x03 + (x))
 #define NI6527_DO_REG(x)		(0x03 + (x))
@@ -90,7 +89,7 @@ static const struct ni6527_board ni6527_boards[] = {
 };
 };
 
 
 struct ni6527_private {
 struct ni6527_private {
-	struct mite_struct *mite;
+	void __iomem *mmio_base;
 	unsigned int filter_interval;
 	unsigned int filter_interval;
 	unsigned int filter_enable;
 	unsigned int filter_enable;
 };
 };
@@ -99,7 +98,7 @@ static void ni6527_set_filter_interval(struct comedi_device *dev,
 				       unsigned int val)
 				       unsigned int val)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 
 
 	if (val != devpriv->filter_interval) {
 	if (val != devpriv->filter_interval) {
 		writeb(val & 0xff, mmio + NI6527_FILT_INTERVAL_REG(0));
 		writeb(val & 0xff, mmio + NI6527_FILT_INTERVAL_REG(0));
@@ -116,7 +115,7 @@ static void ni6527_set_filter_enable(struct comedi_device *dev,
 				     unsigned int val)
 				     unsigned int val)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 
 
 	writeb(val & 0xff, mmio + NI6527_FILT_ENA_REG(0));
 	writeb(val & 0xff, mmio + NI6527_FILT_ENA_REG(0));
 	writeb((val >> 8) & 0xff, mmio + NI6527_FILT_ENA_REG(1));
 	writeb((val >> 8) & 0xff, mmio + NI6527_FILT_ENA_REG(1));
@@ -163,7 +162,7 @@ static int ni6527_di_insn_bits(struct comedi_device *dev,
 			       unsigned int *data)
 			       unsigned int *data)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 	unsigned int val;
 	unsigned int val;
 
 
 	val = readb(mmio + NI6527_DI_REG(0));
 	val = readb(mmio + NI6527_DI_REG(0));
@@ -181,7 +180,7 @@ static int ni6527_do_insn_bits(struct comedi_device *dev,
 			       unsigned int *data)
 			       unsigned int *data)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 	unsigned int mask;
 	unsigned int mask;
 
 
 	mask = comedi_dio_update_state(s, data);
 	mask = comedi_dio_update_state(s, data);
@@ -207,7 +206,7 @@ static irqreturn_t ni6527_interrupt(int irq, void *d)
 	struct comedi_device *dev = d;
 	struct comedi_device *dev = d;
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
 	struct comedi_subdevice *s = dev->read_subdev;
 	struct comedi_subdevice *s = dev->read_subdev;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 	unsigned int status;
 	unsigned int status;
 
 
 	status = readb(mmio + NI6527_STATUS_REG);
 	status = readb(mmio + NI6527_STATUS_REG);
@@ -271,7 +270,7 @@ static int ni6527_intr_cmd(struct comedi_device *dev,
 			   struct comedi_subdevice *s)
 			   struct comedi_subdevice *s)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 
 
 	writeb(NI6527_CLR_IRQS, mmio + NI6527_CLR_REG);
 	writeb(NI6527_CLR_IRQS, mmio + NI6527_CLR_REG);
 	writeb(NI6527_CTRL_ENABLE_IRQS, mmio + NI6527_CTRL_REG);
 	writeb(NI6527_CTRL_ENABLE_IRQS, mmio + NI6527_CTRL_REG);
@@ -283,7 +282,7 @@ static int ni6527_intr_cancel(struct comedi_device *dev,
 			      struct comedi_subdevice *s)
 			      struct comedi_subdevice *s)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 
 
 	writeb(NI6527_CTRL_DISABLE_IRQS, mmio + NI6527_CTRL_REG);
 	writeb(NI6527_CTRL_DISABLE_IRQS, mmio + NI6527_CTRL_REG);
 
 
@@ -303,7 +302,7 @@ static void ni6527_set_edge_detection(struct comedi_device *dev,
 				      unsigned int falling)
 				      unsigned int falling)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
-	void __iomem *mmio = devpriv->mite->daq_io_addr;
+	void __iomem *mmio = devpriv->mmio_base;
 
 
 	/* enable rising-edge detection channels */
 	/* enable rising-edge detection channels */
 	writeb(rising & 0xff, mmio + NI6527_RISING_EDGE_REG(0));
 	writeb(rising & 0xff, mmio + NI6527_RISING_EDGE_REG(0));
@@ -359,18 +358,12 @@ static int ni6527_auto_attach(struct comedi_device *dev,
 	if (!devpriv)
 	if (!devpriv)
 		return -ENOMEM;
 		return -ENOMEM;
 
 
-	devpriv->mite = mite_alloc(pcidev);
-	if (!devpriv->mite)
+	devpriv->mmio_base = pci_ioremap_bar(pcidev, 1);
+	if (!devpriv->mmio_base)
 		return -ENOMEM;
 		return -ENOMEM;
 
 
-	ret = mite_setup(devpriv->mite);
-	if (ret < 0) {
-		dev_err(dev->class_dev, "error setting up mite\n");
-		return ret;
-	}
-
 	/* make sure this is actually a 6527 device */
 	/* make sure this is actually a 6527 device */
-	if (readb(devpriv->mite->daq_io_addr + NI6527_ID_REG) != 0x27)
+	if (readb(devpriv->mmio_base + NI6527_ID_REG) != 0x27)
 		return -ENODEV;
 		return -ENODEV;
 
 
 	ret = comedi_alloc_subdevices(dev, 3);
 	ret = comedi_alloc_subdevices(dev, 3);
@@ -410,16 +403,16 @@ static int ni6527_auto_attach(struct comedi_device *dev,
 	ni6527_set_filter_enable(dev, 0);
 	ni6527_set_filter_enable(dev, 0);
 
 
 	writeb(NI6527_CLR_IRQS | NI6527_CLR_RESET_FILT,
 	writeb(NI6527_CLR_IRQS | NI6527_CLR_RESET_FILT,
-	       devpriv->mite->daq_io_addr + NI6527_CLR_REG);
+	       devpriv->mmio_base + NI6527_CLR_REG);
 	writeb(NI6527_CTRL_DISABLE_IRQS,
 	writeb(NI6527_CTRL_DISABLE_IRQS,
-	       devpriv->mite->daq_io_addr + NI6527_CTRL_REG);
+	       devpriv->mmio_base + NI6527_CTRL_REG);
 
 
-	ret = request_irq(mite_irq(devpriv->mite), ni6527_interrupt,
+	ret = request_irq(pcidev->irq, ni6527_interrupt,
 			  IRQF_SHARED, dev->board_name, dev);
 			  IRQF_SHARED, dev->board_name, dev);
 	if (ret < 0)
 	if (ret < 0)
 		dev_warn(dev->class_dev, "irq not available\n");
 		dev_warn(dev->class_dev, "irq not available\n");
 	else
 	else
-		dev->irq = mite_irq(devpriv->mite);
+		dev->irq = pcidev->irq;
 
 
 	return 0;
 	return 0;
 }
 }
@@ -428,15 +421,11 @@ static void ni6527_detach(struct comedi_device *dev)
 {
 {
 	struct ni6527_private *devpriv = dev->private;
 	struct ni6527_private *devpriv = dev->private;
 
 
-	if (devpriv && devpriv->mite && devpriv->mite->daq_io_addr)
+	if (devpriv && devpriv->mmio_base)
 		writeb(NI6527_CTRL_DISABLE_IRQS,
 		writeb(NI6527_CTRL_DISABLE_IRQS,
-		       devpriv->mite->daq_io_addr + NI6527_CTRL_REG);
+		       devpriv->mmio_base + NI6527_CTRL_REG);
 	if (dev->irq)
 	if (dev->irq)
 		free_irq(dev->irq, dev);
 		free_irq(dev->irq, dev);
-	if (devpriv && devpriv->mite) {
-		mite_unsetup(devpriv->mite);
-		mite_free(devpriv->mite);
-	}
 	comedi_pci_disable(dev);
 	comedi_pci_disable(dev);
 }
 }