aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/yenta_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia/yenta_socket.c')
-rw-r--r--drivers/pcmcia/yenta_socket.c30
1 files changed, 3 insertions, 27 deletions
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
index fd2a6f892c4..53a02f08580 100644
--- a/drivers/pcmcia/yenta_socket.c
+++ b/drivers/pcmcia/yenta_socket.c
@@ -559,12 +559,6 @@ static void yenta_interrogate(struct yenta_socket *socket)
559static int yenta_sock_init(struct pcmcia_socket *sock) 559static int yenta_sock_init(struct pcmcia_socket *sock)
560{ 560{
561 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket); 561 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
562 u16 bridge;
563
564 bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~CB_BRIDGE_INTR;
565 if (!socket->cb_irq)
566 bridge |= CB_BRIDGE_INTR;
567 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
568 562
569 exca_writeb(socket, I365_GBLCTL, 0x00); 563 exca_writeb(socket, I365_GBLCTL, 0x00);
570 exca_writeb(socket, I365_GENCTL, 0x00); 564 exca_writeb(socket, I365_GENCTL, 0x00);
@@ -890,16 +884,8 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas
890{ 884{
891 int i; 885 int i;
892 unsigned long val; 886 unsigned long val;
893 u16 bridge_ctrl;
894 u32 mask; 887 u32 mask;
895 888
896 /* Set up ISA irq routing to probe the ISA irqs.. */
897 bridge_ctrl = config_readw(socket, CB_BRIDGE_CONTROL);
898 if (!(bridge_ctrl & CB_BRIDGE_INTR)) {
899 bridge_ctrl |= CB_BRIDGE_INTR;
900 config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl);
901 }
902
903 /* 889 /*
904 * Probe for usable interrupts using the force 890 * Probe for usable interrupts using the force
905 * register to generate bogus card status events. 891 * register to generate bogus card status events.
@@ -921,9 +907,6 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas
921 907
922 mask = probe_irq_mask(val) & 0xffff; 908 mask = probe_irq_mask(val) & 0xffff;
923 909
924 bridge_ctrl &= ~CB_BRIDGE_INTR;
925 config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl);
926
927 return mask; 910 return mask;
928} 911}
929 912
@@ -951,18 +934,11 @@ static irqreturn_t yenta_probe_handler(int irq, void *dev_id, struct pt_regs *re
951/* probes the PCI interrupt, use only on override functions */ 934/* probes the PCI interrupt, use only on override functions */
952static int yenta_probe_cb_irq(struct yenta_socket *socket) 935static int yenta_probe_cb_irq(struct yenta_socket *socket)
953{ 936{
954 u16 bridge_ctrl;
955
956 if (!socket->cb_irq) 937 if (!socket->cb_irq)
957 return -1; 938 return -1;
958 939
959 socket->probe_status = 0; 940 socket->probe_status = 0;
960 941
961 /* disable ISA interrupts */
962 bridge_ctrl = config_readw(socket, CB_BRIDGE_CONTROL);
963 bridge_ctrl &= ~CB_BRIDGE_INTR;
964 config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl);
965
966 if (request_irq(socket->cb_irq, yenta_probe_handler, SA_SHIRQ, "yenta", socket)) { 942 if (request_irq(socket->cb_irq, yenta_probe_handler, SA_SHIRQ, "yenta", socket)) {
967 printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n"); 943 printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n");
968 return -1; 944 return -1;
@@ -973,7 +949,7 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket)
973 cb_writel(socket, CB_SOCKET_EVENT, -1); 949 cb_writel(socket, CB_SOCKET_EVENT, -1);
974 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); 950 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
975 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS); 951 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
976 952
977 msleep(100); 953 msleep(100);
978 954
979 /* disable interrupts */ 955 /* disable interrupts */
@@ -1038,8 +1014,8 @@ static void yenta_config_init(struct yenta_socket *socket)
1038 * - PCI interrupts enabled if a PCI interrupt exists.. 1014 * - PCI interrupts enabled if a PCI interrupt exists..
1039 */ 1015 */
1040 bridge = config_readw(socket, CB_BRIDGE_CONTROL); 1016 bridge = config_readw(socket, CB_BRIDGE_CONTROL);
1041 bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_INTR | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN); 1017 bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
1042 bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN | CB_BRIDGE_INTR; 1018 bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
1043 config_writew(socket, CB_BRIDGE_CONTROL, bridge); 1019 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
1044} 1020}
1045 1021