| From 788f7a56fce1bcb2067b62b851a086fca48a0056 Mon Sep 17 00:00:00 2001 |
| From: Stanislaw Gruszka <sgruszka@redhat.com> |
| Date: Thu, 1 Aug 2013 12:07:55 +0200 |
| Subject: iwl4965: reset firmware after rfkill off |
| |
| From: Stanislaw Gruszka <sgruszka@redhat.com> |
| |
| commit 788f7a56fce1bcb2067b62b851a086fca48a0056 upstream. |
| |
| Using rfkill switch can make firmware unstable, what cause various |
| Microcode errors and kernel warnings. Reseting firmware just after |
| rfkill off (radio on) helped with that. |
| |
| Resolve: |
| https://bugzilla.redhat.com/show_bug.cgi?id=977053 |
| |
| Reported-and-tested-by: Justin Pearce <whitefox@guardianfox.net> |
| Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/iwlegacy/4965-mac.c | 10 +++++----- |
| drivers/net/wireless/iwlegacy/common.c | 1 + |
| 2 files changed, 6 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/net/wireless/iwlegacy/4965-mac.c |
| +++ b/drivers/net/wireless/iwlegacy/4965-mac.c |
| @@ -4442,12 +4442,12 @@ il4965_irq_tasklet(struct il_priv *il) |
| * is killed. Hence update the killswitch state here. The |
| * rfkill handler will care about restarting if needed. |
| */ |
| - if (!test_bit(S_ALIVE, &il->status)) { |
| - if (hw_rf_kill) |
| - set_bit(S_RFKILL, &il->status); |
| - else |
| - clear_bit(S_RFKILL, &il->status); |
| + if (hw_rf_kill) { |
| + set_bit(S_RFKILL, &il->status); |
| + } else { |
| + clear_bit(S_RFKILL, &il->status); |
| wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); |
| + il_force_reset(il, true); |
| } |
| |
| handled |= CSR_INT_BIT_RF_KILL; |
| --- a/drivers/net/wireless/iwlegacy/common.c |
| +++ b/drivers/net/wireless/iwlegacy/common.c |
| @@ -4660,6 +4660,7 @@ il_force_reset(struct il_priv *il, bool |
| |
| return 0; |
| } |
| +EXPORT_SYMBOL(il_force_reset); |
| |
| int |
| il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |