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

staging: comedi: adv_pci_dio: simplify the 'boardid' boardinfo

The "board id" register is always 4-bits (4 di channels) and the register
used to read the bits is always > 0.

Simplify the 'boardid' boardinfo by replacing it with a 'id_reg' member
and open-coding the subdevice n_chan.

For aesthetics, remove all the *_BOARDID defines and just open-code the
register values in the boardinfo.

Add the missing boardinfo for the pci1739 board id register and increase
the nsubdevs to handle 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 66f516e6
...@@ -60,13 +60,11 @@ enum hw_cards_id { ...@@ -60,13 +60,11 @@ enum hw_cards_id {
* interrupts */ * interrupts */
#define PCI1730_3_INT_CLR 0x10 /* R/W: clear interrupts */ #define PCI1730_3_INT_CLR 0x10 /* R/W: clear interrupts */
#define PCI1734_IDO 0 /* W: Isolated digital output 0-31 */ #define PCI1734_IDO 0 /* W: Isolated digital output 0-31 */
#define PCI173x_BOARDID 4 /* R: Board I/D switch for 1730/3/4 */
/* Advantech PCI-1735U */ /* Advantech PCI-1735U */
#define PCI1735_DI 0 /* R: Digital input 0-31 */ #define PCI1735_DI 0 /* R: Digital input 0-31 */
#define PCI1735_DO 0 /* W: Digital output 0-31 */ #define PCI1735_DO 0 /* W: Digital output 0-31 */
#define PCI1735_C8254 4 /* R/W: 8254 counter */ #define PCI1735_C8254 4 /* R/W: 8254 counter */
#define PCI1735_BOARDID 8 /* R: Board I/D switch for 1735U */
/* Advantech PCI-1736UP */ /* Advantech PCI-1736UP */
#define PCI1736_IDI 0 /* R: Isolated digital input 0-15 */ #define PCI1736_IDI 0 /* R: Isolated digital input 0-15 */
...@@ -75,13 +73,11 @@ enum hw_cards_id { ...@@ -75,13 +73,11 @@ enum hw_cards_id {
#define PCI1736_3_INT_RF 0x0c /* R/W: set falling/raising edge for #define PCI1736_3_INT_RF 0x0c /* R/W: set falling/raising edge for
* interrupts */ * interrupts */
#define PCI1736_3_INT_CLR 0x10 /* R/W: clear interrupts */ #define PCI1736_3_INT_CLR 0x10 /* R/W: clear interrupts */
#define PCI1736_BOARDID 4 /* R: Board I/D switch for 1736UP */
/* Advantech PCI-1739U */ /* Advantech PCI-1739U */
#define PCI1739_DIO 0 /* R/W: begin of 8255 registers block */ #define PCI1739_DIO 0 /* R/W: begin of 8255 registers block */
#define PCI1739_ICR 32 /* W: Interrupt control register */ #define PCI1739_ICR 32 /* W: Interrupt control register */
#define PCI1739_ISR 32 /* R: Interrupt status register */ #define PCI1739_ISR 32 /* R: Interrupt status register */
#define PCI1739_BOARDID 8 /* R: Board I/D switch for 1739U */
/* Advantech PCI-1750 */ /* Advantech PCI-1750 */
#define PCI1750_IDI 0 /* R: Isolated digital input 0-15 */ #define PCI1750_IDI 0 /* R: Isolated digital input 0-15 */
...@@ -117,12 +113,10 @@ enum hw_cards_id { ...@@ -117,12 +113,10 @@ enum hw_cards_id {
#define PCI1754_ICR2 0x0c /* R/W: Interrupt control register group 2 */ #define PCI1754_ICR2 0x0c /* R/W: Interrupt control register group 2 */
#define PCI1754_ICR3 0x0e /* R/W: Interrupt control register group 3 */ #define PCI1754_ICR3 0x0e /* R/W: Interrupt control register group 3 */
#define PCI1752_6_CFC 0x12 /* R/W: set/read channel freeze function */ #define PCI1752_6_CFC 0x12 /* R/W: set/read channel freeze function */
#define PCI175x_BOARDID 0x10 /* R: Board I/D switch for 1752/4/6 */
/* Advantech PCI-1762 registers */ /* Advantech PCI-1762 registers */
#define PCI1762_RO 0 /* R/W: Relays status/output */ #define PCI1762_RO 0 /* R/W: Relays status/output */
#define PCI1762_IDI 2 /* R: Isolated input status */ #define PCI1762_IDI 2 /* R: Isolated input status */
#define PCI1762_BOARDID 4 /* R: Board I/D switch */
#define PCI1762_ICR 6 /* W: Interrupt control register */ #define PCI1762_ICR 6 /* W: Interrupt control register */
#define PCI1762_ISR 6 /* R: Interrupt status register */ #define PCI1762_ISR 6 /* R: Interrupt status register */
...@@ -138,7 +132,7 @@ struct dio_boardtype { ...@@ -138,7 +132,7 @@ struct dio_boardtype {
struct diosubd_data sdi[MAX_DI_SUBDEVS]; /* DI chans */ struct diosubd_data sdi[MAX_DI_SUBDEVS]; /* DI chans */
struct diosubd_data sdo[MAX_DO_SUBDEVS]; /* DO chans */ struct diosubd_data sdo[MAX_DO_SUBDEVS]; /* DO chans */
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 */ unsigned long id_reg;
unsigned long timer_regbase; unsigned long timer_regbase;
unsigned int is_16bit:1; unsigned int is_16bit:1;
}; };
...@@ -152,21 +146,21 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -152,21 +146,21 @@ static const struct dio_boardtype boardtypes[] = {
.sdi[1] = { 16, PCI1730_IDI, }, .sdi[1] = { 16, PCI1730_IDI, },
.sdo[0] = { 16, PCI1730_DO, }, .sdo[0] = { 16, PCI1730_DO, },
.sdo[1] = { 16, PCI1730_IDO, }, .sdo[1] = { 16, PCI1730_IDO, },
.boardid = { 4, PCI173x_BOARDID, }, .id_reg = 0x04,
}, },
[TYPE_PCI1733] = { [TYPE_PCI1733] = {
.name = "pci1733", .name = "pci1733",
.cardtype = TYPE_PCI1733, .cardtype = TYPE_PCI1733,
.nsubdevs = 2, .nsubdevs = 2,
.sdi[1] = { 32, PCI1733_IDI, }, .sdi[1] = { 32, PCI1733_IDI, },
.boardid = { 4, PCI173x_BOARDID, }, .id_reg = 0x04,
}, },
[TYPE_PCI1734] = { [TYPE_PCI1734] = {
.name = "pci1734", .name = "pci1734",
.cardtype = TYPE_PCI1734, .cardtype = TYPE_PCI1734,
.nsubdevs = 2, .nsubdevs = 2,
.sdo[1] = { 32, PCI1734_IDO, }, .sdo[1] = { 32, PCI1734_IDO, },
.boardid = { 4, PCI173x_BOARDID, }, .id_reg = 0x04,
}, },
[TYPE_PCI1735] = { [TYPE_PCI1735] = {
.name = "pci1735", .name = "pci1735",
...@@ -174,7 +168,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -174,7 +168,7 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 4, .nsubdevs = 4,
.sdi[0] = { 32, PCI1735_DI, }, .sdi[0] = { 32, PCI1735_DI, },
.sdo[0] = { 32, PCI1735_DO, }, .sdo[0] = { 32, PCI1735_DO, },
.boardid = { 4, PCI1735_BOARDID, }, .id_reg = 0x08,
.timer_regbase = PCI1735_C8254, .timer_regbase = PCI1735_C8254,
}, },
[TYPE_PCI1736] = { [TYPE_PCI1736] = {
...@@ -183,13 +177,14 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -183,13 +177,14 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 3, .nsubdevs = 3,
.sdi[1] = { 16, PCI1736_IDI, }, .sdi[1] = { 16, PCI1736_IDI, },
.sdo[1] = { 16, PCI1736_IDO, }, .sdo[1] = { 16, PCI1736_IDO, },
.boardid = { 4, PCI1736_BOARDID, }, .id_reg = 0x04,
}, },
[TYPE_PCI1739] = { [TYPE_PCI1739] = {
.name = "pci1739", .name = "pci1739",
.cardtype = TYPE_PCI1739, .cardtype = TYPE_PCI1739,
.nsubdevs = 2, .nsubdevs = 3,
.sdio[0] = { 2, PCI1739_DIO, }, .sdio[0] = { 2, PCI1739_DIO, },
.id_reg = 0x08,
}, },
[TYPE_PCI1750] = { [TYPE_PCI1750] = {
.name = "pci1750", .name = "pci1750",
...@@ -211,7 +206,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -211,7 +206,7 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 3, .nsubdevs = 3,
.sdo[0] = { 32, PCI1752_IDO, }, .sdo[0] = { 32, PCI1752_IDO, },
.sdo[1] = { 32, PCI1752_IDO2, }, .sdo[1] = { 32, PCI1752_IDO2, },
.boardid = { 4, PCI175x_BOARDID, }, .id_reg = 0x10,
.is_16bit = 1, .is_16bit = 1,
}, },
[TYPE_PCI1753] = { [TYPE_PCI1753] = {
...@@ -233,7 +228,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -233,7 +228,7 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 3, .nsubdevs = 3,
.sdi[0] = { 32, PCI1754_IDI, }, .sdi[0] = { 32, PCI1754_IDI, },
.sdi[1] = { 32, PCI1754_IDI2, }, .sdi[1] = { 32, PCI1754_IDI2, },
.boardid = { 4, PCI175x_BOARDID, }, .id_reg = 0x10,
.is_16bit = 1, .is_16bit = 1,
}, },
[TYPE_PCI1756] = { [TYPE_PCI1756] = {
...@@ -242,7 +237,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -242,7 +237,7 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 3, .nsubdevs = 3,
.sdi[1] = { 32, PCI1756_IDI, }, .sdi[1] = { 32, PCI1756_IDI, },
.sdo[1] = { 32, PCI1756_IDO, }, .sdo[1] = { 32, PCI1756_IDO, },
.boardid = { 4, PCI175x_BOARDID, }, .id_reg = 0x10,
.is_16bit = 1, .is_16bit = 1,
}, },
[TYPE_PCI1762] = { [TYPE_PCI1762] = {
...@@ -251,7 +246,7 @@ static const struct dio_boardtype boardtypes[] = { ...@@ -251,7 +246,7 @@ static const struct dio_boardtype boardtypes[] = {
.nsubdevs = 3, .nsubdevs = 3,
.sdi[1] = { 16, PCI1762_IDI, }, .sdi[1] = { 16, PCI1762_IDI, },
.sdo[1] = { 16, PCI1762_RO, }, .sdo[1] = { 16, PCI1762_RO, },
.boardid = { 4, PCI1762_BOARDID, }, .id_reg = 0x04,
.is_16bit = 1, .is_16bit = 1,
}, },
}; };
...@@ -536,17 +531,16 @@ static int pci_dio_auto_attach(struct comedi_device *dev, ...@@ -536,17 +531,16 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
} }
} }
d = &board->boardid; if (board->id_reg) {
if (d->chans) {
s = &dev->subdevices[subdev++]; s = &dev->subdevices[subdev++];
s->type = COMEDI_SUBD_DI; s->type = COMEDI_SUBD_DI;
s->subdev_flags = SDF_READABLE | SDF_INTERNAL; s->subdev_flags = SDF_READABLE | SDF_INTERNAL;
s->n_chan = d->chans; s->n_chan = 4;
s->maxdata = 1; s->maxdata = 1;
s->range_table = &range_digital; s->range_table = &range_digital;
s->insn_bits = board->is_16bit ? pci_dio_insn_bits_di_w s->insn_bits = board->is_16bit ? pci_dio_insn_bits_di_w
: pci_dio_insn_bits_di_b; : pci_dio_insn_bits_di_b;
s->private = (void *)d->addr; s->private = (void *)board->id_reg;
} }
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