summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath/ath9k/ar9003_hw.c
diff options
context:
space:
mode:
authorSenthil Balasubramanian <senthilb@qca.qualcomm.com>2011-09-13 17:08:18 (GMT)
committerJohn W. Linville <linville@tuxdriver.com>2011-09-16 20:45:33 (GMT)
commit2577c6e8f2320f1d2f09be122efef5b9118efee4 (patch)
tree7579057ce794fd093344a8ac24d6f37e136f881e /drivers/net/wireless/ath/ath9k/ar9003_hw.c
parent4d0707e66d82f46998d49be98adea0e705647be1 (diff)
downloadlinux-2577c6e8f2320f1d2f09be122efef5b9118efee4.tar.xz
ath9k_hw: Add support for AR946/8x chipsets.
This patch adds support for AR946/8x chipets. Signed-off-by: Senthil Balasubramanian <senthilb@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9003_hw.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_hw.c191
1 files changed, 191 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
index 6b54700..901f417 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
@@ -22,6 +22,8 @@
#include "ar9330_1p1_initvals.h"
#include "ar9330_1p2_initvals.h"
#include "ar9580_1p0_initvals.h"
+#include "ar9480_1p0_initvals.h"
+#include "ar9480_2p0_initvals.h"
/* General hardware code for the AR9003 hadware family */
@@ -32,6 +34,14 @@
*/
static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
{
+#define PCIE_PLL_ON_CREQ_DIS_L1_2P0 \
+ ar9480_pciephy_pll_on_clkreq_disable_L1_2p0
+
+#define AR9480_BB_CTX_COEFJ(x) \
+ ar9480_##x##_baseband_core_txfir_coeff_japan_2484
+
+#define AR9480_BBC_TXIFR_COEFFJ \
+ ar9480_2p0_baseband_core_txfir_coeff_japan_2484
if (AR_SREV_9330_11(ah)) {
/* mac */
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
@@ -254,6 +264,132 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
ar9485_1_1_pcie_phy_clkreq_disable_L1,
ARRAY_SIZE(ar9485_1_1_pcie_phy_clkreq_disable_L1),
2);
+ } else if (AR_SREV_9480_10(ah)) {
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ar9480_1p0_mac_core,
+ ARRAY_SIZE(ar9480_1p0_mac_core), 2);
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
+ ar9480_1p0_mac_postamble,
+ ARRAY_SIZE(ar9480_1p0_mac_postamble),
+ 5);
+
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
+ ar9480_1p0_baseband_core,
+ ARRAY_SIZE(ar9480_1p0_baseband_core),
+ 2);
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
+ ar9480_1p0_baseband_postamble,
+ ARRAY_SIZE(ar9480_1p0_baseband_postamble), 5);
+
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
+ ar9480_1p0_radio_core,
+ ARRAY_SIZE(ar9480_1p0_radio_core), 2);
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
+ ar9480_1p0_radio_postamble,
+ ARRAY_SIZE(ar9480_1p0_radio_postamble), 5);
+
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
+ ar9480_1p0_soc_preamble,
+ ARRAY_SIZE(ar9480_1p0_soc_preamble), 2);
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
+ ar9480_1p0_soc_postamble,
+ ARRAY_SIZE(ar9480_1p0_soc_postamble), 5);
+
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_rx_gain_table_1p0,
+ ARRAY_SIZE(ar9480_common_rx_gain_table_1p0), 2);
+
+ /* Awake -> Sleep Setting */
+ INIT_INI_ARRAY(&ah->iniPcieSerdes,
+ ar9480_pcie_phy_clkreq_disable_L1_1p0,
+ ARRAY_SIZE(ar9480_pcie_phy_clkreq_disable_L1_1p0),
+ 2);
+
+ /* Sleep -> Awake Setting */
+ INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
+ ar9480_pcie_phy_clkreq_disable_L1_1p0,
+ ARRAY_SIZE(ar9480_pcie_phy_clkreq_disable_L1_1p0),
+ 2);
+
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
+ ar9480_modes_fast_clock_1p0,
+ ARRAY_SIZE(ar9480_modes_fast_clock_1p0), 3);
+ INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
+ AR9480_BB_CTX_COEFJ(1p0),
+ ARRAY_SIZE(AR9480_BB_CTX_COEFJ(1p0)), 2);
+
+ } else if (AR_SREV_9480_20(ah)) {
+
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ar9480_2p0_mac_core,
+ ARRAY_SIZE(ar9480_2p0_mac_core), 2);
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
+ ar9480_2p0_mac_postamble,
+ ARRAY_SIZE(ar9480_2p0_mac_postamble), 5);
+
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
+ ar9480_2p0_baseband_core,
+ ARRAY_SIZE(ar9480_2p0_baseband_core), 2);
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
+ ar9480_2p0_baseband_postamble,
+ ARRAY_SIZE(ar9480_2p0_baseband_postamble), 5);
+
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
+ ar9480_2p0_radio_core,
+ ARRAY_SIZE(ar9480_2p0_radio_core), 2);
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
+ ar9480_2p0_radio_postamble,
+ ARRAY_SIZE(ar9480_2p0_radio_postamble), 5);
+ INIT_INI_ARRAY(&ah->ini_radio_post_sys2ant,
+ ar9480_2p0_radio_postamble_sys2ant,
+ ARRAY_SIZE(ar9480_2p0_radio_postamble_sys2ant),
+ 5);
+
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
+ ar9480_2p0_soc_preamble,
+ ARRAY_SIZE(ar9480_2p0_soc_preamble), 2);
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
+ ar9480_2p0_soc_postamble,
+ ARRAY_SIZE(ar9480_2p0_soc_postamble), 5);
+
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_rx_gain_table_2p0,
+ ARRAY_SIZE(ar9480_common_rx_gain_table_2p0), 2);
+
+ INIT_INI_ARRAY(&ah->ini_BTCOEX_MAX_TXPWR,
+ ar9480_2p0_BTCOEX_MAX_TXPWR_table,
+ ARRAY_SIZE(ar9480_2p0_BTCOEX_MAX_TXPWR_table),
+ 2);
+
+ /* Awake -> Sleep Setting */
+ INIT_INI_ARRAY(&ah->iniPcieSerdes,
+ PCIE_PLL_ON_CREQ_DIS_L1_2P0,
+ ARRAY_SIZE(PCIE_PLL_ON_CREQ_DIS_L1_2P0),
+ 2);
+ /* Sleep -> Awake Setting */
+ INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
+ PCIE_PLL_ON_CREQ_DIS_L1_2P0,
+ ARRAY_SIZE(PCIE_PLL_ON_CREQ_DIS_L1_2P0),
+ 2);
+
+ /* Fast clock modal settings */
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
+ ar9480_modes_fast_clock_2p0,
+ ARRAY_SIZE(ar9480_modes_fast_clock_2p0), 3);
+
+ INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
+ AR9480_BB_CTX_COEFJ(2p0),
+ ARRAY_SIZE(AR9480_BB_CTX_COEFJ(2p0)), 2);
+
+ INIT_INI_ARRAY(&ah->ini_japan2484, AR9480_BBC_TXIFR_COEFFJ,
+ ARRAY_SIZE(AR9480_BBC_TXIFR_COEFFJ), 2);
+
} else if (AR_SREV_9580(ah)) {
/* mac */
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
@@ -401,6 +537,16 @@ static void ar9003_tx_gain_table_mode0(struct ath_hw *ah)
ar9580_1p0_lowest_ob_db_tx_gain_table,
ARRAY_SIZE(ar9580_1p0_lowest_ob_db_tx_gain_table),
5);
+ else if (AR_SREV_9480_10(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+ ar9480_modes_low_ob_db_tx_gain_table_1p0,
+ ARRAY_SIZE(ar9480_modes_low_ob_db_tx_gain_table_1p0),
+ 5);
+ else if (AR_SREV_9480_20(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+ ar9480_modes_low_ob_db_tx_gain_table_2p0,
+ ARRAY_SIZE(ar9480_modes_low_ob_db_tx_gain_table_2p0),
+ 5);
else
INIT_INI_ARRAY(&ah->iniModesTxGain,
ar9300Modes_lowest_ob_db_tx_gain_table_2p2,
@@ -435,6 +581,16 @@ static void ar9003_tx_gain_table_mode1(struct ath_hw *ah)
ar9580_1p0_high_ob_db_tx_gain_table,
ARRAY_SIZE(ar9580_1p0_high_ob_db_tx_gain_table),
5);
+ else if (AR_SREV_9480_10(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+ ar9480_modes_high_ob_db_tx_gain_table_1p0,
+ ARRAY_SIZE(ar9480_modes_high_ob_db_tx_gain_table_1p0),
+ 5);
+ else if (AR_SREV_9480_20(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+ ar9480_modes_high_ob_db_tx_gain_table_2p0,
+ ARRAY_SIZE(ar9480_modes_high_ob_db_tx_gain_table_2p0),
+ 5);
else
INIT_INI_ARRAY(&ah->iniModesTxGain,
ar9300Modes_high_ob_db_tx_gain_table_2p2,
@@ -556,6 +712,16 @@ static void ar9003_rx_gain_table_mode0(struct ath_hw *ah)
ar9580_1p0_rx_gain_table,
ARRAY_SIZE(ar9580_1p0_rx_gain_table),
2);
+ else if (AR_SREV_9480_10(ah))
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_rx_gain_table_1p0,
+ ARRAY_SIZE(ar9480_common_rx_gain_table_1p0),
+ 2);
+ else if (AR_SREV_9480_20(ah))
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_rx_gain_table_2p0,
+ ARRAY_SIZE(ar9480_common_rx_gain_table_2p0),
+ 2);
else
INIT_INI_ARRAY(&ah->iniModesRxGain,
ar9300Common_rx_gain_table_2p2,
@@ -585,6 +751,16 @@ static void ar9003_rx_gain_table_mode1(struct ath_hw *ah)
ar9485Common_wo_xlna_rx_gain_1_1,
ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1),
2);
+ else if (AR_SREV_9480_10(ah))
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_wo_xlna_rx_gain_table_1p0,
+ ARRAY_SIZE(ar9480_common_wo_xlna_rx_gain_table_1p0),
+ 2);
+ else if (AR_SREV_9480_20(ah))
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_wo_xlna_rx_gain_table_2p0,
+ ARRAY_SIZE(ar9480_common_wo_xlna_rx_gain_table_2p0),
+ 2);
else if (AR_SREV_9580(ah))
INIT_INI_ARRAY(&ah->iniModesRxGain,
ar9580_1p0_wo_xlna_rx_gain_table,
@@ -597,6 +773,18 @@ static void ar9003_rx_gain_table_mode1(struct ath_hw *ah)
2);
}
+static void ar9003_rx_gain_table_mode2(struct ath_hw *ah)
+{
+ if (AR_SREV_9480_10(ah))
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_mixed_rx_gain_table_1p0,
+ ARRAY_SIZE(ar9480_common_mixed_rx_gain_table_1p0), 2);
+ else if (AR_SREV_9480_20(ah))
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
+ ar9480_common_mixed_rx_gain_table_2p0,
+ ARRAY_SIZE(ar9480_common_mixed_rx_gain_table_2p0), 2);
+}
+
static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
{
switch (ar9003_hw_get_rx_gain_idx(ah)) {
@@ -607,6 +795,9 @@ static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
case 1:
ar9003_rx_gain_table_mode1(ah);
break;
+ case 2:
+ ar9003_rx_gain_table_mode2(ah);
+ break;
}
}