Root/target/linux/brcm47xx/patches-2.6.32/940-bcm47xx-yenta.patch

1--- a/drivers/pcmcia/yenta_socket.c
2+++ b/drivers/pcmcia/yenta_socket.c
3@@ -866,6 +866,8 @@ static unsigned int yenta_probe_irq(stru
4      * Probe for usable interrupts using the force
5      * register to generate bogus card status events.
6      */
7+#ifndef CONFIG_BCM47XX
8+ /* WRT54G3G does not like this */
9     cb_writel(socket, CB_SOCKET_EVENT, -1);
10     cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
11     exca_writeb(socket, I365_CSCINT, 0);
12@@ -880,6 +882,7 @@ static unsigned int yenta_probe_irq(stru
13     }
14     cb_writel(socket, CB_SOCKET_MASK, 0);
15     exca_writeb(socket, I365_CSCINT, 0);
16+#endif
17 
18     mask = probe_irq_mask(val) & 0xffff;
19 
20@@ -960,6 +963,10 @@ static void yenta_get_socket_capabilitie
21     else
22         socket->socket.irq_mask = 0;
23 
24+ /* irq mask probing is broken for the WRT54G3G */
25+ if (socket->socket.irq_mask == 0)
26+ socket->socket.irq_mask = 0x6f8;
27+
28     dev_printk(KERN_INFO, &socket->dev->dev,
29            "ISA IRQ mask 0x%04x, PCI irq %d\n",
30            socket->socket.irq_mask, socket->cb_irq);
31@@ -1198,6 +1205,15 @@ static int __devinit yenta_probe (struct
32     dev_printk(KERN_INFO, &dev->dev,
33            "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
34 
35+ /* Generate an interrupt on card insert/remove */
36+ config_writew(socket, CB_SOCKET_MASK, CB_CSTSMASK | CB_CDMASK);
37+
38+ /* Set up Multifunction Routing Status Register */
39+ config_writew(socket, 0x8C, 0x1000 /* MFUNC3 to GPIO3 */ | 0x2 /* MFUNC0 to INTA */);
40+
41+ /* Switch interrupts to parallelized */
42+ config_writeb(socket, 0x92, 0x64);
43+
44     yenta_fixup_parent_bridge(dev->subordinate);
45 
46     /* Register it with the pcmcia layer.. */
47

Archive Download this file



interactive