Patch "rtlwifi: btcoexist: Fix antenna selection code" has been added to the 4.13-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
rtlwifi: btcoexist: Fix antenna selection code
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
rtlwifi-btcoexist-fix-antenna-selection-code.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6d622692836950b3c943776f84c4557ff6c02f3bMon Sep 17 00:00:00 2001
From: Larry Finger <[email protected]>
Date: Mon, 4 Sep 2017 12:51:34 -0500
Subject: rtlwifi: btcoexist: Fix antenna selection code
From: Larry Finger <[email protected]>
commit 6d622692836950b3c943776f84c4557ff6c02f3b upstream.
In commit 87d8a9f35202 ("rtlwifi: btcoex: call bind to setup btcoex"), the code turns on a call to exhalbtc_bind_bt_coex_withadapter(). This routine contains a bug that causes incorrect antenna selection for those HP laptops with only one antenna and an incorrectly programmed EFUSE. These boxes are the ones that need the ant_sel module parameter.
--- drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 23 ++++++---- 1 file changed, 16 insertions(+), 7 deletions(-)
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c +16 -7
@@ -173,6 +173,16 @@ static u8 halbtc_get_wifi_central_chnl(su8 rtl_get_hwpg_single_ant_path (struct rtl_priv *rtlpriv) { +struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params; + +/* 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 ); + + rtlpriv->btcoexist.btc_info.single_ant_path = + (mod_params->ant_sel ==1 ?0 :1 ); + }return rtlpriv->btcoexist.btc_info.single_ant_path; }
@@ -183,6 +193,7 @@ u8 rtl_get_hwpg_bt_type(struct rtl_privu8 rtl_get_hwpg_ant_num (struct rtl_priv *rtlpriv) { +struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params;u8 num;if (rtlpriv->btcoexist.btc_info.ant_num ==ANT_X2 )
@@ -190,6 +201,10 @@ u8 rtl_get_hwpg_ant_num(struct rtl_privelse num =1 ; +/* override ant_num / ant_path */ +if (mod_params->ant_sel) + num = (mod_params->ant_sel ==1 ?ANT_X2 :ANT_X1 ) +1 ; +return num; }
@@ -861,7 +876,7 @@ bool exhalbtc_bind_bt_coex_withadapter(v {struct btc_coexist *btcoexist = &gl_bt_coexist;struct rtl_priv *rtlpriv = adapter; -u8 ant_num =2 , chip_type, single_ant_path =0 ; +u8 ant_num =2 , chip_type;if (btcoexist->binded)return false;
@@ -896,12 +911,6 @@ bool exhalbtc_bind_bt_coex_withadapter(v ant_num =rtl_get_hwpg_ant_num (rtlpriv);exhalbtc_set_ant_num (rtlpriv,BT_COEX_ANT_TYPE_PG , ant_num); -/* set default antenna position to main port */ - btcoexist->board_info.btdm_ant_pos =BTC_ANTENNA_AT_MAIN_PORT ; - - single_ant_path =rtl_get_hwpg_single_ant_path (rtlpriv); -exhalbtc_set_single_ant_path (single_ant_path); -if (rtl_get_hwpg_package_type (rtlpriv) ==0 ) btcoexist->board_info.tfbga_package = false;else if (rtl_get_hwpg_package_type (rtlpriv) ==1 )
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/rtlwifi-btcoexist-fix-breakage-of-ant_sel-for-rtl8723be.patch queue-4.13/rtlwifi-btcoexist-fix-antenna-selection-code.patch
Quoted 22 lines · On 2017-09-10 13:37 +0200, [email protected] wrote:
This is a note to let you know that I've just added the patch titled
rtlwifi: btcoexist: Fix antenna selection code
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summaryThe filename of the patch is:
rtlwifi-btcoexist-fix-antenna-selection-code.patch
and it can be found in the queue-4.13 subdirectory.If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
From
6d622692836950b3c943776f84c4557ff6c02f3bMon Sep 17 00:00:00 2001
From: Larry Finger <[email protected]>
Date: Mon, 4 Sep 2017 12:51:34 -0500
Subject: rtlwifi: btcoexist: Fix antenna selection codeFrom: Larry Finger <[email protected]>
Quoted 7 lines
commit
6d622692836950b3c943776f84c4557ff6c02f3bupstream.In commit
87d8a9f35202("rtlwifi: btcoex: call bind to setup btcoex"), the code turns on a call toexhalbtc_bind_bt_coex_withadapter(). This routine contains a bug that causes incorrect antenna selection for those HP laptops with only one antenna and an incorrectly programmed EFUSE. These boxes are the ones that need theant_selmodule parameter.
I am the unlucky owner of such a laptop.
Quoted 76 lines
Fixes 87d8a9f35202 ("rtlwifi: btcoex: call bind to setup btcoex")Signed-off-by Larry Finger <[email protected]>Cc Ping-Ke Shih <[email protected]>Cc Yan-Hsuan Chuang <[email protected]>Cc Birming Chiu <[email protected]>Cc Shaofu <[email protected]>Cc Steven Ting <[email protected]>Signed-off-by Kalle Valo <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 23 ++++++---- 1 file changed, 16 insertions(+), 7 deletions(-)drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c +16
-7@@ -173,6 +173,16 @@ static u8 halbtc_get_wifi_central_chnl(su8 rtl_get_hwpg_single_ant_path (struct rtl_priv *rtlpriv) { +struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params; + +/* 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 ); + + rtlpriv->btcoexist.btc_info.single_ant_path = + (mod_params->ant_sel ==1 ?0 :1 ); + }return rtlpriv->btcoexist.btc_info.single_ant_path; }@@ -183,6 +193,7 @@ u8 rtl_get_hwpg_bt_type(struct rtl_privu8 rtl_get_hwpg_ant_num (struct rtl_priv *rtlpriv) { +struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params;u8 num;if (rtlpriv->btcoexist.btc_info.ant_num ==ANT_X2 )@@ -190,6 +201,10 @@ u8 rtl_get_hwpg_ant_num(struct rtl_privelse num =1 ; +/* override ant_num / ant_path */ +if (mod_params->ant_sel) + num = (mod_params->ant_sel ==1 ?ANT_X2 :ANT_X1 ) +1 ; +return num; }@@ -861,7 +876,7 @@ bool exhalbtc_bind_bt_coex_withadapter(v {struct btc_coexist *btcoexist = &gl_bt_coexist;struct rtl_priv *rtlpriv = adapter; -u8 ant_num =2 , chip_type, single_ant_path =0 ; +u8 ant_num =2 , chip_type;if (btcoexist->binded)return false;@@ -896,12 +911,6 @@ bool exhalbtc_bind_bt_coex_withadapter(v ant_num =rtl_get_hwpg_ant_num (rtlpriv);exhalbtc_set_ant_num (rtlpriv,BT_COEX_ANT_TYPE_PG , ant_num); -/* set default antenna position to main port */ - btcoexist->board_info.btdm_ant_pos =BTC_ANTENNA_AT_MAIN_PORT ; - - single_ant_path =rtl_get_hwpg_single_ant_path (rtlpriv); -exhalbtc_set_single_ant_path (single_ant_path); -if (rtl_get_hwpg_package_type (rtlpriv) ==0 ) btcoexist->board_info.tfbga_package = false;else if (rtl_get_hwpg_package_type (rtlpriv) ==1 )
Quoted 4 lines
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/rtlwifi-btcoexist-fix-breakage-of-ant_sel-for-rtl8723be.patchqueue-4.13/rtlwifi-btcoexist-fix-antenna-selection-code.patch
After applying these patches on top of 4.13.1 the WiFi on my laptop works again (thanks, Larry!), but now rtl8723be needs the ant_sel=2 parameter which is a bit odd, because previously it had been working (only) with ant_sel=1. This looks like it has not been intended?
Cheers,
Sven
Quoted 6 lines · Sven Joachim
Quoted 1 line
queue-4.13/rtlwifi-btcoexist-fix-antenna-selection-code.patchAfter applying these patches on top of 4.13.1 the WiFi on my laptop works again (thanks, Larry!), but now rtl8723be needs the ant_sel=2 parameter which is a bit odd, because previously it had been working (only) with ant_sel=1. This looks like it has not been intended?
The changes in the BT coexistence are rather substantial, and I had no part in those changes. That code is used in both Windows and Linux, and the Linux group is presented with the package. The best we can do is divide their massive changes into pieces that are small enough to be accepted by the Linux community.
One thing I can say is that when a single antenna is connected to port 2 on my card, ant_sel=1 works. When it is connected to post 1, then ant_sel=0 works; however, my card is encoded to use two antennas. As I do not know what value is encoded in your EFUSE, I cannot predict what value should work for you.
What I am reasonably certain is that if you were to open your computer and move the single antenna lead to the other port, then you would not need to use any ant_sel command as the new port would match the EFUSE value. According to reports, that would break the Windows driver, but I do not have the setup necessary to test that assertion.
As I have stated before, this ant_sel code was implemented to provide a service for Linux users that were screwed by their vendor. If I had known how much grief this attempt would cause me, I would have told the affected users to complain to that vendor. It is clearly true that no good deed goes unpunished!
Larry