[SERIAL] serial_cs: convert multi-port table to quirk table

- rename multi_id table to serial_quirk / quirks[]
- use named initialisers
- store a pointer to the quirk table in the serial_info structure
  so we can use the quirk table entry later.
- apply multi-port quirk after the multi-port guessing code,
  but only if it's != -1.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
index 82bb603..2e3a39d 100644
--- a/drivers/serial/serial_cs.c
+++ b/drivers/serial/serial_cs.c
@@ -80,20 +80,42 @@
 
 /* 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 {
@@ -106,6 +128,7 @@
 	int			c950ctrl;
 	dev_node_t		node[4];
 	int			line[4];
+	const struct serial_quirk *quirk;
 };
 
 struct serial_cfg_mem {
@@ -622,10 +645,10 @@
 	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;
 			}
 	}
@@ -647,6 +670,12 @@
 		}
 	}
 
+	/*
+	 * 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