To compile this driver as a module, choose M here: the module will be
called pcl724.
-config COMEDI_PCL725
- tristate "Advantech PCL-725 and compatible ISA card support"
- ---help---
- Enable support for Advantech PCL-725 and compatible ISA cards.
-
- To compile this driver as a module, choose M here: the module will be
- called pcl725.
-
config COMEDI_PCL726
tristate "Advantech PCL-726 and compatible ISA card support"
---help---
called pcl726.
config COMEDI_PCL730
- tristate "Advantech PCL-730/PCM-3730 and compatible board support"
+ tristate "Simple Digital I/O board support (8-bit ports)"
---help---
- Enable support for Advantech PCL-730, ICP ISO-730 and ADlink
- ACL-7130 ISA cards as well as the Advantech PCM-3730 and clone
- PC/104 boards.
+ Enable support for various simple ISA or PC/104 Digital I/O boards.
+ These boards all use 8-bit I/O ports.
+
+ Advantech PCL-730 isolated - 16 in/16 out ttl - 16 in/16 out
+ ICP ISO-730 isolated - 16 in/16 out ttl - 16 in/16 out
+ ADlink ACL-7130 isolated - 16 in/16 out ttl - 16 in/16 out
+ Advantech PCM-3730 isolated - 8 in/8 out ttl - 16 in/16 out
+ Advantech PCL-725 isolated - 8 in/8 out
To compile this driver as a module, choose M here: the module will be
called pcl730.
obj-$(CONFIG_COMEDI_AMPLC_PC263_ISA) += amplc_pc263.o
obj-$(CONFIG_COMEDI_PCL711) += pcl711.o
obj-$(CONFIG_COMEDI_PCL724) += pcl724.o
-obj-$(CONFIG_COMEDI_PCL725) += pcl725.o
obj-$(CONFIG_COMEDI_PCL726) += pcl726.o
obj-$(CONFIG_COMEDI_PCL730) += pcl730.o
obj-$(CONFIG_COMEDI_PCL812) += pcl812.o
+++ /dev/null
-/*
- * comedi/drivers/pcl725.c
- * Driver for PCL725 and clones
- * David A. Schleef
- */
-/*
-Driver: pcl725
-Description: Advantech PCL-725 (& compatibles)
-Author: ds
-Status: unknown
-Devices: [Advantech] PCL-725 (pcl725)
-*/
-
-#include "../comedidev.h"
-
-#include <linux/ioport.h>
-
-#define PCL725_SIZE 2
-
-#define PCL725_DO 0
-#define PCL725_DI 1
-
-static int pcl725_do_insn(struct comedi_device *dev, struct comedi_subdevice *s,
- struct comedi_insn *insn, unsigned int *data)
-{
- if (data[0]) {
- s->state &= ~data[0];
- s->state |= (data[0] & data[1]);
- outb(s->state, dev->iobase + PCL725_DO);
- }
-
- data[1] = s->state;
-
- return insn->n;
-}
-
-static int pcl725_di_insn(struct comedi_device *dev, struct comedi_subdevice *s,
- struct comedi_insn *insn, unsigned int *data)
-{
- data[1] = inb(dev->iobase + PCL725_DI);
-
- return insn->n;
-}
-
-static int pcl725_attach(struct comedi_device *dev, struct comedi_devconfig *it)
-{
- struct comedi_subdevice *s;
- int ret;
-
- ret = comedi_request_region(dev, it->options[0], PCL725_SIZE);
- if (ret)
- return ret;
-
- ret = comedi_alloc_subdevices(dev, 2);
- if (ret)
- return ret;
-
- s = &dev->subdevices[0];
- /* do */
- s->type = COMEDI_SUBD_DO;
- s->subdev_flags = SDF_WRITABLE;
- s->maxdata = 1;
- s->n_chan = 8;
- s->insn_bits = pcl725_do_insn;
- s->range_table = &range_digital;
-
- s = &dev->subdevices[1];
- /* di */
- s->type = COMEDI_SUBD_DI;
- s->subdev_flags = SDF_READABLE;
- s->maxdata = 1;
- s->n_chan = 8;
- s->insn_bits = pcl725_di_insn;
- s->range_table = &range_digital;
-
- printk(KERN_INFO "\n");
-
- return 0;
-}
-
-static struct comedi_driver pcl725_driver = {
- .driver_name = "pcl725",
- .module = THIS_MODULE,
- .attach = pcl725_attach,
- .detach = comedi_legacy_detach,
-};
-module_comedi_driver(pcl725_driver);
-
-MODULE_AUTHOR("Comedi http://www.comedi.org");
-MODULE_DESCRIPTION("Comedi low-level driver");
-MODULE_LICENSE("GPL");
* (ICP) ISO-730 [iso730]
* (Adlink) ACL-7130 [acl7130]
* (Advantech) PCM-3730 [pcm3730]
+ * (Advantech) PCL-725 [pcl725]
* Author: José Luis Sánchez (jsanchezv@teleline.es)
* Status: untested
*
* Register I/O map
*
* The pcm3730 PC/104 board does not have the PCL730_IDIO_HI register.
+ * The pcl725 ISA board uses separate registers for isolated digital I/O.
*/
#define PCL730_IDIO_LO 0 /* Isolated Digital I/O low byte (ID0-ID7) */
#define PCL730_IDIO_HI 1 /* Isolated Digital I/O high byte (ID8-ID15) */
struct pcl730_board {
const char *name;
unsigned int io_range;
+ unsigned is_pcl725:1;
+ unsigned has_ttl_io:1;
int n_iso_chan;
+ int n_ttl_chan;
};
static const struct pcl730_board pcl730_boards[] = {
{
.name = "pcl730",
.io_range = 0x04,
+ .has_ttl_io = 1,
.n_iso_chan = 16,
+ .n_ttl_chan = 16,
}, {
.name = "iso730",
.io_range = 0x04,
.n_iso_chan = 16,
+ .n_ttl_chan = 16,
}, {
.name = "acl7130",
.io_range = 0x08,
+ .has_ttl_io = 1,
.n_iso_chan = 16,
+ .n_ttl_chan = 16,
}, {
.name = "pcm3730",
.io_range = 0x04,
+ .has_ttl_io = 1,
+ .n_iso_chan = 8,
+ .n_ttl_chan = 16,
+ }, {
+ .name = "pcl725",
+ .io_range = 0x02,
+ .is_pcl725 = 1,
.n_iso_chan = 8,
},
};
if (ret)
return ret;
- ret = comedi_alloc_subdevices(dev, 4);
+ ret = comedi_alloc_subdevices(dev, board->has_ttl_io ? 4 : 2);
if (ret)
return ret;
s->maxdata = 1;
s->range_table = &range_digital;
s->insn_bits = pcl730_di_insn_bits;
- s->private = (void *)PCL730_IDIO_LO;
-
- /* TTL Digital Outputs */
- s = &dev->subdevices[2];
- s->type = COMEDI_SUBD_DO;
- s->subdev_flags = SDF_WRITABLE;
- s->n_chan = 16;
- s->maxdata = 1;
- s->range_table = &range_digital;
- s->insn_bits = pcl730_do_insn_bits;
- s->private = (void *)PCL730_DIO_LO;
-
- /* TTL Digital Inputs */
- s = &dev->subdevices[3];
- s->type = COMEDI_SUBD_DI;
- s->subdev_flags = SDF_READABLE;
- s->n_chan = 16;
- s->maxdata = 1;
- s->range_table = &range_digital;
- s->insn_bits = pcl730_di_insn_bits;
- s->private = (void *)PCL730_DIO_LO;
+ s->private = board->is_pcl725 ? (void *)PCL730_IDIO_HI
+ : (void *)PCL730_IDIO_LO;
+
+ if (board->has_ttl_io) {
+ /* TTL Digital Outputs */
+ s = &dev->subdevices[2];
+ s->type = COMEDI_SUBD_DO;
+ s->subdev_flags = SDF_WRITABLE;
+ s->n_chan = board->n_ttl_chan;
+ s->maxdata = 1;
+ s->range_table = &range_digital;
+ s->insn_bits = pcl730_do_insn_bits;
+ s->private = (void *)PCL730_DIO_LO;
+
+ /* TTL Digital Inputs */
+ s = &dev->subdevices[3];
+ s->type = COMEDI_SUBD_DI;
+ s->subdev_flags = SDF_READABLE;
+ s->n_chan = board->n_ttl_chan;
+ s->maxdata = 1;
+ s->range_table = &range_digital;
+ s->insn_bits = pcl730_di_insn_bits;
+ s->private = (void *)PCL730_DIO_LO;
+ }
return 0;
}