>From Ivo van Doorn <[EMAIL PROTECTED]>

Fix suspend and resume handlers,
they should no longer use net_dev->open()
and net_dev->stop() since that delivers the wrong behaviour.

Signed-off-by: Ivo van Doorn <[EMAIL PROTECTED]>

---

diff -rU3 wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
--- wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2400pci.c    
2006-07-25 20:21:44.000000000 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
2006-07-25 23:27:17.000000000 +0200
@@ -2885,15 +2885,9 @@
        NOTICE("Going to sleep.\n");
 
        /*
-        * If radio was enabled, stop radio and
-        * set the resume flag to the radio will be enabled
-        * when resuming.
-        */
-       if (GET_FLAG(rt2x00dev, DEVICE_ENABLED_RADIO)) {
-               if (net_dev->stop(net_dev))
-                       return -EBUSY;
-               SET_FLAG(rt2x00dev, RADIO_RESUME);
-       }
+        * Disable the radio.
+        */
+       rt2400pci_disable_radio(rt2x00dev);
 
        /*
         * Set device mode to sleep for power management.
@@ -2902,11 +2896,16 @@
                return -EBUSY;
 
        /*
-        * Uninitialize hardware.
+        * Uninitialize device.
         */
        rt2400pci_uninitialize(rt2x00dev);
 
        /*
+        * Uninitialize hardware.
+        */
+       rt2400pci_free_dev(net_dev);
+
+       /*
         * Disable PCI.
         */
        pci_save_state(pci_dev);
@@ -2934,28 +2933,15 @@
        /*
         * Initialize hardware.
         */
-       if (rt2400pci_initialize(rt2x00dev)) {
-               ERROR("Failed to initialize device.\n");
+       if (rt2400pci_alloc_dev(pci_dev, net_dev)) {
+               ERROR("Failed to allocate device.\n");
                return -ENOMEM;
        }
 
        /*
-        * Set device mode to awake.
+        * Set device mode to awake for power management.
         */
-       if (rt2400pci_set_state(rt2x00dev, STATE_AWAKE))
-               return -EBUSY;
-
-       /*
-        * Only enable radio when it was enabled
-        * when we suspended.
-        */
-       if (GET_FLAG(rt2x00dev, RADIO_RESUME)) {
-               if (net_dev->open(net_dev))
-                       return -EBUSY;
-               CLEAR_FLAG(rt2x00dev, RADIO_RESUME);
-       }
-
-       return 0;
+       return rt2400pci_set_state(rt2x00dev, STATE_AWAKE);
 }
 #endif /* CONFIG_PM */
 
diff -rU3 wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
--- wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2500pci.c    
2006-07-25 20:21:45.000000000 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
2006-07-25 23:27:54.000000000 +0200
@@ -3156,15 +3156,9 @@
        NOTICE("Going to sleep.\n");
 
        /*
-        * If radio was enabled, stop radio and
-        * set the resume flag to the radio will be enabled
-        * when resuming.
-        */
-       if (GET_FLAG(rt2x00dev, DEVICE_ENABLED_RADIO)) {
-               if (net_dev->stop(net_dev))
-                       return -EBUSY;
-               SET_FLAG(rt2x00dev, RADIO_RESUME);
-       }
+        * Disable the radio.
+        */
+       rt2500pci_disable_radio(rt2x00dev);
 
        /*
         * Set device mode to sleep for power management.
@@ -3173,11 +3167,16 @@
                return -EBUSY;
 
        /*
-        * Uninitialize hardware.
+        * Uninitialize device.
         */
        rt2500pci_uninitialize(rt2x00dev);
 
        /*
+        * Uninitialize hardware.
+        */
+       rt2500pci_free_dev(net_dev);
+
+       /*
         * Disable PCI.
         */
        pci_save_state(pci_dev);
@@ -3205,28 +3204,15 @@
        /*
         * Initialize hardware.
         */
-       if (rt2500pci_initialize(rt2x00dev)) {
-               ERROR("Failed to initialize device.\n");
+       if (rt2500pci_alloc_dev(pci_dev, net_dev)) {
+               ERROR("Failed to allocate device.\n");
                return -ENOMEM;
        }
 
        /*
-        * Set device mode to awake.
+        * Set device mode to awake for power management.
         */
-       if (rt2500pci_set_state(rt2x00dev, STATE_AWAKE))
-               return -EBUSY;
-
-       /*
-        * Only enable radio when it was enabled
-        * when we suspended.
-        */
-       if (GET_FLAG(rt2x00dev, RADIO_RESUME)) {
-               if (net_dev->open(net_dev))
-                       return -EBUSY;
-               CLEAR_FLAG(rt2x00dev, RADIO_RESUME);
-       }
-
-       return 0;
+       return rt2500pci_set_state(rt2x00dev, STATE_AWAKE);
 }
 #endif /* CONFIG_PM */
 
diff -rU3 wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
--- wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2500usb.c    
2006-07-25 20:21:43.000000000 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
2006-07-25 23:28:54.000000000 +0200
@@ -2752,15 +2752,9 @@
        NOTICE("Going to sleep.\n");
 
        /*
-        * If radio was enabled, stop radio and
-        * set the resume flag to the radio will be enabled
-        * when resuming.
-        */
-       if (GET_FLAG(rt2x00dev, DEVICE_ENABLED_RADIO)) {
-               if (net_dev->stop(net_dev))
-                       return -EBUSY;
-               SET_FLAG(rt2x00dev, RADIO_RESUME);
-       }
+        * Disable the radio.
+        */
+       rt2500usb_disable_radio(rt2x00dev);
 
        /*
         * Set device mode to sleep for power management.
@@ -2769,11 +2763,16 @@
                return -EBUSY;
 
        /*
-        * Uninitialize hardware.
+        * Uninitialize device.
         */
        rt2500usb_uninitialize(rt2x00dev);
 
        /*
+        * Uninitialize hardware.
+        */
+       rt2500usb_free_dev(net_dev);
+
+       /*
         * Decrease usbdev refcount.
         */
        usb_put_dev(interface_to_usbdev(usb_intf));
@@ -2796,28 +2795,15 @@
        /*
         * Initialize hardware.
         */
-       if (rt2500usb_initializert2x00dev)) {
-               ERROR("Failed to initialize device.\n");
+       if (rt2500usb_alloc_dev(usb_intf, net_dev)) {
+               ERROR("Failed to allocate device.\n");
                return -ENOMEM;
        }
 
        /*
-        * Set device mode to awake.
+        * Set device mode to awake for power management.
         */
-       if (rt2500usb_set_state(rt2x00dev, STATE_AWAKE))
-               return -EBUSY;
-
-       /*
-        * Only enable radio when it was enabled
-        * when we suspended.
-        */
-       if (GET_FLAG(rt2x00dev, RADIO_RESUME)) {
-               if (net_dev->open(net_dev))
-                       return -EBUSY;
-               CLEAR_FLAG(rt2x00dev, RADIO_RESUME);
-       }
-
-       return 0;
+       return rt2500usb_set_state(rt2x00dev, STATE_AWAKE);
 }
 #endif /* CONFIG_PM */
 
diff -rU3 wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2x00.h 
wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2x00.h
--- wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt2x00.h       
2006-07-25 
10:15:58.000000000 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2x00.h    
2006-07-25 23:31:10.000000000 +0200
@@ -769,7 +769,6 @@
 #define CONFIG_EXTERNAL_LNA_BG         0x00008000
 #define CONFIG_DOUBLE_ANTENNA          0x00010000
 #define CONFIG_DISABLE_BBP_TUNING      0x00020000
-#define RADIO_RESUME                   0x00040000
 
        /*
         * Chipset identification.
diff -rU3 wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt61pci.c
--- wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt61pci.c      
2006-07-25 
20:21:46.000000000 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt61pci.c   
2006-07-25 23:29:39.000000000 +0200
@@ -3733,15 +3733,9 @@
        NOTICE("Going to sleep.\n");
 
        /*
-        * If radio was enabled, stop radio and
-        * set the resume flag to the radio will be enabled
-        * when resuming.
-        */
-       if (GET_FLAG(rt2x00dev, DEVICE_ENABLED_RADIO)) {
-               if (net_dev->stop(net_dev))
-                       return -EBUSY;
-               SET_FLAG(rt2x00dev, RADIO_RESUME);
-       }
+        * Disable the radio.
+        */
+       rt61pci_disable_radio(rt2x00dev);
 
        /*
         * Set device mode to sleep for power management.
@@ -3750,11 +3744,16 @@
                return -EBUSY;
 
        /*
-        * Uninitialize hardware.
+        * Uninitialize device.
         */
        rt61pci_uninitialize(rt2x00dev);
 
        /*
+        * Uninitialize hardware.
+        */
+       rt61pci_free_dev(net_dev);
+
+       /*
         * Disable PCI.
         */
        pci_save_state(pci_dev);
@@ -3782,28 +3781,15 @@
        /*
         * Initialize hardware.
         */
-       if (rt61pci_initialize(rt2x00dev)) {
-               ERROR("Failed to initialize device.\n");
+       if (rt61pci_alloc_dev(pci_dev, net_dev)) {
+               ERROR("Failed to allocate device.\n");
                return -ENOMEM;
        }
 
        /*
-        * Set device mode to awake.
+        * Set device mode to awake for power management.
         */
-       if (rt61pci_set_state(rt2x00dev, STATE_AWAKE))
-               return -EBUSY;
-
-       /*
-        * Only enable radio when it was enabled
-        * when we suspended.
-        */
-       if (GET_FLAG(rt2x00dev, RADIO_RESUME)) {
-               if (net_dev->open(net_dev))
-                       return -EBUSY;
-               CLEAR_FLAG(rt2x00dev, RADIO_RESUME);
-       }
-
-       return 0;
+       return rt61pci_set_state(rt2x00dev, STATE_AWAKE);
 }
 #endif /* CONFIG_PM */
 
diff -rU3 wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt73usb.c 
wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt73usb.c
--- wireless-dev-init/drivers/net/wireless/d80211/rt2x00/rt73usb.c      
2006-07-25 
20:21:44.000000000 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt73usb.c   
2006-07-25 23:30:19.000000000 +0200
@@ -3149,15 +3149,9 @@
        NOTICE("Going to sleep.\n");
 
        /*
-        * If radio was enabled, stop radio and
-        * set the resume flag to the radio will be enabled
-        * when resuming.
-        */
-       if (GET_FLAG(rt2x00dev, DEVICE_ENABLED_RADIO)) {
-               if (net_dev->stop(net_dev))
-                       return -EBUSY;
-               SET_FLAG(rt2x00dev, RADIO_RESUME);
-       }
+        * Disable the radio.
+        */
+       rt73usb_disable_radio(rt2x00dev);
 
        /*
         * Set device mode to sleep for power management.
@@ -3166,9 +3160,14 @@
                return -EBUSY;
 
        /*
+        * Uninitialize device.
+        */
+       rt73usb_uninitialize(rt2x00dev);
+
+       /*
         * Uninitialize hardware.
         */
-       rt73usb_uninitialize(net_dev);
+       rt73usb_free_dev(net_dev);
 
        /*
         * Decrease usbdev refcount.
@@ -3193,28 +3192,15 @@
        /*
         * Initialize hardware.
         */
-       if (rt73usb_initialize(rt2x00dev)) {
-               ERROR("Failed to initialize device.\n");
+       if (rt73usb_alloc_dev(usb_intf, net_dev)) {
+               ERROR("Failed to allocate device.\n");
                return -ENOMEM;
        }
 
        /*
-        * Set device mode to awake.
-        */
-       if (rt73usb_set_state(rt2x00dev, STATE_AWAKE))
-               return -EBUSY;
-
-       /*
-        * Only enable radio when it was enabled
-        * when we suspended.
+        * Set device mode to awake for power management.
         */
-       if (GET_FLAG(rt2x00dev, RADIO_RESUME)) {
-               if (net_dev->open(net_dev))
-                       return -EBUSY;
-               CLEAR_FLAG(rt2x00dev, RADIO_RESUME);
-       }
-
-       return 0;
+       return rt73usb_set_state(rt2x00dev, STATE_AWAKE);
 }
 #endif /* CONFIG_PM */
 
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to