upgrade to fedora-2.6.12-1.1398.FC4 + vserver 2.0.rc7
[linux-2.6.git] / drivers / pcmcia / yenta_socket.c
index 4b8b822..6404d97 100644 (file)
@@ -28,6 +28,9 @@
 #include "yenta_socket.h"
 #include "i82365.h"
 
+static int disable_clkrun;
+module_param(disable_clkrun, bool, 0444);
+MODULE_PARM_DESC(disable_clkrun, "If PC card doesn't function properly, please try this option");
 
 #if 0
 #define debug(x,args...) printk(KERN_DEBUG "%s: " x, __func__ , ##args)
 static int yenta_probe_cb_irq(struct yenta_socket *socket);
 
 
+static unsigned int override_bios;
+module_param(override_bios, uint, 0000);
+MODULE_PARM_DESC (override_bios, "yenta ignore bios resource allocation");
+
 /*
  * Generate easy-to-use ways of reading a cardbus sockets
  * regular memory space ("cb_xxx"), configuration space
@@ -499,8 +506,6 @@ static int yenta_sock_suspend(struct pcmcia_socket *sock)
 {
        struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
 
-       yenta_set_socket(sock, &dead_socket);
-
        /* Disable CSC interrupts */
        cb_writel(socket, CB_SOCKET_MASK, 0x0);
 
@@ -551,7 +556,7 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ
 
        start = config_readl(socket, offset) & mask;
        end = config_readl(socket, offset+4) | ~mask;
-       if (start && end > start) {
+       if (start && end > start && !override_bios) {
                res->start = start;
                res->end = end;
                if (request_resource(root, res) == 0)
@@ -914,6 +919,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
 
        /* prepare pcmcia_socket */
        socket->socket.ops = &yenta_socket_operations;
+       socket->socket.resource_ops = &pccard_nonstatic_ops;
        socket->socket.dev.dev = &dev->dev;
        socket->socket.driver_data = socket;
        socket->socket.owner = THIS_MODULE;
@@ -955,7 +961,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
         * the irq stuff...
         */
        printk(KERN_INFO "Yenta: CardBus bridge found at %s [%04x:%04x]\n",
-               dev->slot_name, dev->subsystem_vendor, dev->subsystem_device);
+               pci_name(dev), dev->subsystem_vendor, dev->subsystem_device);
 
        yenta_config_init(socket);
 
@@ -1011,7 +1017,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
 }
 
 
-static int yenta_dev_suspend (struct pci_dev *dev, u32 state)
+static int yenta_dev_suspend (struct pci_dev *dev, pm_message_t state)
 {
        struct yenta_socket *socket = pci_get_drvdata(dev);
        int ret;
@@ -1097,6 +1103,7 @@ static struct pci_device_id yenta_table [] = {
        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_4510, 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),