From: Ivo van Doorn <ivdoorn@gmail.com>
To: netdev@vger.kernel.org
Cc: linville@tuxdriver.com
Subject: [PATCH 18/24] RT2x00: Make suspend and resume handlers work correctly
Date: Wed, 26 Jul 2006 19:05:43 +0200 [thread overview]
Message-ID: <200607261905.43426.IvDoorn@gmail.com> (raw)
>From Ivo van Doorn <IvDoorn@gmail.com>
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 <IvDoorn@gmail.com>
---
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 */
next reply other threads:[~2006-07-26 17:07 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-26 17:05 Ivo van Doorn [this message]
2006-07-26 18:29 ` [PATCH 18/24] RT2x00: Make suspend and resume handlers work correctly Ivo van Doorn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200607261905.43426.IvDoorn@gmail.com \
--to=ivdoorn@gmail.com \
--cc=linville@tuxdriver.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).