lkml.org 
[lkml]   [2016]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.2.y-ckt 011/206] rtlwifi: btcoexist: Implement antenna selection
    Date
    4.2.8-ckt12 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    From: Larry Finger <Larry.Finger@lwfinger.net>

    commit baa1702290953295e421f0f433e2b1ff4815827c upstream.

    The previous patch added an option to rtl8723be to manually select the
    antenna for those cases when only a single antenna is present, and the
    on-board EEPROM is incorrectly programmed. This patch implements the
    necessary changes in the Bluetooth coexistence driver.

    Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    [ kamal: backport to 4.2-stable: files moved ]
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    .../wireless/rtlwifi/btcoexist/halbtc8723b2ant.c | 9 ++++++--
    .../net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c | 27 +++++++++++++++++++++-
    .../net/wireless/rtlwifi/btcoexist/halbtcoutsrc.h | 2 +-
    drivers/net/wireless/rtlwifi/btcoexist/rtl_btc.c | 5 +++-
    4 files changed, 38 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/wireless/rtlwifi/btcoexist/halbtc8723b2ant.c b/drivers/net/wireless/rtlwifi/btcoexist/halbtc8723b2ant.c
    index f2b9d11..e85f165 100644
    --- a/drivers/net/wireless/rtlwifi/btcoexist/halbtc8723b2ant.c
    +++ b/drivers/net/wireless/rtlwifi/btcoexist/halbtc8723b2ant.c
    @@ -1203,7 +1203,6 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,

    /* Force GNT_BT to low */
    btcoexist->btc_write_1byte_bitmask(btcoexist, 0x765, 0x18, 0x0);
    - btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);

    if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {
    /* tell firmware "no antenna inverse" */
    @@ -1211,19 +1210,25 @@ static void btc8723b2ant_set_ant_path(struct btc_coexist *btcoexist,
    h2c_parameter[1] = 1; /* ext switch type */
    btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
    h2c_parameter);
    + btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
    } else {
    /* tell firmware "antenna inverse" */
    h2c_parameter[0] = 1;
    h2c_parameter[1] = 1; /* ext switch type */
    btcoexist->btc_fill_h2c(btcoexist, 0x65, 2,
    h2c_parameter);
    + btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
    }
    }

    /* ext switch setting */
    if (use_ext_switch) {
    /* fixed internal switch S1->WiFi, S0->BT */
    - btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
    + if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT)
    + btcoexist->btc_write_2byte(btcoexist, 0x948, 0x0);
    + else
    + btcoexist->btc_write_2byte(btcoexist, 0x948, 0x280);
    +
    switch (antpos_type) {
    case BTC_ANT_WIFI_AT_MAIN:
    /* ext switch main at wifi */
    diff --git a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
    index b2791c8..babd149 100644
    --- a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
    +++ b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
    @@ -965,13 +965,38 @@ void exhalbtc_set_chip_type(u8 chip_type)
    }
    }

    -void exhalbtc_set_ant_num(u8 type, u8 ant_num)
    +void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num)
    {
    if (BT_COEX_ANT_TYPE_PG == type) {
    gl_bt_coexist.board_info.pg_ant_num = ant_num;
    gl_bt_coexist.board_info.btdm_ant_num = ant_num;
    + /* The antenna position:
    + * Main (default) or Aux for pgAntNum=2 && btdmAntNum =1.
    + * The antenna position should be determined by
    + * auto-detect mechanism.
    + * The following is assumed to main,
    + * and those must be modified
    + * if y auto-detect mechanism is ready
    + */
    + if ((gl_bt_coexist.board_info.pg_ant_num == 2) &&
    + (gl_bt_coexist.board_info.btdm_ant_num == 1))
    + gl_bt_coexist.board_info.btdm_ant_pos =
    + BTC_ANTENNA_AT_MAIN_PORT;
    + else
    + gl_bt_coexist.board_info.btdm_ant_pos =
    + BTC_ANTENNA_AT_MAIN_PORT;
    } else if (BT_COEX_ANT_TYPE_ANTDIV == type) {
    gl_bt_coexist.board_info.btdm_ant_num = ant_num;
    + gl_bt_coexist.board_info.btdm_ant_pos =
    + BTC_ANTENNA_AT_MAIN_PORT;
    + } else if (type == BT_COEX_ANT_TYPE_DETECTED) {
    + gl_bt_coexist.board_info.btdm_ant_num = ant_num;
    + if (rtlpriv->cfg->mod_params->ant_sel == 1)
    + gl_bt_coexist.board_info.btdm_ant_pos =
    + BTC_ANTENNA_AT_AUX_PORT;
    + else
    + gl_bt_coexist.board_info.btdm_ant_pos =
    + BTC_ANTENNA_AT_MAIN_PORT;
    }
    }

    diff --git a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.h b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.h
    index 0a903ea..f41ca57 100644
    --- a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.h
    +++ b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.h
    @@ -535,7 +535,7 @@ void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version);
    void exhalbtc_update_min_bt_rssi(char bt_rssi);
    void exhalbtc_set_bt_exist(bool bt_exist);
    void exhalbtc_set_chip_type(u8 chip_type);
    -void exhalbtc_set_ant_num(u8 type, u8 ant_num);
    +void exhalbtc_set_ant_num(struct rtl_priv *rtlpriv, u8 type, u8 ant_num);
    void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist);
    void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
    u8 *rssi_wifi, u8 *rssi_bt);
    diff --git a/drivers/net/wireless/rtlwifi/btcoexist/rtl_btc.c b/drivers/net/wireless/rtlwifi/btcoexist/rtl_btc.c
    index b9b0cb7..d3fd921 100644
    --- a/drivers/net/wireless/rtlwifi/btcoexist/rtl_btc.c
    +++ b/drivers/net/wireless/rtlwifi/btcoexist/rtl_btc.c
    @@ -72,7 +72,10 @@ void rtl_btc_init_hal_vars(struct rtl_priv *rtlpriv)
    __func__, bt_type);
    exhalbtc_set_chip_type(bt_type);

    - exhalbtc_set_ant_num(BT_COEX_ANT_TYPE_PG, ant_num);
    + if (rtlpriv->cfg->mod_params->ant_sel == 1)
    + exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_DETECTED, 1);
    + else
    + exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_PG, ant_num);
    }

    void rtl_btc_init_hw_config(struct rtl_priv *rtlpriv)
    --
    2.7.4
    \
     
     \ /
      Last update: 2016-06-10 01:01    [W:4.355 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site