]> err.no Git - linux-2.6/blobdiff - drivers/net/wireless/prism54/islpci_hotplug.c
Merge branch 'for-linus' of git://www.jni.nu/cris
[linux-2.6] / drivers / net / wireless / prism54 / islpci_hotplug.c
index f6354b1cbc28605ea9861bf19a535a38301873aa..af2e4f2405f2577ae0f047d37827c6eb532054f8 100644 (file)
@@ -28,9 +28,6 @@
 #include "islpci_mgt.h"                /* for pc_debug */
 #include "isl_oid.h"
 
-#define DRV_NAME       "prism54"
-#define DRV_VERSION    "1.2"
-
 MODULE_AUTHOR("[Intersil] R.Bastings and W.Termorshuizen, The prism54.org Development Team <prism54-devel@prism54.org>");
 MODULE_DESCRIPTION("The Prism54 802.11 Wireless LAN adapter");
 MODULE_LICENSE("GPL");
@@ -90,7 +87,6 @@ static struct pci_driver prism54_driver = {
        .remove = prism54_remove,
        .suspend = prism54_suspend,
        .resume = prism54_resume,
-       /* .enable_wake ; we don't support this yet */
 };
 
 /******************************************************************************
@@ -170,14 +166,14 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        pci_set_master(pdev);
 
        /* enable MWI */
-       pci_set_mwi(pdev);
+       pci_try_set_mwi(pdev);
 
        /* setup the network device interface and its structure */
        if (!(ndev = islpci_setup(pdev))) {
                /* error configuring the driver as a network device */
                printk(KERN_ERR "%s: could not configure network device\n",
                       DRV_NAME);
-               goto do_pci_release_regions;
+               goto do_pci_clear_mwi;
        }
 
        priv = netdev_priv(ndev);
@@ -207,6 +203,8 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        pci_set_drvdata(pdev, NULL);
        free_netdev(ndev);
        priv = NULL;
+      do_pci_clear_mwi:
+       pci_clear_mwi(pdev);
       do_pci_release_regions:
        pci_release_regions(pdev);
       do_pci_disable_device:
@@ -254,6 +252,8 @@ prism54_remove(struct pci_dev *pdev)
        free_netdev(ndev);
        priv = NULL;
 
+       pci_clear_mwi(pdev);
+
        pci_release_regions(pdev);
 
        pci_disable_device(pdev);
@@ -287,12 +287,19 @@ prism54_resume(struct pci_dev *pdev)
 {
        struct net_device *ndev = pci_get_drvdata(pdev);
        islpci_private *priv = ndev ? netdev_priv(ndev) : NULL;
-       BUG_ON(!priv);
+       int err;
 
-       pci_enable_device(pdev);
+       BUG_ON(!priv);
 
        printk(KERN_NOTICE "%s: got resume request\n", ndev->name);
 
+       err = pci_enable_device(pdev);
+       if (err) {
+               printk(KERN_ERR "%s: pci_enable_device failed on resume\n",
+                      ndev->name);
+               return err;
+       }
+
        pci_restore_state(pdev);
 
        /* alright let's go into the PREBOOT state */