Commit f91f9bea authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: das08: split out bus specific code

Split the bus specific ISA/PC-104 and PCI code out of this driver
and create two new drivers, das08_isa and das08_pci.

This allows removing all the #ifdef'ery in the das08 driver that
handled if the CONFIG_COMEDI_DAS08_{ISA,PCI} options were enabled.

It also makes the PCI driver cleanly Plug-and-Play since the comedi
driver only has an auto_attach callback. Previously it also had an
attach callback in order to handle the ISA cards.

Since the PCMCIA support was already split out, we can also remove
the now unused enum das08_bustype and it's use in the boardinfo.
The bus specific code deals with the bustype automatically before
it calls the common attach function in das08.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ec6e0f63
......@@ -274,7 +274,7 @@ config COMEDI_DAS08_ISA
DAS08/JR-16-AO, PC104-DAS08, DAS08/JR/16.
To compile this driver as a module, choose M here: the module will be
called das08.
called das08_isa.
config COMEDI_DAS16
tristate "DAS-16 compatible ISA and PC/104 card support"
......@@ -802,7 +802,7 @@ config COMEDI_DAS08_PCI
Enable support for PCI DAS-08 cards.
To compile this driver as a module, choose M here: the module will be
called das08.
called das08_pci.
config COMEDI_DT3000
tristate "Data Translation DT3000 series support"
......
......@@ -25,6 +25,7 @@ obj-$(CONFIG_COMEDI_PCM3730) += pcm3730.o
obj-$(CONFIG_COMEDI_RTI800) += rti800.o
obj-$(CONFIG_COMEDI_RTI802) += rti802.o
obj-$(CONFIG_COMEDI_DAS16M1) += das16m1.o
obj-$(CONFIG_COMEDI_DAS08_ISA) += das08_isa.o
obj-$(CONFIG_COMEDI_DAS16) += das16.o
obj-$(CONFIG_COMEDI_DAS800) += das800.o
obj-$(CONFIG_COMEDI_DAS1800) += das1800.o
......@@ -81,6 +82,7 @@ obj-$(CONFIG_COMEDI_AMPLC_PC263) += amplc_pc263.o
obj-$(CONFIG_COMEDI_AMPLC_PCI224) += amplc_pci224.o
obj-$(CONFIG_COMEDI_AMPLC_PCI230) += amplc_pci230.o
obj-$(CONFIG_COMEDI_CONTEC_PCI_DIO) += contec_pci_dio.o
obj-$(CONFIG_COMEDI_DAS08_PCI) += das08_pci.o
obj-$(CONFIG_COMEDI_DT3000) += dt3000.o
obj-$(CONFIG_COMEDI_DYNA_PCI10XX) += dyna_pci10xx.o
obj-$(CONFIG_COMEDI_UNIOXX5) += unioxx5.o
......
This diff is collapsed.
......@@ -24,7 +24,6 @@
#ifndef _DAS08_H
#define _DAS08_H
enum das08_bustype { isa, pci, pcmcia };
/* different ways ai data is encoded in first two registers */
enum das08_ai_encoding { das08_encode12, das08_encode16, das08_pcm_encode12 };
enum das08_lrange { das08_pg_none, das08_bipolar5, das08_pgh, das08_pgl,
......@@ -34,7 +33,6 @@ enum das08_lrange { das08_pg_none, das08_bipolar5, das08_pgh, das08_pgl,
struct das08_board_struct {
const char *name;
unsigned int id; /* id for pci/pcmcia boards */
enum das08_bustype bustype;
bool is_jr; /* true for 'JR' boards */
unsigned int ai_nbits;
enum das08_lrange ai_pg;
......
......@@ -60,7 +60,6 @@ static const struct das08_board_struct das08_cs_boards[] = {
{
.name = "pcm-das08",
.id = 0x0, /* XXX */
.bustype = pcmcia,
.ai_nbits = 12,
.ai_pg = das08_bipolar5,
.ai_encoding = das08_pcm_encode12,
......
/*
* das08_isa.c
* comedi driver for DAS08 ISA/PC-104 boards
*
* COMEDI - Linux Control and Measurement Device Interface
* Copyright (C) 2000 David A. Schleef <ds@schleef.org>
* Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net>
* Copyright (C) 2004 Salvador E. Tropea <set@users.sf.net> <set@ieee.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Driver: das08_isa
* Description: DAS-08 ISA/PC-104 compatible boards
* Devices: (Keithley Metrabyte) DAS08 [isa-das08],
* (ComputerBoards) DAS08 [isa-das08]
* (ComputerBoards) DAS08-PGM [das08-pgm]
* (ComputerBoards) DAS08-PGH [das08-pgh]
* (ComputerBoards) DAS08-PGL [das08-pgl]
* (ComputerBoards) DAS08-AOH [das08-aoh]
* (ComputerBoards) DAS08-AOL [das08-aol]
* (ComputerBoards) DAS08-AOM [das08-aom]
* (ComputerBoards) DAS08/JR-AO [das08/jr-ao]
* (ComputerBoards) DAS08/JR-16-AO [das08jr-16-ao]
* (ComputerBoards) PC104-DAS08 [pc104-das08]
* (ComputerBoards) DAS08/JR/16 [das08jr/16]
* Author: Warren Jasper, ds, Frank Hess
* Updated: Fri, 31 Aug 2012 19:19:06 +0100
* Status: works
*
* This is the ISA/PC-104-specific support split off from the das08 driver.
*
* Configuration Options:
* [0] - base io address
*/
#include "../comedidev.h"
#include "das08.h"
static const struct das08_board_struct das08_isa_boards[] = {
{
/* cio-das08.pdf */
.name = "isa-das08",
.ai_nbits = 12,
.ai_pg = das08_pg_none,
.ai_encoding = das08_encode12,
.di_nchan = 3,
.do_nchan = 4,
.i8255_offset = 8,
.i8254_offset = 4,
.iosize = 16, /* unchecked */
}, {
/* cio-das08pgx.pdf */
.name = "das08-pgm",
.ai_nbits = 12,
.ai_pg = das08_pgm,
.ai_encoding = das08_encode12,
.di_nchan = 3,
.do_nchan = 4,
.i8255_offset = 0,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
/* cio-das08pgx.pdf */
.name = "das08-pgh",
.ai_nbits = 12,
.ai_pg = das08_pgh,
.ai_encoding = das08_encode12,
.di_nchan = 3,
.do_nchan = 4,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
/* cio-das08pgx.pdf */
.name = "das08-pgl",
.ai_nbits = 12,
.ai_pg = das08_pgl,
.ai_encoding = das08_encode12,
.di_nchan = 3,
.do_nchan = 4,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
/* cio-das08_aox.pdf */
.name = "das08-aoh",
.ai_nbits = 12,
.ai_pg = das08_pgh,
.ai_encoding = das08_encode12,
.ao_nbits = 12,
.di_nchan = 3,
.do_nchan = 4,
.i8255_offset = 0x0c,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
/* cio-das08_aox.pdf */
.name = "das08-aol",
.ai_nbits = 12,
.ai_pg = das08_pgl,
.ai_encoding = das08_encode12,
.ao_nbits = 12,
.di_nchan = 3,
.do_nchan = 4,
.i8255_offset = 0x0c,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
/* cio-das08_aox.pdf */
.name = "das08-aom",
.ai_nbits = 12,
.ai_pg = das08_pgm,
.ai_encoding = das08_encode12,
.ao_nbits = 12,
.di_nchan = 3,
.do_nchan = 4,
.i8255_offset = 0x0c,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
/* cio-das08-jr-ao.pdf */
.name = "das08/jr-ao",
.is_jr = true,
.ai_nbits = 12,
.ai_pg = das08_pg_none,
.ai_encoding = das08_encode12,
.ao_nbits = 12,
.di_nchan = 8,
.do_nchan = 8,
.iosize = 16, /* unchecked */
}, {
/* cio-das08jr-16-ao.pdf */
.name = "das08jr-16-ao",
.is_jr = true,
.ai_nbits = 16,
.ai_pg = das08_pg_none,
.ai_encoding = das08_encode16,
.ao_nbits = 16,
.di_nchan = 8,
.do_nchan = 8,
.i8254_offset = 0x04,
.iosize = 16, /* unchecked */
}, {
.name = "pc104-das08",
.ai_nbits = 12,
.ai_pg = das08_pg_none,
.ai_encoding = das08_encode12,
.di_nchan = 3,
.do_nchan = 4,
.i8254_offset = 4,
.iosize = 16, /* unchecked */
}, {
.name = "das08jr/16",
.is_jr = true,
.ai_nbits = 16,
.ai_pg = das08_pg_none,
.ai_encoding = das08_encode16,
.di_nchan = 8,
.do_nchan = 8,
.iosize = 16, /* unchecked */
},
};
static int das08_isa_attach(struct comedi_device *dev,
struct comedi_devconfig *it)
{
const struct das08_board_struct *thisboard = comedi_board(dev);
struct das08_private_struct *devpriv;
devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
if (!devpriv)
return -ENOMEM;
dev->private = devpriv;
if (!request_region(it->options[0], thisboard->iosize,
thisboard->name))
return -EIO;
return das08_common_attach(dev, it->options[0]);
}
static void das08_isa_detach(struct comedi_device *dev)
{
const struct das08_board_struct *thisboard = comedi_board(dev);
das08_common_detach(dev);
if (dev->iobase)
release_region(dev->iobase, thisboard->iosize);
}
static struct comedi_driver das08_isa_driver = {
.driver_name = "isa-das08",
.module = THIS_MODULE,
.attach = das08_isa_attach,
.detach = das08_isa_detach,
.board_name = &das08_isa_boards[0].name,
.num_names = ARRAY_SIZE(das08_isa_boards),
.offset = sizeof(das08_isa_boards[0]),
};
module_comedi_driver(das08_isa_driver);
MODULE_AUTHOR("Comedi http://www.comedi.org");
MODULE_DESCRIPTION("Comedi low-level driver");
MODULE_LICENSE("GPL");
/*
* das08_pci.c
* comedi driver for DAS08 PCI boards
*
* COMEDI - Linux Control and Measurement Device Interface
* Copyright (C) 2000 David A. Schleef <ds@schleef.org>
* Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net>
* Copyright (C) 2004 Salvador E. Tropea <set@users.sf.net> <set@ieee.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Driver: das08_pci
* Description: DAS-08 PCI compatible boards
* Devices: (ComputerBoards) PCI-DAS08 [pci-das08]
* Author: Warren Jasper, ds, Frank Hess
* Updated: Fri, 31 Aug 2012 19:19:06 +0100
* Status: works
*
* This is the PCI-specific support split off from the das08 driver.
*
* Configuration Options: not applicable, uses PCI auto config
*/
#include <linux/pci.h>
#include "../comedidev.h"
#include "das08.h"
#define PCI_DEVICE_ID_PCIDAS08 0x0029
static const struct das08_board_struct das08_pci_boards[] = {
{
.name = "pci-das08",
.id = PCI_DEVICE_ID_PCIDAS08,
.ai_nbits = 12,
.ai_pg = das08_bipolar5,
.ai_encoding = das08_encode12,
.di_nchan = 3,
.do_nchan = 4,
.i8254_offset = 4,
.iosize = 8,
},
};
static int das08_pci_auto_attach(struct comedi_device *dev,
unsigned long context_unused)
{
struct pci_dev *pdev = comedi_to_pci_dev(dev);
struct das08_private_struct *devpriv;
int ret;
devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
if (!devpriv)
return -ENOMEM;
dev->private = devpriv;
/* The das08 driver needs the board_ptr */
dev->board_ptr = &das08_pci_boards[0];
ret = comedi_pci_enable(pdev, dev->driver->driver_name);
if (ret)
return ret;
dev->iobase = pci_resource_start(pdev, 2);
return das08_common_attach(dev, dev->iobase);
}
static void das08_pci_detach(struct comedi_device *dev)
{
struct pci_dev *pdev = comedi_to_pci_dev(dev);
das08_common_detach(dev);
if (dev->iobase)
comedi_pci_disable(pdev);
}
static struct comedi_driver das08_pci_comedi_driver = {
.driver_name = "pci-das08",
.module = THIS_MODULE,
.auto_attach = das08_pci_auto_attach,
.detach = das08_pci_detach,
};
static int das08_pci_probe(struct pci_dev *dev,
const struct pci_device_id *ent)
{
return comedi_pci_auto_config(dev, &das08_pci_comedi_driver);
}
static DEFINE_PCI_DEVICE_TABLE(das08_pci_table) = {
{ PCI_DEVICE(PCI_VENDOR_ID_CB, PCI_DEVICE_ID_PCIDAS08) },
{ 0 }
};
MODULE_DEVICE_TABLE(pci, das08_pci_table);
static struct pci_driver das08_pci_driver = {
.name = "pci-das08",
.id_table = das08_pci_table,
.probe = das08_pci_probe,
.remove = comedi_pci_auto_unconfig,
};
module_comedi_pci_driver(das08_pci_comedi_driver, das08_pci_driver);
MODULE_AUTHOR("Comedi http://www.comedi.org");
MODULE_DESCRIPTION("Comedi low-level driver");
MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment