| From c18d8f5095715c56bb3cd9cba64242542632054b Mon Sep 17 00:00:00 2001 |
| From: Larry Finger <Larry.Finger@lwfinger.net> |
| Date: Wed, 16 Mar 2016 13:33:34 -0500 |
| Subject: rtlwifi: rtl8723be: Add antenna select module parameter |
| |
| From: Larry Finger <Larry.Finger@lwfinger.net> |
| |
| commit c18d8f5095715c56bb3cd9cba64242542632054b upstream. |
| |
| A number of new laptops have been delivered with only a single antenna. |
| In principle, this is OK; however, a problem arises when the on-board |
| EEPROM is programmed to use the other antenna connection. The option |
| of opening the computer and moving the connector is not always possible |
| as it will void the warranty in some cases. In addition, this solution |
| breaks the Windows driver when the box dual boots Linux and Windows. |
| |
| A fix involving a new module parameter has been developed. This commit |
| adds the new parameter and implements the changes needed for the driver. |
| |
| Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 5 +++++ |
| drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 3 +++ |
| drivers/net/wireless/realtek/rtlwifi/wifi.h | 3 +++ |
| 3 files changed, 11 insertions(+) |
| |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c |
| @@ -2684,6 +2684,7 @@ void rtl8723be_read_bt_coexist_info_from |
| bool auto_load_fail, u8 *hwinfo) |
| { |
| struct rtl_priv *rtlpriv = rtl_priv(hw); |
| + struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params; |
| u8 value; |
| u32 tmpu_32; |
| |
| @@ -2702,6 +2703,10 @@ void rtl8723be_read_bt_coexist_info_from |
| rtlpriv->btcoexist.btc_info.ant_num = ANT_X2; |
| } |
| |
| + /* override ant_num / ant_path */ |
| + if (mod_params->ant_sel) |
| + rtlpriv->btcoexist.btc_info.ant_num = |
| + (mod_params->ant_sel == 1 ? ANT_X2 : ANT_X1); |
| } |
| |
| void rtl8723be_bt_reg_init(struct ieee80211_hw *hw) |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c |
| @@ -273,6 +273,7 @@ static struct rtl_mod_params rtl8723be_m |
| .msi_support = false, |
| .disable_watchdog = false, |
| .debug = DBG_EMERG, |
| + .ant_sel = 0, |
| }; |
| |
| static struct rtl_hal_cfg rtl8723be_hal_cfg = { |
| @@ -394,6 +395,7 @@ module_param_named(fwlps, rtl8723be_mod_ |
| module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444); |
| module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog, |
| bool, 0444); |
| +module_param_named(ant_sel, rtl8723be_mod_params.ant_sel, int, 0444); |
| MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); |
| MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
| MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
| @@ -402,6 +404,7 @@ MODULE_PARM_DESC(msi, "Set to 1 to use M |
| MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); |
| MODULE_PARM_DESC(disable_watchdog, |
| "Set to 1 to disable the watchdog (default 0)\n"); |
| +MODULE_PARM_DESC(ant_sel, "Set to 1 or 2 to force antenna number (default 0)\n"); |
| |
| static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume); |
| |
| --- a/drivers/net/wireless/realtek/rtlwifi/wifi.h |
| +++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h |
| @@ -2246,6 +2246,9 @@ struct rtl_mod_params { |
| |
| /* default 0: 1 means do not disable interrupts */ |
| bool int_clear; |
| + |
| + /* select antenna */ |
| + int ant_sel; |
| }; |
| |
| struct rtl_hal_usbint_cfg { |