lkml.org 
[lkml]   [2023]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2] wifi: rtlwifi: rtl8192ce: fix dealing empty EEPROM values
    Date
    On OpenWRT platform, RTL8192CE could be soldered on board, but not standard PCI
    module. In this case, some EEPROM values aren't programmed and left 0xff.
    Load default values when the EEPROM values are empty to avoid problems.

    Signed-off-by: Lu jicong <jiconglu58@gmail.com>
    ---
    v2: add more detailed commit message
    ---
    .../wireless/realtek/rtlwifi/rtl8192ce/hw.c | 31 +++++++++++++------
    1 file changed, 21 insertions(+), 10 deletions(-)

    diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
    index b9c62640d2cb..8ddf0017af4c 100644
    --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
    +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
    @@ -1428,7 +1428,9 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,

    for (rf_path = 0; rf_path < 2; rf_path++) {
    for (i = 0; i < 3; i++) {
    - if (!autoload_fail) {
    + if (!autoload_fail &&
    + hwinfo[EEPROM_TXPOWERCCK + rf_path * 3 + i] != 0xff &&
    + hwinfo[EEPROM_TXPOWERHT40_1S + rf_path * 3 + i] != 0xff) {
    rtlefuse->
    eeprom_chnlarea_txpwr_cck[rf_path][i] =
    hwinfo[EEPROM_TXPOWERCCK + rf_path * 3 + i];
    @@ -1448,7 +1450,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
    }

    for (i = 0; i < 3; i++) {
    - if (!autoload_fail)
    + if (!autoload_fail &&
    + hwinfo[EEPROM_TXPOWERHT40_2SDIFF + i] != 0xff)
    tempval = hwinfo[EEPROM_TXPOWERHT40_2SDIFF + i];
    else
    tempval = EEPROM_DEFAULT_HT40_2SDIFF;
    @@ -1518,7 +1521,9 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
    }

    for (i = 0; i < 3; i++) {
    - if (!autoload_fail) {
    + if (!autoload_fail &&
    + hwinfo[EEPROM_TXPWR_GROUP + i] != 0xff &&
    + hwinfo[EEPROM_TXPWR_GROUP + 3 + i] != 0xff) {
    rtlefuse->eeprom_pwrlimit_ht40[i] =
    hwinfo[EEPROM_TXPWR_GROUP + i];
    rtlefuse->eeprom_pwrlimit_ht20[i] =
    @@ -1563,7 +1568,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
    for (i = 0; i < 14; i++) {
    index = rtl92c_get_chnl_group((u8)i);

    - if (!autoload_fail)
    + if (!autoload_fail &&
    + hwinfo[EEPROM_TXPOWERHT20DIFF + index] != 0xff)
    tempval = hwinfo[EEPROM_TXPOWERHT20DIFF + index];
    else
    tempval = EEPROM_DEFAULT_HT20_DIFF;
    @@ -1580,7 +1586,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,

    index = rtl92c_get_chnl_group((u8)i);

    - if (!autoload_fail)
    + if (!autoload_fail &&
    + hwinfo[EEPROM_TXPOWER_OFDMDIFF + index] != 0xff)
    tempval = hwinfo[EEPROM_TXPOWER_OFDMDIFF + index];
    else
    tempval = EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF;
    @@ -1610,14 +1617,16 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
    "RF-B Legacy to HT40 Diff[%d] = 0x%x\n",
    i, rtlefuse->txpwr_legacyhtdiff[RF90_PATH_B][i]);

    - if (!autoload_fail)
    + if (!autoload_fail && hwinfo[RF_OPTION1] != 0xff)
    rtlefuse->eeprom_regulatory = (hwinfo[RF_OPTION1] & 0x7);
    else
    rtlefuse->eeprom_regulatory = 0;
    RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
    "eeprom_regulatory = 0x%x\n", rtlefuse->eeprom_regulatory);

    - if (!autoload_fail) {
    + if (!autoload_fail &&
    + hwinfo[EEPROM_TSSI_A] != 0xff &&
    + hwinfo[EEPROM_TSSI_B] != 0xff) {
    rtlefuse->eeprom_tssi[RF90_PATH_A] = hwinfo[EEPROM_TSSI_A];
    rtlefuse->eeprom_tssi[RF90_PATH_B] = hwinfo[EEPROM_TSSI_B];
    } else {
    @@ -1628,7 +1637,7 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
    rtlefuse->eeprom_tssi[RF90_PATH_A],
    rtlefuse->eeprom_tssi[RF90_PATH_B]);

    - if (!autoload_fail)
    + if (!autoload_fail && hwinfo[EEPROM_THERMAL_METER] != 0xff)
    tempval = hwinfo[EEPROM_THERMAL_METER];
    else
    tempval = EEPROM_DEFAULT_THERMALMETER;
    --
    2.30.2
    \
     
     \ /
      Last update: 2023-03-27 00:21    [W:7.598 / U:0.328 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site