Commit 20f13049 authored by Russell King's avatar Russell King Committed by Russell King

[SERIAL] serial_cs: handle Nokia multi->single port bodge via config quirk

According to the existing code, Nokia only make single-port cards,
but are detected as multi-port cards.  Handle this in roughly the
same way via the config quirk - forcing it to be a real single port
card (info->multi=0) changes the way we allocate the IO memory,
which might stop the card working.
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent efd92dfa
...@@ -132,6 +132,18 @@ static int quirk_post_ibm(struct pcmcia_device *link) ...@@ -132,6 +132,18 @@ static int quirk_post_ibm(struct pcmcia_device *link)
return -ENODEV; return -ENODEV;
} }
/*
* Nokia cards are not really multiport cards. Shouldn't this
* be handled by setting the quirk entry .multi = 0 | 1 ?
*/
static void quirk_config_nokia(struct pcmcia_device *link)
{
struct serial_info *info = link->priv;
if (info->multi > 1)
info->multi = 1;
}
static void quirk_wakeup_oxsemi(struct pcmcia_device *link) static void quirk_wakeup_oxsemi(struct pcmcia_device *link)
{ {
struct serial_info *info = link->priv; struct serial_info *info = link->priv;
...@@ -192,6 +204,11 @@ static const struct serial_quirk quirks[] = { ...@@ -192,6 +204,11 @@ static const struct serial_quirk quirks[] = {
.manfid = MANFID_NATINST, .manfid = MANFID_NATINST,
.prodid = PRODID_NATINST_QUAD_RS232, .prodid = PRODID_NATINST_QUAD_RS232,
.multi = 4, .multi = 4,
}, {
.manfid = MANFID_NOKIA,
.prodid = ~0,
.multi = -1,
.config = quirk_config_nokia,
}, { }, {
.manfid = MANFID_OMEGA, .manfid = MANFID_OMEGA,
.prodid = PRODID_OMEGA_QSP_100, .prodid = PRODID_OMEGA_QSP_100,
...@@ -663,11 +680,6 @@ static int multi_config(struct pcmcia_device * link) ...@@ -663,11 +680,6 @@ static int multi_config(struct pcmcia_device * link)
} }
setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
/* The Nokia cards are not really multiport cards */
if (info->manfid == MANFID_NOKIA) {
rc = 0;
goto free_cfg_mem;
}
for (i = 0; i < info->multi - 1; i++) for (i = 0; i < info->multi - 1; i++)
setup_serial(link, info, base2 + (8 * i), setup_serial(link, info, base2 + (8 * i),
link->irq.AssignedIRQ); link->irq.AssignedIRQ);
......
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