From: Felix Fietkau Date: Sat, 8 Sep 2012 13:18:58 +0000 (+0000) Subject: ath9k: disable PA predistortion by default, since it has been reported to reduce... X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c9eea9dea9c31399b6c78eef87378569c26088d9;p=librecmc%2Flibrecmc.git ath9k: disable PA predistortion by default, since it has been reported to reduce rx sensitivity on some devices (#12135) SVN-Revision: 33332 --- diff --git a/package/mac80211/patches/565-ath9k_disable_paprd.patch b/package/mac80211/patches/565-ath9k_disable_paprd.patch new file mode 100644 index 0000000000..079986d601 --- /dev/null +++ b/package/mac80211/patches/565-ath9k_disable_paprd.patch @@ -0,0 +1,72 @@ +--- a/drivers/net/wireless/ath/ath9k/debug.c ++++ b/drivers/net/wireless/ath/ath9k/debug.c +@@ -1767,6 +1767,8 @@ int ath9k_init_debug(struct ath_hw *ah) + sc->debug.debugfs_phy, sc, &fops_tx_chainmask); + debugfs_create_file("disable_ani", S_IRUSR | S_IWUSR, + sc->debug.debugfs_phy, sc, &fops_disable_ani); ++ debugfs_create_bool("paprd", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, ++ &sc->sc_ah->config.enable_paprd); + debugfs_create_file("regidx", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, + sc, &fops_regidx); + debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -2521,10 +2521,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw + pCap->rx_status_len = sizeof(struct ar9003_rxs); + pCap->tx_desc_len = sizeof(struct ar9003_txc); + pCap->txs_len = sizeof(struct ar9003_txs); +- if (!ah->config.paprd_disable && +- ah->eep_ops->get_eeprom(ah, EEP_PAPRD) && +- !AR_SREV_9462(ah)) +- pCap->hw_caps |= ATH9K_HW_CAP_PAPRD; + } else { + pCap->tx_desc_len = sizeof(struct ath_desc); + if (AR_SREV_9280_20(ah)) +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -236,7 +236,6 @@ enum ath9k_hw_caps { + ATH9K_HW_CAP_LDPC = BIT(6), + ATH9K_HW_CAP_FASTCLOCK = BIT(7), + ATH9K_HW_CAP_SGI_20 = BIT(8), +- ATH9K_HW_CAP_PAPRD = BIT(9), + ATH9K_HW_CAP_ANT_DIV_COMB = BIT(10), + ATH9K_HW_CAP_2GHZ = BIT(11), + ATH9K_HW_CAP_5GHZ = BIT(12), +@@ -287,12 +286,12 @@ struct ath9k_ops_config { + u8 pcie_clock_req; + u32 pcie_waen; + u8 analog_shiftreg; +- u8 paprd_disable; + u32 ofdm_trig_low; + u32 ofdm_trig_high; + u32 cck_trig_high; + u32 cck_trig_low; + u32 enable_ani; ++ u32 enable_paprd; + int serialize_regmode; + bool rx_intr_mitigation; + bool tx_intr_mitigation; +--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +@@ -2982,6 +2982,10 @@ static u32 ath9k_hw_ar9300_get_eeprom(st + case EEP_RX_MASK: + return pBase->txrxMask & 0xf; + case EEP_PAPRD: ++ if (AR_SREV_9462(ah)) ++ return false; ++ if (!ah->config.enable_paprd); ++ return false; + return !!(pBase->featureEnable & BIT(5)); + case EEP_CHAIN_MASK_REDUCE: + return (pBase->miscConfiguration >> 0x3) & 0x1; +--- a/drivers/net/wireless/ath/ath9k/link.c ++++ b/drivers/net/wireless/ath/ath9k/link.c +@@ -423,7 +423,7 @@ set_timer: + cal_interval = min(cal_interval, (u32)short_cal_interval); + + mod_timer(&common->ani.timer, jiffies + msecs_to_jiffies(cal_interval)); +- if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_PAPRD) && ah->caldata) { ++ if (ah->eep_ops->get_eeprom(ah, EEP_PAPRD) && ah->caldata) { + if (!ah->caldata->paprd_done) + ieee80211_queue_work(sc->hw, &sc->paprd_work); + else if (!ah->paprd_table_write_done)