diff options
Diffstat (limited to 'drivers/pcmcia/yenta_socket.c')
-rw-r--r-- | drivers/pcmcia/yenta_socket.c | 62 |
1 files changed, 29 insertions, 33 deletions
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index ba4d78e5b121..db9f952f9e3c 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) | |||
559 | static int yenta_sock_init(struct pcmcia_socket *sock) | 559 | static 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); |
@@ -819,6 +813,7 @@ enum { | |||
819 | CARDBUS_TYPE_TOPIC95, | 813 | CARDBUS_TYPE_TOPIC95, |
820 | CARDBUS_TYPE_TOPIC97, | 814 | CARDBUS_TYPE_TOPIC97, |
821 | CARDBUS_TYPE_O2MICRO, | 815 | CARDBUS_TYPE_O2MICRO, |
816 | CARDBUS_TYPE_ENE, | ||
822 | }; | 817 | }; |
823 | 818 | ||
824 | /* | 819 | /* |
@@ -865,6 +860,12 @@ static struct cardbus_type cardbus_type[] = { | |||
865 | .override = o2micro_override, | 860 | .override = o2micro_override, |
866 | .restore_state = o2micro_restore_state, | 861 | .restore_state = o2micro_restore_state, |
867 | }, | 862 | }, |
863 | [CARDBUS_TYPE_ENE] = { | ||
864 | .override = ene_override, | ||
865 | .save_state = ti_save_state, | ||
866 | .restore_state = ti_restore_state, | ||
867 | .sock_init = ti_init, | ||
868 | }, | ||
868 | }; | 869 | }; |
869 | 870 | ||
870 | 871 | ||
@@ -883,16 +884,8 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas | |||
883 | { | 884 | { |
884 | int i; | 885 | int i; |
885 | unsigned long val; | 886 | unsigned long val; |
886 | u16 bridge_ctrl; | ||
887 | u32 mask; | 887 | u32 mask; |
888 | 888 | ||
889 | /* Set up ISA irq routing to probe the ISA irqs.. */ | ||
890 | bridge_ctrl = config_readw(socket, CB_BRIDGE_CONTROL); | ||
891 | if (!(bridge_ctrl & CB_BRIDGE_INTR)) { | ||
892 | bridge_ctrl |= CB_BRIDGE_INTR; | ||
893 | config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl); | ||
894 | } | ||
895 | |||
896 | /* | 889 | /* |
897 | * Probe for usable interrupts using the force | 890 | * Probe for usable interrupts using the force |
898 | * register to generate bogus card status events. | 891 | * register to generate bogus card status events. |
@@ -914,9 +907,6 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas | |||
914 | 907 | ||
915 | mask = probe_irq_mask(val) & 0xffff; | 908 | mask = probe_irq_mask(val) & 0xffff; |
916 | 909 | ||
917 | bridge_ctrl &= ~CB_BRIDGE_INTR; | ||
918 | config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl); | ||
919 | |||
920 | return mask; | 910 | return mask; |
921 | } | 911 | } |
922 | 912 | ||
@@ -944,18 +934,11 @@ static irqreturn_t yenta_probe_handler(int irq, void *dev_id, struct pt_regs *re | |||
944 | /* probes the PCI interrupt, use only on override functions */ | 934 | /* probes the PCI interrupt, use only on override functions */ |
945 | static int yenta_probe_cb_irq(struct yenta_socket *socket) | 935 | static int yenta_probe_cb_irq(struct yenta_socket *socket) |
946 | { | 936 | { |
947 | u16 bridge_ctrl; | ||
948 | |||
949 | if (!socket->cb_irq) | 937 | if (!socket->cb_irq) |
950 | return -1; | 938 | return -1; |
951 | 939 | ||
952 | socket->probe_status = 0; | 940 | socket->probe_status = 0; |
953 | 941 | ||
954 | /* disable ISA interrupts */ | ||
955 | bridge_ctrl = config_readw(socket, CB_BRIDGE_CONTROL); | ||
956 | bridge_ctrl &= ~CB_BRIDGE_INTR; | ||
957 | config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl); | ||
958 | |||
959 | 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)) { |
960 | 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"); |
961 | return -1; | 944 | return -1; |
@@ -966,7 +949,7 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket) | |||
966 | cb_writel(socket, CB_SOCKET_EVENT, -1); | 949 | cb_writel(socket, CB_SOCKET_EVENT, -1); |
967 | cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); | 950 | cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); |
968 | cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS); | 951 | cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS); |
969 | 952 | ||
970 | msleep(100); | 953 | msleep(100); |
971 | 954 | ||
972 | /* disable interrupts */ | 955 | /* disable interrupts */ |
@@ -1004,11 +987,12 @@ static void yenta_config_init(struct yenta_socket *socket) | |||
1004 | { | 987 | { |
1005 | u16 bridge; | 988 | u16 bridge; |
1006 | struct pci_dev *dev = socket->dev; | 989 | struct pci_dev *dev = socket->dev; |
990 | struct pci_bus_region region; | ||
1007 | 991 | ||
1008 | pci_set_power_state(socket->dev, 0); | 992 | pcibios_resource_to_bus(socket->dev, ®ion, &dev->resource[0]); |
1009 | 993 | ||
1010 | config_writel(socket, CB_LEGACY_MODE_BASE, 0); | 994 | config_writel(socket, CB_LEGACY_MODE_BASE, 0); |
1011 | config_writel(socket, PCI_BASE_ADDRESS_0, dev->resource[0].start); | 995 | config_writel(socket, PCI_BASE_ADDRESS_0, region.start); |
1012 | config_writew(socket, PCI_COMMAND, | 996 | config_writew(socket, PCI_COMMAND, |
1013 | PCI_COMMAND_IO | | 997 | PCI_COMMAND_IO | |
1014 | PCI_COMMAND_MEMORY | | 998 | PCI_COMMAND_MEMORY | |
@@ -1031,8 +1015,8 @@ static void yenta_config_init(struct yenta_socket *socket) | |||
1031 | * - PCI interrupts enabled if a PCI interrupt exists.. | 1015 | * - PCI interrupts enabled if a PCI interrupt exists.. |
1032 | */ | 1016 | */ |
1033 | bridge = config_readw(socket, CB_BRIDGE_CONTROL); | 1017 | bridge = config_readw(socket, CB_BRIDGE_CONTROL); |
1034 | bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_INTR | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN); | 1018 | bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN); |
1035 | bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN | CB_BRIDGE_INTR; | 1019 | bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN; |
1036 | config_writew(socket, CB_BRIDGE_CONTROL, bridge); | 1020 | config_writew(socket, CB_BRIDGE_CONTROL, bridge); |
1037 | } | 1021 | } |
1038 | 1022 | ||
@@ -1265,10 +1249,22 @@ static struct pci_device_id yenta_table [] = { | |||
1265 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250), | 1249 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250), |
1266 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250), | 1250 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250), |
1267 | 1251 | ||
1268 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, TI12XX), | 1252 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX), |
1269 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, TI12XX), | 1253 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX), |
1270 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, TI1250), | 1254 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX), |
1271 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, TI12XX), | 1255 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX), |
1256 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX), | ||
1257 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX), | ||
1258 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX), | ||
1259 | |||
1260 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_710, TI12XX), | ||
1261 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_712, TI12XX), | ||
1262 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_720, TI12XX), | ||
1263 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_722, TI12XX), | ||
1264 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE), | ||
1265 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE), | ||
1266 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE), | ||
1267 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, ENE), | ||
1272 | 1268 | ||
1273 | CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH), | 1269 | CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH), |
1274 | CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH), | 1270 | CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH), |