Re: [PATCH 18/24] RT2x00: Make suspend and resume handlers work correctly
>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
>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 +++