Return-path: Received: from rtits2.realtek.com ([60.250.210.242]:42962 "EHLO rtits2.realtek.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752961Ab1AYEYV (ORCPT ); Mon, 24 Jan 2011 23:24:21 -0500 From: =?gb2312?B?wO6zr8P3?= To: CC: References: <1291828372-25159-1-git-send-email-Larry.Finger@lwfinger.net> <1291828372-25159-5-git-send-email-Larry.Finger@lwfinger.net> Subject: [PATCH] fix_rtlwifi_rfkill_state_not_synchronous_with_true_rfstate_issue Date: Tue, 25 Jan 2011 12:10:09 +0800 Message-ID: <301B5E6D9B3042F6ABB4C6479ACB875E@realsil.com.cn> MIME-Version: 1.0 Content-Type: text/plain; charset="gb2312" In-Reply-To: <1291828372-25159-5-git-send-email-Larry.Finger@lwfinger.net> Sender: linux-wireless-owner@vger.kernel.org List-ID: >From 0bd7f0e28e5b6f4fe2a98aad7392c72d55420880 Mon Sep 17 00:00:00 2001 From: zhaoming_li Date: Tue, 25 Jan 2011 11:59:53 +0800 Subject: [PATCH] fix_rtlwifi_rfkill_state_not_synchronous_with_true_rfstate_issue --- drivers/net/wireless/rtlwifi/base.c | 13 ++++++++----- drivers/net/wireless/rtlwifi/rtl8192ce/hw.c | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c index cf0b73e..33323b4 100644 --- a/drivers/net/wireless/rtlwifi/base.c +++ b/drivers/net/wireless/rtlwifi/base.c @@ -251,15 +251,18 @@ void rtl_init_rfkill(struct ieee80211_hw *hw) bool blocked; u8 valid = 0; - radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid); + /*1. set init state to on */ + rtlpriv->rfkill.rfkill_state = 1; + wiphy_rfkill_set_hw_state(hw->wiphy, 0); - /*set init state to that of switch */ - rtlpriv->rfkill.rfkill_state = radio_state; - printk(KERN_INFO "rtlwifi: wireless switch is %s\n", - rtlpriv->rfkill.rfkill_state ? "on" : "off"); + /*2. check gpio for rf state */ + radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid); + /*3. if valid, change state based on gpio */ if (valid) { rtlpriv->rfkill.rfkill_state = radio_state; + printk(KERN_INFO "rtlwifi: wireless switch is %s\n", + rtlpriv->rfkill.rfkill_state ? "on" : "off"); blocked = (rtlpriv->rfkill.rfkill_state == 1) ? 0 : 1; wiphy_rfkill_set_hw_state(hw->wiphy, blocked); diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c index 1c41a0c..cb2e01a 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c @@ -1943,7 +1943,7 @@ bool rtl92ce_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 * valid) bool b_actuallyset = false; unsigned long flag; - if ((rtlpci->up_first_time == 1) || (rtlpci->being_init_adapter)) + if (rtlpci->being_init_adapter) return false; if (ppsc->b_swrf_processing) -- 1.7.0.4