Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38205
b: refs/heads/master
c: 1fbbac4
h: refs/heads/master
i:
  38203: 614c170
v: v3
  • Loading branch information
Russell King authored and Russell King committed Oct 1, 2006
1 parent 4c893fb commit 02249f6
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 43549ad7a74e33947f3ba1756a7713086d32e97c
refs/heads/master: 1fbbac4bcb03033d325c71fc7273aa0b9c1d9a03
55 changes: 42 additions & 13 deletions trunk/drivers/serial/serial_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,20 +80,42 @@ module_param(buggy_uart, int, 0444);

/* Table of multi-port card ID's */

struct multi_id {
struct serial_quirk {
u_short manfid;
u_short prodid;
int multi; /* 1 = multifunction, > 1 = # ports */
};

static const struct multi_id multi_id[] = {
{ MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 },
{ MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 },
{ MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 },
{ MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 },
{ MANFID_SOCKET, PRODID_SOCKET_DUAL_RS232, 2 },
{ MANFID_INTEL, PRODID_INTEL_DUAL_RS232, 2 },
{ MANFID_NATINST, PRODID_NATINST_QUAD_RS232, 4 }
static const struct serial_quirk quirks[] = {
{
.manfid = MANFID_OMEGA,
.prodid = PRODID_OMEGA_QSP_100,
.multi = 4,
}, {
.manfid = MANFID_QUATECH,
.prodid = PRODID_QUATECH_DUAL_RS232,
.multi = 2,
}, {
.manfid = MANFID_QUATECH,
.prodid = PRODID_QUATECH_DUAL_RS232_D1,
.multi = 2,
}, {
.manfid = MANFID_QUATECH,
.prodid = PRODID_QUATECH_QUAD_RS232,
.multi = 4,
}, {
.manfid = MANFID_SOCKET,
.prodid = PRODID_SOCKET_DUAL_RS232,
.multi = 2,
}, {
.manfid = MANFID_INTEL,
.prodid = PRODID_INTEL_DUAL_RS232,
.multi = 2,
}, {
.manfid = MANFID_NATINST,
.prodid = PRODID_NATINST_QUAD_RS232,
.multi = 4,
}
};

struct serial_info {
Expand All @@ -106,6 +128,7 @@ struct serial_info {
int c950ctrl;
dev_node_t node[4];
int line[4];
const struct serial_quirk *quirk;
};

struct serial_cfg_mem {
Expand Down Expand Up @@ -622,10 +645,10 @@ static int serial_config(struct pcmcia_device * link)
if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
info->manfid = parse->manfid.manf;
info->prodid = parse->manfid.card;
for (i = 0; i < ARRAY_SIZE(multi_id); i++)
if ((info->manfid == multi_id[i].manfid) &&
(info->prodid == multi_id[i].prodid)) {
info->multi = multi_id[i].multi;
for (i = 0; i < ARRAY_SIZE(quirks); i++)
if ((info->manfid == quirks[i].manfid) &&
(info->prodid == quirks[i].prodid)) {
info->quirk = &quirks[i];
break;
}
}
Expand All @@ -647,6 +670,12 @@ static int serial_config(struct pcmcia_device * link)
}
}

/*
* Apply any multi-port quirk.
*/
if (info->quirk && info->quirk->multi != -1)
info->multi = info->quirk->multi;

if (info->multi > 1)
multi_config(link);
else
Expand Down

0 comments on commit 02249f6

Please sign in to comment.