From: Andrew Morton Signed-off-by: Andrew Morton --- drivers/serial/serial_cs.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff -puN drivers/serial/serial_txx9.c~git-serial-fixup drivers/serial/serial_txx9.c diff -puN drivers/serial/serial_cs.c~git-serial-fixup drivers/serial/serial_cs.c --- a/drivers/serial/serial_cs.c~git-serial-fixup +++ a/drivers/serial/serial_cs.c @@ -750,13 +750,16 @@ static int serial_config(struct pcmcia_d /* Is this a multiport card? */ info->manfid = link->manf_id; - info->prodid = link->card_id; - for (i = 0; i < MULTI_COUNT; i++) - if ((info->manfid == multi_id[i].manfid) && - (info->prodid == multi_id[i].prodid)) + info->prodid = parse->manfid.card; + + for (i = 0; i < ARRAY_SIZE(quirks); i++) + if ((quirks[i].manfid == ~0 || + quirks[i].manfid == info->manfid) && + (quirks[i].prodid == ~0 || + quirks[i].prodid == info->prodid)) { + info->quirk = &quirks[i]; break; - if (i < MULTI_COUNT) - info->multi = multi_id[i].multi; + } /* Another check for dual-serial cards: look for either serial or multifunction cards that ask for appropriate IO port ranges */ @@ -800,7 +803,6 @@ static int serial_config(struct pcmcia_d kfree(cfg_mem); return 0; - cs_failed: cs_error(link, last_fn, last_ret); failed: serial_remove(link); _