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

staging: comedi: adv_pci_dio: absorb pci_dio_add_di()

This function initializes a digitial input subdevices. For aesthetics,
absorb it into the (*auto_attach).

Remove the improper initialization of the SDF_LSAMPL subdev_flag and
len_chanlist. These are only used by subdevices that support async
commands.

Also, remove the unnecessary 'specflags' from the diosubd_data. Only
the boardid subdevice uses it.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ac93d19a
...@@ -136,7 +136,6 @@ struct diosubd_data { ...@@ -136,7 +136,6 @@ struct diosubd_data {
int addr; /* PCI address ofset */ int addr; /* PCI address ofset */
int regs; /* number of registers to read or 8255 int regs; /* number of registers to read or 8255
subdevices */ subdevices */
unsigned int specflags; /* addon subdevice flags */
}; };
struct dio_boardtype { struct dio_boardtype {
...@@ -156,36 +155,36 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -156,36 +155,36 @@ static const struct dio_boardtype boardtypes[] = {
.name = "pci1730", .name = "pci1730",
.cardtype = TYPE_PCI1730, .cardtype = TYPE_PCI1730,
.nsubdevs = 5, .nsubdevs = 5,
.sdi[0] = { 16, PCI1730_DI, 2, 0, }, .sdi[0] = { 16, PCI1730_DI, 2, },
.sdi[1] = { 16, PCI1730_IDI, 2, 0, }, .sdi[1] = { 16, PCI1730_IDI, 2, },
.sdo[0] = { 16, PCI1730_DO, 2, 0, }, .sdo[0] = { 16, PCI1730_DO, 2, },
.sdo[1] = { 16, PCI1730_IDO, 2, 0, }, .sdo[1] = { 16, PCI1730_IDO, 2, },
.boardid = { 4, PCI173x_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI173x_BOARDID, 1, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1733] = { [TYPE_PCI1733] = {
.name = "pci1733", .name = "pci1733",
.cardtype = TYPE_PCI1733, .cardtype = TYPE_PCI1733,
.nsubdevs = 2, .nsubdevs = 2,
.sdi[1] = { 32, PCI1733_IDI, 4, 0, }, .sdi[1] = { 32, PCI1733_IDI, 4, },
.boardid = { 4, PCI173x_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI173x_BOARDID, 1, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1734] = { [TYPE_PCI1734] = {
.name = "pci1734", .name = "pci1734",
.cardtype = TYPE_PCI1734, .cardtype = TYPE_PCI1734,
.nsubdevs = 2, .nsubdevs = 2,
.sdo[1] = { 32, PCI1734_IDO, 4, 0, }, .sdo[1] = { 32, PCI1734_IDO, 4, },
.boardid = { 4, PCI173x_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI173x_BOARDID, 1, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1735] = { [TYPE_PCI1735] = {
.name = "pci1735", .name = "pci1735",
.cardtype = TYPE_PCI1735, .cardtype = TYPE_PCI1735,
.nsubdevs = 4, .nsubdevs = 4,
.sdi[0] = { 32, PCI1735_DI, 4, 0, }, .sdi[0] = { 32, PCI1735_DI, 4, },
.sdo[0] = { 32, PCI1735_DO, 4, 0, }, .sdo[0] = { 32, PCI1735_DO, 4, },
.boardid = { 4, PCI1735_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI1735_BOARDID, 1, },
.timer_regbase = PCI1735_C8254, .timer_regbase = PCI1735_C8254,
.io_access = IO_8b, .io_access = IO_8b,
}, },
...@@ -193,31 +192,31 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -193,31 +192,31 @@ static const struct dio_boardtype boardtypes[] = {
.name = "pci1736", .name = "pci1736",
.cardtype = TYPE_PCI1736, .cardtype = TYPE_PCI1736,
.nsubdevs = 3, .nsubdevs = 3,
.sdi[1] = { 16, PCI1736_IDI, 2, 0, }, .sdi[1] = { 16, PCI1736_IDI, 2, },
.sdo[1] = { 16, PCI1736_IDO, 2, 0, }, .sdo[1] = { 16, PCI1736_IDO, 2, },
.boardid = { 4, PCI1736_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI1736_BOARDID, 1, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1739] = { [TYPE_PCI1739] = {
.name = "pci1739", .name = "pci1739",
.cardtype = TYPE_PCI1739, .cardtype = TYPE_PCI1739,
.nsubdevs = 2, .nsubdevs = 2,
.sdio[0] = { 48, PCI1739_DIO, 2, 0, }, .sdio[0] = { 48, PCI1739_DIO, 2, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1750] = { [TYPE_PCI1750] = {
.name = "pci1750", .name = "pci1750",
.cardtype = TYPE_PCI1750, .cardtype = TYPE_PCI1750,
.nsubdevs = 2, .nsubdevs = 2,
.sdi[1] = { 16, PCI1750_IDI, 2, 0, }, .sdi[1] = { 16, PCI1750_IDI, 2, },
.sdo[1] = { 16, PCI1750_IDO, 2, 0, }, .sdo[1] = { 16, PCI1750_IDO, 2, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1751] = { [TYPE_PCI1751] = {
.name = "pci1751", .name = "pci1751",
.cardtype = TYPE_PCI1751, .cardtype = TYPE_PCI1751,
.nsubdevs = 3, .nsubdevs = 3,
.sdio[0] = { 48, PCI1751_DIO, 2, 0, }, .sdio[0] = { 48, PCI1751_DIO, 2, },
.timer_regbase = PCI1751_CNT, .timer_regbase = PCI1751_CNT,
.io_access = IO_8b, .io_access = IO_8b,
}, },
...@@ -225,51 +224,51 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -225,51 +224,51 @@ static const struct dio_boardtype boardtypes[] = {
.name = "pci1752", .name = "pci1752",
.cardtype = TYPE_PCI1752, .cardtype = TYPE_PCI1752,
.nsubdevs = 3, .nsubdevs = 3,
.sdo[0] = { 32, PCI1752_IDO, 2, 0, }, .sdo[0] = { 32, PCI1752_IDO, 2, },
.sdo[1] = { 32, PCI1752_IDO2, 2, 0, }, .sdo[1] = { 32, PCI1752_IDO2, 2, },
.boardid = { 4, PCI175x_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI175x_BOARDID, 1, },
.io_access = IO_16b, .io_access = IO_16b,
}, },
[TYPE_PCI1753] = { [TYPE_PCI1753] = {
.name = "pci1753", .name = "pci1753",
.cardtype = TYPE_PCI1753, .cardtype = TYPE_PCI1753,
.nsubdevs = 4, .nsubdevs = 4,
.sdio[0] = { 96, PCI1753_DIO, 4, 0, }, .sdio[0] = { 96, PCI1753_DIO, 4, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1753E] = { [TYPE_PCI1753E] = {
.name = "pci1753e", .name = "pci1753e",
.cardtype = TYPE_PCI1753E, .cardtype = TYPE_PCI1753E,
.nsubdevs = 8, .nsubdevs = 8,
.sdio[0] = { 96, PCI1753_DIO, 4, 0, }, .sdio[0] = { 96, PCI1753_DIO, 4, },
.sdio[1] = { 96, PCI1753E_DIO, 4, 0, }, .sdio[1] = { 96, PCI1753E_DIO, 4, },
.io_access = IO_8b, .io_access = IO_8b,
}, },
[TYPE_PCI1754] = { [TYPE_PCI1754] = {
.name = "pci1754", .name = "pci1754",
.cardtype = TYPE_PCI1754, .cardtype = TYPE_PCI1754,
.nsubdevs = 3, .nsubdevs = 3,
.sdi[0] = { 32, PCI1754_IDI, 2, 0, }, .sdi[0] = { 32, PCI1754_IDI, 2, },
.sdi[1] = { 32, PCI1754_IDI2, 2, 0, }, .sdi[1] = { 32, PCI1754_IDI2, 2, },
.boardid = { 4, PCI175x_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI175x_BOARDID, 1, },
.io_access = IO_16b, .io_access = IO_16b,
}, },
[TYPE_PCI1756] = { [TYPE_PCI1756] = {
.name = "pci1756", .name = "pci1756",
.cardtype = TYPE_PCI1756, .cardtype = TYPE_PCI1756,
.nsubdevs = 3, .nsubdevs = 3,
.sdi[1] = { 32, PCI1756_IDI, 2, 0, }, .sdi[1] = { 32, PCI1756_IDI, 2, },
.sdo[1] = { 32, PCI1756_IDO, 2, 0, }, .sdo[1] = { 32, PCI1756_IDO, 2, },
.boardid = { 4, PCI175x_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI175x_BOARDID, 1, },
.io_access = IO_16b, .io_access = IO_16b,
}, },
[TYPE_PCI1762] = { [TYPE_PCI1762] = {
.name = "pci1762", .name = "pci1762",
.cardtype = TYPE_PCI1762, .cardtype = TYPE_PCI1762,
.nsubdevs = 3, .nsubdevs = 3,
.sdi[1] = { 16, PCI1762_IDI, 1, 0, }, .sdi[1] = { 16, PCI1762_IDI, 1, },
.sdo[1] = { 16, PCI1762_RO, 1, 0, }, .sdo[1] = { 16, PCI1762_RO, 1, },
.boardid = { 4, PCI1762_BOARDID, 1, SDF_INTERNAL, }, .boardid = { 4, PCI1762_BOARDID, 1, },
.io_access = IO_16b, .io_access = IO_16b,
}, },
}; };
...@@ -440,33 +439,6 @@ static int pci_dio_reset(struct comedi_device *dev) ...@@ -440,33 +439,6 @@ static int pci_dio_reset(struct comedi_device *dev)
return 0; return 0;
} }
static int pci_dio_add_di(struct comedi_device *dev,
struct comedi_subdevice *s,
const struct diosubd_data *d)
{
const struct dio_boardtype *board = dev->board_ptr;
s->type = COMEDI_SUBD_DI;
s->subdev_flags = SDF_READABLE | d->specflags;
if (d->chans > 16)
s->subdev_flags |= SDF_LSAMPL;
s->n_chan = d->chans;
s->maxdata = 1;
s->len_chanlist = d->chans;
s->range_table = &range_digital;
switch (board->io_access) {
case IO_8b:
s->insn_bits = pci_dio_insn_bits_di_b;
break;
case IO_16b:
s->insn_bits = pci_dio_insn_bits_di_w;
break;
}
s->private = (void *)d;
return 0;
}
static unsigned long pci_dio_override_cardtype(struct pci_dev *pcidev, static unsigned long pci_dio_override_cardtype(struct pci_dev *pcidev,
unsigned long cardtype) unsigned long cardtype)
{ {
...@@ -532,7 +504,20 @@ static int pci_dio_auto_attach(struct comedi_device *dev, ...@@ -532,7 +504,20 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
d = &board->sdi[i]; d = &board->sdi[i];
if (d->chans) { if (d->chans) {
s = &dev->subdevices[subdev++]; s = &dev->subdevices[subdev++];
pci_dio_add_di(dev, s, d); s->type = COMEDI_SUBD_DI;
s->subdev_flags = SDF_READABLE;
s->n_chan = d->chans;
s->maxdata = 1;
s->range_table = &range_digital;
switch (board->io_access) {
case IO_8b:
s->insn_bits = pci_dio_insn_bits_di_b;
break;
case IO_16b:
s->insn_bits = pci_dio_insn_bits_di_w;
break;
}
s->private = (void *)d;
} }
} }
...@@ -572,7 +557,19 @@ static int pci_dio_auto_attach(struct comedi_device *dev, ...@@ -572,7 +557,19 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
if (d->chans) { if (d->chans) {
s = &dev->subdevices[subdev++]; s = &dev->subdevices[subdev++];
s->type = COMEDI_SUBD_DI; s->type = COMEDI_SUBD_DI;
pci_dio_add_di(dev, s, d); s->subdev_flags = SDF_READABLE | SDF_INTERNAL;
s->n_chan = d->chans;
s->maxdata = 1;
s->range_table = &range_digital;
switch (board->io_access) {
case IO_8b:
s->insn_bits = pci_dio_insn_bits_di_b;
break;
case IO_16b:
s->insn_bits = pci_dio_insn_bits_di_w;
break;
}
s->private = (void *)d;
} }
if (board->timer_regbase) { if (board->timer_regbase) {
......
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