vserver 1.9.3
[linux-2.6.git] / drivers / pcmcia / yenta_socket.c
index b0d716e..d6974a1 100644 (file)
@@ -343,14 +343,17 @@ static int yenta_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io
 static int yenta_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *mem)
 {
        struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
+       struct pci_bus_region region;
        int map;
        unsigned char addr, enable;
        unsigned int start, stop, card_start;
        unsigned short word;
 
+       pcibios_resource_to_bus(socket->dev, &region, mem->res);
+
        map = mem->map;
-       start = mem->sys_start;
-       stop = mem->sys_stop;
+       start = region.start;
+       stop = region.end;
        card_start = mem->card_start;
 
        if (map > 4 || start > stop || ((start ^ stop) >> 24) ||
@@ -445,10 +448,10 @@ static void yenta_interrupt_wrapper(unsigned long data)
 static void yenta_clear_maps(struct yenta_socket *socket)
 {
        int i;
+       struct resource res = { .start = 0, .end = 0x0fff };
        pccard_io_map io = { 0, 0, 0, 0, 1 };
-       pccard_mem_map mem = { 0, 0, 0, 0, 0, 0 };
+       pccard_mem_map mem = { .res = &res, };
 
-       mem.sys_stop = 0x0fff;
        yenta_set_socket(&socket->socket, &dead_socket);
        for (i = 0; i < 2; i++) {
                io.map = i;
@@ -668,6 +671,7 @@ static struct pccard_operations yenta_socket_operations = {
 #include "ti113x.h"
 #include "ricoh.h"
 #include "topic.h"
+#include "o2micro.h"
 
 enum {
        CARDBUS_TYPE_DEFAULT = -1,
@@ -676,7 +680,8 @@ enum {
        CARDBUS_TYPE_TI12XX,
        CARDBUS_TYPE_TI1250,
        CARDBUS_TYPE_RICOH,
-       CARDBUS_TYPE_TOPIC97
+       CARDBUS_TYPE_TOPIC97,
+       CARDBUS_TYPE_O2MICRO,
 };
 
 /*
@@ -716,6 +721,10 @@ struct cardbus_type cardbus_type[] = {
        [CARDBUS_TYPE_TOPIC97]  = {
                .override       = topic97_override,
        },
+       [CARDBUS_TYPE_O2MICRO]  = {
+               .override       = o2micro_override,
+               .restore_state  = o2micro_restore_state,
+       },
 };
 
 
@@ -1078,9 +1087,11 @@ static struct pci_device_id yenta_table [] = {
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1451A, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1510, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520, TI12XX),
+       CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1620, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4410, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4450, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4451, TI12XX),
+       CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4520, TI12XX),
 
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
@@ -1099,6 +1110,8 @@ static struct pci_device_id yenta_table [] = {
        CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC97, TOPIC97),
        CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC100, TOPIC97),
 
+       CB_ID(PCI_VENDOR_ID_O2, PCI_ANY_ID, O2MICRO),
+
        /* match any cardbus bridge */
        CB_ID(PCI_ANY_ID, PCI_ANY_ID, DEFAULT),
        { /* all zeroes */ }