Root/
Source at commit 9fe2a2d created 13 years 8 months ago. By hauke, brcm47xx: prepare brcm47xx patches for sending to mainline. | |
---|---|
1 | --- a/drivers/pcmcia/yenta_socket.c |
2 | +++ b/drivers/pcmcia/yenta_socket.c |
3 | @@ -924,6 +924,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 | reg = exca_readb(socket, I365_CSCINT); |
12 | @@ -939,6 +941,7 @@ static unsigned int yenta_probe_irq(stru |
13 | } |
14 | cb_writel(socket, CB_SOCKET_MASK, 0); |
15 | exca_writeb(socket, I365_CSCINT, reg); |
16 | +#endif |
17 | |
18 | mask = probe_irq_mask(val) & 0xffff; |
19 | |
20 | @@ -1023,6 +1026,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 | @@ -1261,6 +1268,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 |