Commit 59e6ded5 authored by Lu jicong's avatar Lu jicong Committed by Kalle Valo

wifi: rtlwifi: rtl8192ce: fix dealing empty EEPROM values

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: default avatarLu jicong <jiconglu58@gmail.com>
Acked-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230214063602.2257263-1-jiconglu58@gmail.com
parent f2b6cfda
...@@ -1428,7 +1428,9 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -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 (rf_path = 0; rf_path < 2; rf_path++) {
for (i = 0; i < 3; i++) { 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-> rtlefuse->
eeprom_chnlarea_txpwr_cck[rf_path][i] = eeprom_chnlarea_txpwr_cck[rf_path][i] =
hwinfo[EEPROM_TXPOWERCCK + rf_path * 3 + i]; hwinfo[EEPROM_TXPOWERCCK + rf_path * 3 + i];
...@@ -1448,7 +1450,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -1448,7 +1450,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
if (!autoload_fail) if (!autoload_fail &&
hwinfo[EEPROM_TXPOWERHT40_2SDIFF + i] != 0xff)
tempval = hwinfo[EEPROM_TXPOWERHT40_2SDIFF + i]; tempval = hwinfo[EEPROM_TXPOWERHT40_2SDIFF + i];
else else
tempval = EEPROM_DEFAULT_HT40_2SDIFF; tempval = EEPROM_DEFAULT_HT40_2SDIFF;
...@@ -1518,7 +1521,9 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -1518,7 +1521,9 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
} }
for (i = 0; i < 3; i++) { 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] = rtlefuse->eeprom_pwrlimit_ht40[i] =
hwinfo[EEPROM_TXPWR_GROUP + i]; hwinfo[EEPROM_TXPWR_GROUP + i];
rtlefuse->eeprom_pwrlimit_ht20[i] = rtlefuse->eeprom_pwrlimit_ht20[i] =
...@@ -1563,7 +1568,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -1563,7 +1568,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
for (i = 0; i < 14; i++) { for (i = 0; i < 14; i++) {
index = rtl92c_get_chnl_group((u8)i); index = rtl92c_get_chnl_group((u8)i);
if (!autoload_fail) if (!autoload_fail &&
hwinfo[EEPROM_TXPOWERHT20DIFF + index] != 0xff)
tempval = hwinfo[EEPROM_TXPOWERHT20DIFF + index]; tempval = hwinfo[EEPROM_TXPOWERHT20DIFF + index];
else else
tempval = EEPROM_DEFAULT_HT20_DIFF; tempval = EEPROM_DEFAULT_HT20_DIFF;
...@@ -1580,7 +1586,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -1580,7 +1586,8 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw,
index = rtl92c_get_chnl_group((u8)i); 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]; tempval = hwinfo[EEPROM_TXPOWER_OFDMDIFF + index];
else else
tempval = EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF; tempval = EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF;
...@@ -1610,14 +1617,16 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -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", "RF-B Legacy to HT40 Diff[%d] = 0x%x\n",
i, rtlefuse->txpwr_legacyhtdiff[RF90_PATH_B][i]); 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); rtlefuse->eeprom_regulatory = (hwinfo[RF_OPTION1] & 0x7);
else else
rtlefuse->eeprom_regulatory = 0; rtlefuse->eeprom_regulatory = 0;
RTPRINT(rtlpriv, FINIT, INIT_TXPOWER, RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
"eeprom_regulatory = 0x%x\n", rtlefuse->eeprom_regulatory); "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_A] = hwinfo[EEPROM_TSSI_A];
rtlefuse->eeprom_tssi[RF90_PATH_B] = hwinfo[EEPROM_TSSI_B]; rtlefuse->eeprom_tssi[RF90_PATH_B] = hwinfo[EEPROM_TSSI_B];
} else { } else {
...@@ -1628,7 +1637,7 @@ static void _rtl92ce_read_txpower_info_from_hwpg(struct ieee80211_hw *hw, ...@@ -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_A],
rtlefuse->eeprom_tssi[RF90_PATH_B]); rtlefuse->eeprom_tssi[RF90_PATH_B]);
if (!autoload_fail) if (!autoload_fail && hwinfo[EEPROM_THERMAL_METER] != 0xff)
tempval = hwinfo[EEPROM_THERMAL_METER]; tempval = hwinfo[EEPROM_THERMAL_METER];
else else
tempval = EEPROM_DEFAULT_THERMALMETER; tempval = EEPROM_DEFAULT_THERMALMETER;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment