diff options
Diffstat (limited to 'package/mac80211/patches/302-rt2x00-Don-t-free-register-information-on-suspend.patch')
-rw-r--r-- | package/mac80211/patches/302-rt2x00-Don-t-free-register-information-on-suspend.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/package/mac80211/patches/302-rt2x00-Don-t-free-register-information-on-suspend.patch b/package/mac80211/patches/302-rt2x00-Don-t-free-register-information-on-suspend.patch new file mode 100644 index 0000000000..11ad79d08c --- /dev/null +++ b/package/mac80211/patches/302-rt2x00-Don-t-free-register-information-on-suspend.patch @@ -0,0 +1,95 @@ +From 76b0fa91af8ca33cd68f52f2d02a05c488777f58 Mon Sep 17 00:00:00 2001 +From: Ivo van Doorn <IvDoorn@gmail.com> +Date: Sat, 28 Mar 2009 20:32:07 +0100 +Subject: [PATCH 3/9] rt2x00: Don't free register information on suspend + +After suspend & resume the rt2x00 devices won't wakeup +anymore due to a broken register information setup. +The most important problem is the release of the EEPROM +buffer which is completely cleared and never read again +after the suspend. + +Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> +--- + drivers/net/wireless/rt2x00/rt2x00pci.c | 18 +----------------- + drivers/net/wireless/rt2x00/rt2x00usb.c | 18 +----------------- + 2 files changed, 2 insertions(+), 34 deletions(-) + +--- a/drivers/net/wireless/rt2x00/rt2x00pci.c ++++ b/drivers/net/wireless/rt2x00/rt2x00pci.c +@@ -377,8 +377,6 @@ int rt2x00pci_suspend(struct pci_dev *pc + if (retval) + return retval; + +- rt2x00pci_free_reg(rt2x00dev); +- + pci_save_state(pci_dev); + pci_disable_device(pci_dev); + return pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); +@@ -389,7 +387,6 @@ int rt2x00pci_resume(struct pci_dev *pci + { + struct ieee80211_hw *hw = pci_get_drvdata(pci_dev); + struct rt2x00_dev *rt2x00dev = hw->priv; +- int retval; + + if (pci_set_power_state(pci_dev, PCI_D0) || + pci_enable_device(pci_dev) || +@@ -398,20 +395,7 @@ int rt2x00pci_resume(struct pci_dev *pci + return -EIO; + } + +- retval = rt2x00pci_alloc_reg(rt2x00dev); +- if (retval) +- return retval; +- +- retval = rt2x00lib_resume(rt2x00dev); +- if (retval) +- goto exit_free_reg; +- +- return 0; +- +-exit_free_reg: +- rt2x00pci_free_reg(rt2x00dev); +- +- return retval; ++ return rt2x00lib_resume(rt2x00dev); + } + EXPORT_SYMBOL_GPL(rt2x00pci_resume); + #endif /* CONFIG_PM */ +--- a/drivers/net/wireless/rt2x00/rt2x00usb.c ++++ b/drivers/net/wireless/rt2x00/rt2x00usb.c +@@ -702,8 +702,6 @@ int rt2x00usb_suspend(struct usb_interfa + if (retval) + return retval; + +- rt2x00usb_free_reg(rt2x00dev); +- + /* + * Decrease usbdev refcount. + */ +@@ -717,24 +715,10 @@ int rt2x00usb_resume(struct usb_interfac + { + struct ieee80211_hw *hw = usb_get_intfdata(usb_intf); + struct rt2x00_dev *rt2x00dev = hw->priv; +- int retval; + + usb_get_dev(interface_to_usbdev(usb_intf)); + +- retval = rt2x00usb_alloc_reg(rt2x00dev); +- if (retval) +- return retval; +- +- retval = rt2x00lib_resume(rt2x00dev); +- if (retval) +- goto exit_free_reg; +- +- return 0; +- +-exit_free_reg: +- rt2x00usb_free_reg(rt2x00dev); +- +- return retval; ++ return rt2x00lib_resume(rt2x00dev); + } + EXPORT_SYMBOL_GPL(rt2x00usb_resume); + #endif /* CONFIG_PM */ |