staging: comedi: ii_pci20kc: remove forward declarations 1
Move the pci20xxx_attach() and pci20xxx_detach() functions to remove the need for some of the forward declarations. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2b00f54b24
commit
0f8409dc05
1 changed files with 75 additions and 109 deletions
|
@ -154,115 +154,6 @@ struct pci20xxx_private {
|
||||||
|
|
||||||
#define CHAN (CR_CHAN(it->chanlist[0]))
|
#define CHAN (CR_CHAN(it->chanlist[0]))
|
||||||
|
|
||||||
static int pci20006_init(struct comedi_device *dev, struct comedi_subdevice *s,
|
|
||||||
int opt0, int opt1);
|
|
||||||
static int pci20341_init(struct comedi_device *dev, struct comedi_subdevice *s,
|
|
||||||
int opt0, int opt1);
|
|
||||||
static int pci20xxx_dio_init(struct comedi_device *dev,
|
|
||||||
struct comedi_subdevice *s);
|
|
||||||
|
|
||||||
/*
|
|
||||||
options[0] Board base address
|
|
||||||
options[1] IRQ
|
|
||||||
options[2] first option for module 1
|
|
||||||
options[3] second option for module 1
|
|
||||||
options[4] first option for module 2
|
|
||||||
options[5] second option for module 2
|
|
||||||
options[6] first option for module 3
|
|
||||||
options[7] second option for module 3
|
|
||||||
|
|
||||||
options for PCI-20341M:
|
|
||||||
first Analog input gain configuration
|
|
||||||
0 == 1
|
|
||||||
1 == 10
|
|
||||||
2 == 100
|
|
||||||
3 == 200
|
|
||||||
|
|
||||||
options for PCI-20006M:
|
|
||||||
first Analog output channel 0 range configuration
|
|
||||||
0 == bipolar 10 (-10V -- +10V)
|
|
||||||
1 == unipolar 10V (0V -- +10V)
|
|
||||||
2 == bipolar 5V (-5V -- +5V)
|
|
||||||
second Analog output channel 1 range configuration
|
|
||||||
0 == bipolar 10 (-10V -- +10V)
|
|
||||||
1 == unipolar 10V (0V -- +10V)
|
|
||||||
2 == bipolar 5V (-5V -- +5V)
|
|
||||||
*/
|
|
||||||
static int pci20xxx_attach(struct comedi_device *dev,
|
|
||||||
struct comedi_devconfig *it)
|
|
||||||
{
|
|
||||||
struct pci20xxx_private *devpriv;
|
|
||||||
unsigned char i;
|
|
||||||
int ret;
|
|
||||||
int id;
|
|
||||||
struct comedi_subdevice *s;
|
|
||||||
union pci20xxx_subdev_private *sdp;
|
|
||||||
|
|
||||||
ret = comedi_alloc_subdevices(dev, 1 + PCI20000_MODULES);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
|
|
||||||
if (!devpriv)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
devpriv->ioaddr = (void __iomem *)(unsigned long)it->options[0];
|
|
||||||
|
|
||||||
/* Check PCI-20001 C-2A Carrier Board ID */
|
|
||||||
if ((readb(devpriv->ioaddr) & PCI20000_ID) != PCI20000_ID) {
|
|
||||||
dev_warn(dev->class_dev,
|
|
||||||
"PCI-20001 C-2A Carrier Board at base=0x%p not found !\n",
|
|
||||||
devpriv->ioaddr);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
dev_info(dev->class_dev, "PCI-20001 C-2A at base=0x%p\n",
|
|
||||||
devpriv->ioaddr);
|
|
||||||
|
|
||||||
for (i = 0; i < PCI20000_MODULES; i++) {
|
|
||||||
s = &dev->subdevices[i];
|
|
||||||
sdp = comedi_alloc_spriv(s, sizeof(*sdp));
|
|
||||||
if (!sdp)
|
|
||||||
return -ENOMEM;
|
|
||||||
id = readb(devpriv->ioaddr + (i + 1) * PCI20000_OFFSET);
|
|
||||||
switch (id) {
|
|
||||||
case PCI20006_ID:
|
|
||||||
sdp->pci20006.iobase =
|
|
||||||
devpriv->ioaddr + (i + 1) * PCI20000_OFFSET;
|
|
||||||
pci20006_init(dev, s, it->options[2 * i + 2],
|
|
||||||
it->options[2 * i + 3]);
|
|
||||||
dev_info(dev->class_dev,
|
|
||||||
"PCI-20006 module in slot %d\n", i + 1);
|
|
||||||
break;
|
|
||||||
case PCI20341_ID:
|
|
||||||
sdp->pci20341.iobase =
|
|
||||||
devpriv->ioaddr + (i + 1) * PCI20000_OFFSET;
|
|
||||||
pci20341_init(dev, s, it->options[2 * i + 2],
|
|
||||||
it->options[2 * i + 3]);
|
|
||||||
dev_info(dev->class_dev,
|
|
||||||
"PCI-20341 module in slot %d\n", i + 1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dev_warn(dev->class_dev,
|
|
||||||
"unknown module code 0x%02x in slot %d: module disabled\n",
|
|
||||||
id, i); /* XXX this looks like a bug! i + 1 ?? */
|
|
||||||
/* fall through */
|
|
||||||
case PCI20xxx_EMPTY_ID:
|
|
||||||
s->type = COMEDI_SUBD_UNUSED;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* initialize struct pci20xxx_private */
|
|
||||||
pci20xxx_dio_init(dev, &dev->subdevices[PCI20000_MODULES]);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pci20xxx_detach(struct comedi_device *dev)
|
|
||||||
{
|
|
||||||
/* Nothing to cleanup */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* pci20006m */
|
/* pci20006m */
|
||||||
|
|
||||||
static int pci20006_insn_read(struct comedi_device *dev,
|
static int pci20006_insn_read(struct comedi_device *dev,
|
||||||
|
@ -649,6 +540,81 @@ static unsigned int pci20xxx_di(struct comedi_device *dev,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int pci20xxx_attach(struct comedi_device *dev,
|
||||||
|
struct comedi_devconfig *it)
|
||||||
|
{
|
||||||
|
struct pci20xxx_private *devpriv;
|
||||||
|
unsigned char i;
|
||||||
|
int ret;
|
||||||
|
int id;
|
||||||
|
struct comedi_subdevice *s;
|
||||||
|
union pci20xxx_subdev_private *sdp;
|
||||||
|
|
||||||
|
ret = comedi_alloc_subdevices(dev, 1 + PCI20000_MODULES);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
|
||||||
|
if (!devpriv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
devpriv->ioaddr = (void __iomem *)(unsigned long)it->options[0];
|
||||||
|
|
||||||
|
/* Check PCI-20001 C-2A Carrier Board ID */
|
||||||
|
if ((readb(devpriv->ioaddr) & PCI20000_ID) != PCI20000_ID) {
|
||||||
|
dev_warn(dev->class_dev,
|
||||||
|
"PCI-20001 C-2A Carrier Board at base=0x%p not found !\n",
|
||||||
|
devpriv->ioaddr);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
dev_info(dev->class_dev, "PCI-20001 C-2A at base=0x%p\n",
|
||||||
|
devpriv->ioaddr);
|
||||||
|
|
||||||
|
for (i = 0; i < PCI20000_MODULES; i++) {
|
||||||
|
s = &dev->subdevices[i];
|
||||||
|
sdp = comedi_alloc_spriv(s, sizeof(*sdp));
|
||||||
|
if (!sdp)
|
||||||
|
return -ENOMEM;
|
||||||
|
id = readb(devpriv->ioaddr + (i + 1) * PCI20000_OFFSET);
|
||||||
|
switch (id) {
|
||||||
|
case PCI20006_ID:
|
||||||
|
sdp->pci20006.iobase =
|
||||||
|
devpriv->ioaddr + (i + 1) * PCI20000_OFFSET;
|
||||||
|
pci20006_init(dev, s, it->options[2 * i + 2],
|
||||||
|
it->options[2 * i + 3]);
|
||||||
|
dev_info(dev->class_dev,
|
||||||
|
"PCI-20006 module in slot %d\n", i + 1);
|
||||||
|
break;
|
||||||
|
case PCI20341_ID:
|
||||||
|
sdp->pci20341.iobase =
|
||||||
|
devpriv->ioaddr + (i + 1) * PCI20000_OFFSET;
|
||||||
|
pci20341_init(dev, s, it->options[2 * i + 2],
|
||||||
|
it->options[2 * i + 3]);
|
||||||
|
dev_info(dev->class_dev,
|
||||||
|
"PCI-20341 module in slot %d\n", i + 1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dev_warn(dev->class_dev,
|
||||||
|
"unknown module code 0x%02x in slot %d: module disabled\n",
|
||||||
|
id, i); /* XXX this looks like a bug! i + 1 ?? */
|
||||||
|
/* fall through */
|
||||||
|
case PCI20xxx_EMPTY_ID:
|
||||||
|
s->type = COMEDI_SUBD_UNUSED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize struct pci20xxx_private */
|
||||||
|
pci20xxx_dio_init(dev, &dev->subdevices[PCI20000_MODULES]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pci20xxx_detach(struct comedi_device *dev)
|
||||||
|
{
|
||||||
|
/* Nothing to cleanup */
|
||||||
|
}
|
||||||
|
|
||||||
static struct comedi_driver pci20xxx_driver = {
|
static struct comedi_driver pci20xxx_driver = {
|
||||||
.driver_name = "ii_pci20kc",
|
.driver_name = "ii_pci20kc",
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
|
|
Loading…
Add table
Reference in a new issue