diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2013-06-06 15:37:44 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-06-08 21:56:58 -0700 |
commit | f68d07f0804e78c1e72cd6861a455b6889f3587e (patch) | |
tree | 303a1003fb43696a988f893897b2f1230fdddda4 /drivers/staging/comedi/drivers/pcl730.c | |
parent | 145ff35bab0c64320cba09a1c720525e035025c4 (diff) |
staging: comedi: pcl730: add support for the PCL-725 ISA board
The PCL-725 ISA board can be supported by this driver. This board has
8 isolated digital inputs and 8 isolated digital outputs.
Add support for the PCL-725 board to the pcl730 driver and remove the
standalone pcl725 driver.
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>
Diffstat (limited to 'drivers/staging/comedi/drivers/pcl730.c')
-rw-r--r-- | drivers/staging/comedi/drivers/pcl730.c | 64 |
1 files changed, 42 insertions, 22 deletions
diff --git a/drivers/staging/comedi/drivers/pcl730.c b/drivers/staging/comedi/drivers/pcl730.c index 4b9a4fbd7b72..72e20a7a7d6a 100644 --- a/drivers/staging/comedi/drivers/pcl730.c +++ b/drivers/staging/comedi/drivers/pcl730.c @@ -11,6 +11,7 @@ * (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 * @@ -29,6 +30,7 @@ * 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) */ @@ -38,25 +40,40 @@ 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, }, }; @@ -113,7 +130,7 @@ static int pcl730_attach(struct comedi_device *dev, 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; @@ -135,27 +152,30 @@ static int pcl730_attach(struct comedi_device *dev, 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; } |