Re: [PATCH 18/24] RT2x00: Make suspend and resume handlers work correctly

2006-07-26 Thread Ivo van Doorn
>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.0 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
2006-07-25 23:27:17.0 +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.0 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
2006-07-25 23:27:54.0 +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.0 +0200
+++ wire

[PATCH 18/24] RT2x00: Make suspend and resume handlers work correctly

2006-07-26 Thread Ivo van Doorn
>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.0 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
2006-07-25 23:27:17.0 +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.0 +0200
+++ wireless-dev-suspend/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
2006-07-25 23:27:54.0 +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.0 +0200
+++