summaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-03-27 23:54:12 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-03-27 23:54:12 +0000
commitd3e71cb08747743fce908122bab08b479eb403a5 (patch)
treecbec6948fdbdee9af81cf3ecfb504070d2745d7b /drivers/pcmcia
parentfe7ff1706e323d0e5ed83972960a1ecc1ee538b3 (diff)
Merge with Linux 2.3.99-pre3.
Diffstat (limited to 'drivers/pcmcia')
-rw-r--r--drivers/pcmcia/ti113x.h26
-rw-r--r--drivers/pcmcia/yenta.c19
2 files changed, 21 insertions, 24 deletions
diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h
index 16c881f7d..e47662901 100644
--- a/drivers/pcmcia/ti113x.h
+++ b/drivers/pcmcia/ti113x.h
@@ -137,16 +137,32 @@
#ifdef CONFIG_CARDBUS
/*
- * Generic TI open - TI has an extension for the
+ * Generic TI init - TI has an extension for the
* INTCTL register that sets the PCI CSC interrupt.
* Make sure we set it correctly at open and init
- * time.
+ * time
+ * - open: disable the PCI CSC interrupt. This makes
+ * it possible to use the CSC interrupt to probe the
+ * ISA interrupts.
+ * - init: set the interrupt to match our PCI state.
+ * This makes us correctly get PCI CSC interrupt
+ * events.
*/
static int ti_open(pci_socket_t *socket)
{
u8 new, reg = exca_readb(socket, I365_INTCTL);
new = reg & ~I365_INTR_ENA;
+ if (new != reg)
+ exca_writeb(socket, I365_INTCTL, new);
+ return 0;
+}
+
+static int ti_intctl(pci_socket_t *socket)
+{
+ u8 new, reg = exca_readb(socket, I365_INTCTL);
+
+ new = reg & ~I365_INTR_ENA;
if (socket->cb_irq)
new |= I365_INTR_ENA;
if (new != reg)
@@ -157,7 +173,7 @@ static int ti_open(pci_socket_t *socket)
static int ti_init(pci_socket_t *socket)
{
yenta_init(socket);
- ti_open(socket);
+ ti_intctl(socket);
return 0;
}
@@ -200,7 +216,7 @@ static int ti113x_init(pci_socket_t *socket)
config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket));
config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket));
config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket));
- ti_open(socket);
+ ti_intctl(socket);
return 0;
}
@@ -237,7 +253,7 @@ static int ti1250_init(pci_socket_t *socket)
yenta_init(socket);
config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket));
- ti_open(socket);
+ ti_intctl(socket);
return 0;
}
diff --git a/drivers/pcmcia/yenta.c b/drivers/pcmcia/yenta.c
index a8b311780..294895733 100644
--- a/drivers/pcmcia/yenta.c
+++ b/drivers/pcmcia/yenta.c
@@ -851,22 +851,3 @@ struct pci_socket_ops yenta_operations = {
yenta_proc_setup
};
EXPORT_SYMBOL(yenta_operations);
-
-/*
- * Ricoh cardbus bridge: standard cardbus, except it needs
- * some extra init code to set timings etc.
- */
-struct pci_socket_ops ricoh_operations = {
- yenta_open,
- yenta_close,
- ricoh_init,
- yenta_suspend,
- yenta_get_status,
- yenta_get_socket,
- yenta_set_socket,
- yenta_get_io_map,
- yenta_set_io_map,
- yenta_get_mem_map,
- yenta_set_mem_map,
- yenta_proc_setup
-};