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), |
