Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -132,6 +132,18 @@ static int quirk_post_ibm(struct pcmcia_device *link)
	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)
{
	struct serial_info *info = link->priv;
@@ -192,6 +204,11 @@ static const struct serial_quirk quirks[] = {
		.manfid	= MANFID_NATINST,
		.prodid	= PRODID_NATINST_QUAD_RS232,
		.multi	= 4,
	}, {
		.manfid	= MANFID_NOKIA,
		.prodid	= ~0,
		.multi	= -1,
		.config	= quirk_config_nokia,
	}, {
		.manfid	= MANFID_OMEGA,
		.prodid	= PRODID_OMEGA_QSP_100,
@@ -663,11 +680,6 @@ static int multi_config(struct pcmcia_device * link)
	}

	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++)
		setup_serial(link, info, base2 + (8 * i),
				link->irq.AssignedIRQ);