pcmcia: only keep saved I365_CSCINT flag if there is no PCI irq

Keeping the saved I365_CSCINT flag around breaks PCMCIA on some system,
and is only needed on a few systems to get PCMCIA to work. This patch
allows PCMCIA to work on both types, and it fixes
https://bugzilla.kernel.org/show_bug.cgi?id=16015

Reported-by: Justin P. Mattock <justinmattock@gmail.com>
CC: <stable@kernel.org>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
Dominik Brodowski 2010-05-21 15:16:53 +02:00
parent e44a21b726
commit 02caa56e4b

View File

@ -975,7 +975,7 @@ static irqreturn_t yenta_probe_handler(int irq, void *dev_id)
/* probes the PCI interrupt, use only on override functions */ /* probes the PCI interrupt, use only on override functions */
static int yenta_probe_cb_irq(struct yenta_socket *socket) static int yenta_probe_cb_irq(struct yenta_socket *socket)
{ {
u8 reg; u8 reg = 0;
if (!socket->cb_irq) if (!socket->cb_irq)
return -1; return -1;
@ -989,7 +989,8 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket)
} }
/* generate interrupt, wait */ /* generate interrupt, wait */
reg = exca_readb(socket, I365_CSCINT); if (!socket->dev->irq)
reg = exca_readb(socket, I365_CSCINT);
exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG); exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);
cb_writel(socket, CB_SOCKET_EVENT, -1); cb_writel(socket, CB_SOCKET_EVENT, -1);
cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);