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

staging: comedi: adv_pci_dio: refactor 'io_access' boardinfo

The boards supported by this driver either use 8-bit or 16-bit I/O. The
'io_access' member of the boardinfo is used by the (*auto_attach) to
determine which (*insn_bits) function to use.

Simplify the boardinfo a bit by refactoring the 'io_access' member into
a bit-field flag 'is_16bit'. Use the new flag and remove the switch ()
code in the (*auto_attach).
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 f5ceac9b
...@@ -43,11 +43,6 @@ enum hw_cards_id { ...@@ -43,11 +43,6 @@ enum hw_cards_id {
TYPE_PCI1762 TYPE_PCI1762
}; };
/* which I/O instructions to use */
enum hw_io_access {
IO_8b, IO_16b
};
#define MAX_DI_SUBDEVS 2 /* max number of DI subdevices per card */ #define MAX_DI_SUBDEVS 2 /* max number of DI subdevices per card */
#define MAX_DO_SUBDEVS 2 /* max number of DO subdevices per card */ #define MAX_DO_SUBDEVS 2 /* max number of DO subdevices per card */
#define MAX_DIO_SUBDEVG 2 /* max number of DIO subdevices group per #define MAX_DIO_SUBDEVG 2 /* max number of DIO subdevices group per
...@@ -147,7 +142,7 @@ struct dio_boardtype { ...@@ -147,7 +142,7 @@ struct dio_boardtype {
struct diosubd_data sdio[MAX_DIO_SUBDEVG]; /* DIO 8255 chans */ struct diosubd_data sdio[MAX_DIO_SUBDEVG]; /* DIO 8255 chans */
struct diosubd_data boardid; /* card supports board ID switch */ struct diosubd_data boardid; /* card supports board ID switch */
unsigned long timer_regbase; unsigned long timer_regbase;
enum hw_io_access io_access; unsigned int is_16bit:1;
}; };
static const struct dio_boardtype boardtypes[] = { static const struct dio_boardtype boardtypes[] = {
...@@ -160,7 +155,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -160,7 +155,6 @@ static const struct dio_boardtype boardtypes[] = {
.sdo[0] = { 16, PCI1730_DO, 2, }, .sdo[0] = { 16, PCI1730_DO, 2, },
.sdo[1] = { 16, PCI1730_IDO, 2, }, .sdo[1] = { 16, PCI1730_IDO, 2, },
.boardid = { 4, PCI173x_BOARDID, 1, }, .boardid = { 4, PCI173x_BOARDID, 1, },
.io_access = IO_8b,
}, },
[TYPE_PCI1733] = { [TYPE_PCI1733] = {
.name = "pci1733", .name = "pci1733",
...@@ -168,7 +162,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -168,7 +162,6 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 2, .nsubdevs = 2,
.sdi[1] = { 32, PCI1733_IDI, 4, }, .sdi[1] = { 32, PCI1733_IDI, 4, },
.boardid = { 4, PCI173x_BOARDID, 1, }, .boardid = { 4, PCI173x_BOARDID, 1, },
.io_access = IO_8b,
}, },
[TYPE_PCI1734] = { [TYPE_PCI1734] = {
.name = "pci1734", .name = "pci1734",
...@@ -176,7 +169,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -176,7 +169,6 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 2, .nsubdevs = 2,
.sdo[1] = { 32, PCI1734_IDO, 4, }, .sdo[1] = { 32, PCI1734_IDO, 4, },
.boardid = { 4, PCI173x_BOARDID, 1, }, .boardid = { 4, PCI173x_BOARDID, 1, },
.io_access = IO_8b,
}, },
[TYPE_PCI1735] = { [TYPE_PCI1735] = {
.name = "pci1735", .name = "pci1735",
...@@ -186,7 +178,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -186,7 +178,6 @@ static const struct dio_boardtype boardtypes[] = {
.sdo[0] = { 32, PCI1735_DO, 4, }, .sdo[0] = { 32, PCI1735_DO, 4, },
.boardid = { 4, PCI1735_BOARDID, 1, }, .boardid = { 4, PCI1735_BOARDID, 1, },
.timer_regbase = PCI1735_C8254, .timer_regbase = PCI1735_C8254,
.io_access = IO_8b,
}, },
[TYPE_PCI1736] = { [TYPE_PCI1736] = {
.name = "pci1736", .name = "pci1736",
...@@ -195,14 +186,12 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -195,14 +186,12 @@ static const struct dio_boardtype boardtypes[] = {
.sdi[1] = { 16, PCI1736_IDI, 2, }, .sdi[1] = { 16, PCI1736_IDI, 2, },
.sdo[1] = { 16, PCI1736_IDO, 2, }, .sdo[1] = { 16, PCI1736_IDO, 2, },
.boardid = { 4, PCI1736_BOARDID, 1, }, .boardid = { 4, PCI1736_BOARDID, 1, },
.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, }, .sdio[0] = { 48, PCI1739_DIO, 2, },
.io_access = IO_8b,
}, },
[TYPE_PCI1750] = { [TYPE_PCI1750] = {
.name = "pci1750", .name = "pci1750",
...@@ -210,7 +199,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -210,7 +199,6 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 2, .nsubdevs = 2,
.sdi[1] = { 16, PCI1750_IDI, 2, }, .sdi[1] = { 16, PCI1750_IDI, 2, },
.sdo[1] = { 16, PCI1750_IDO, 2, }, .sdo[1] = { 16, PCI1750_IDO, 2, },
.io_access = IO_8b,
}, },
[TYPE_PCI1751] = { [TYPE_PCI1751] = {
.name = "pci1751", .name = "pci1751",
...@@ -218,7 +206,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -218,7 +206,6 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 3, .nsubdevs = 3,
.sdio[0] = { 48, PCI1751_DIO, 2, }, .sdio[0] = { 48, PCI1751_DIO, 2, },
.timer_regbase = PCI1751_CNT, .timer_regbase = PCI1751_CNT,
.io_access = IO_8b,
}, },
[TYPE_PCI1752] = { [TYPE_PCI1752] = {
.name = "pci1752", .name = "pci1752",
...@@ -227,14 +214,13 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -227,14 +214,13 @@ static const struct dio_boardtype boardtypes[] = {
.sdo[0] = { 32, PCI1752_IDO, 2, }, .sdo[0] = { 32, PCI1752_IDO, 2, },
.sdo[1] = { 32, PCI1752_IDO2, 2, }, .sdo[1] = { 32, PCI1752_IDO2, 2, },
.boardid = { 4, PCI175x_BOARDID, 1, }, .boardid = { 4, PCI175x_BOARDID, 1, },
.io_access = IO_16b, .is_16bit = 1,
}, },
[TYPE_PCI1753] = { [TYPE_PCI1753] = {
.name = "pci1753", .name = "pci1753",
.cardtype = TYPE_PCI1753, .cardtype = TYPE_PCI1753,
.nsubdevs = 4, .nsubdevs = 4,
.sdio[0] = { 96, PCI1753_DIO, 4, }, .sdio[0] = { 96, PCI1753_DIO, 4, },
.io_access = IO_8b,
}, },
[TYPE_PCI1753E] = { [TYPE_PCI1753E] = {
.name = "pci1753e", .name = "pci1753e",
...@@ -242,7 +228,6 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -242,7 +228,6 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 8, .nsubdevs = 8,
.sdio[0] = { 96, PCI1753_DIO, 4, }, .sdio[0] = { 96, PCI1753_DIO, 4, },
.sdio[1] = { 96, PCI1753E_DIO, 4, }, .sdio[1] = { 96, PCI1753E_DIO, 4, },
.io_access = IO_8b,
}, },
[TYPE_PCI1754] = { [TYPE_PCI1754] = {
.name = "pci1754", .name = "pci1754",
...@@ -251,7 +236,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -251,7 +236,7 @@ static const struct dio_boardtype boardtypes[] = {
.sdi[0] = { 32, PCI1754_IDI, 2, }, .sdi[0] = { 32, PCI1754_IDI, 2, },
.sdi[1] = { 32, PCI1754_IDI2, 2, }, .sdi[1] = { 32, PCI1754_IDI2, 2, },
.boardid = { 4, PCI175x_BOARDID, 1, }, .boardid = { 4, PCI175x_BOARDID, 1, },
.io_access = IO_16b, .is_16bit = 1,
}, },
[TYPE_PCI1756] = { [TYPE_PCI1756] = {
.name = "pci1756", .name = "pci1756",
...@@ -260,7 +245,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -260,7 +245,7 @@ static const struct dio_boardtype boardtypes[] = {
.sdi[1] = { 32, PCI1756_IDI, 2, }, .sdi[1] = { 32, PCI1756_IDI, 2, },
.sdo[1] = { 32, PCI1756_IDO, 2, }, .sdo[1] = { 32, PCI1756_IDO, 2, },
.boardid = { 4, PCI175x_BOARDID, 1, }, .boardid = { 4, PCI175x_BOARDID, 1, },
.io_access = IO_16b, .is_16bit = 1,
}, },
[TYPE_PCI1762] = { [TYPE_PCI1762] = {
.name = "pci1762", .name = "pci1762",
...@@ -269,7 +254,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -269,7 +254,7 @@ static const struct dio_boardtype boardtypes[] = {
.sdi[1] = { 16, PCI1762_IDI, 1, }, .sdi[1] = { 16, PCI1762_IDI, 1, },
.sdo[1] = { 16, PCI1762_RO, 1, }, .sdo[1] = { 16, PCI1762_RO, 1, },
.boardid = { 4, PCI1762_BOARDID, 1, }, .boardid = { 4, PCI1762_BOARDID, 1, },
.io_access = IO_16b, .is_16bit = 1,
}, },
}; };
...@@ -509,14 +494,9 @@ static int pci_dio_auto_attach(struct comedi_device *dev, ...@@ -509,14 +494,9 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
s->n_chan = d->chans; s->n_chan = d->chans;
s->maxdata = 1; s->maxdata = 1;
s->range_table = &range_digital; s->range_table = &range_digital;
switch (board->io_access) { s->insn_bits = board->is_16bit
case IO_8b: ? pci_dio_insn_bits_di_w
s->insn_bits = pci_dio_insn_bits_di_b; : pci_dio_insn_bits_di_b;
break;
case IO_16b:
s->insn_bits = pci_dio_insn_bits_di_w;
break;
}
s->private = (void *)d; s->private = (void *)d;
} }
} }
...@@ -530,14 +510,9 @@ static int pci_dio_auto_attach(struct comedi_device *dev, ...@@ -530,14 +510,9 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
s->n_chan = d->chans; s->n_chan = d->chans;
s->maxdata = 1; s->maxdata = 1;
s->range_table = &range_digital; s->range_table = &range_digital;
switch (board->io_access) { s->insn_bits = board->is_16bit
case IO_8b: ? pci_dio_insn_bits_do_w
s->insn_bits = pci_dio_insn_bits_do_b; : pci_dio_insn_bits_do_b;
break;
case IO_16b:
s->insn_bits = pci_dio_insn_bits_do_w;
break;
}
s->private = (void *)d; s->private = (void *)d;
} }
} }
...@@ -561,14 +536,8 @@ static int pci_dio_auto_attach(struct comedi_device *dev, ...@@ -561,14 +536,8 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
s->n_chan = d->chans; s->n_chan = d->chans;
s->maxdata = 1; s->maxdata = 1;
s->range_table = &range_digital; s->range_table = &range_digital;
switch (board->io_access) { s->insn_bits = board->is_16bit ? pci_dio_insn_bits_di_w
case IO_8b: : pci_dio_insn_bits_di_b;
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; s->private = (void *)d;
} }
......
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