提交 193cd458 编写于 作者: S Sujith 提交者: John W. Linville

ath9k: Update INI release for AR9287

If the current channel is between 2412 and 2472 MHz and if the channel is
changing to 2484 MHz, then the registers 0xa1f4, 0xa1f8 and 0xa1fc need to be
programmed to the "japan_2484" values.  Conversely, if the current channel
is 2484 MHz and if the channel is changing to one between 2412 and 2472 MHz, then
the three registers need to be programmed to the "normal" values.

This is needed for compliance with Japanese regulatory requirements.
Signed-off-by: NSujith <Sujith.Manoharan@atheros.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 0b98eaaa
...@@ -943,6 +943,16 @@ int ath9k_hw_init(struct ath_hw *ah) ...@@ -943,6 +943,16 @@ int ath9k_hw_init(struct ath_hw *ah)
else else
ath9k_hw_disablepcie(ah); ath9k_hw_disablepcie(ah);
/* Support for Japan ch.14 (2484) spread */
if (AR_SREV_9287_11_OR_LATER(ah)) {
INIT_INI_ARRAY(&ah->iniCckfirNormal,
ar9287Common_normal_cck_fir_coeff_92871_1,
ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_92871_1), 2);
INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
ar9287Common_japan_2484_cck_fir_coeff_92871_1,
ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_92871_1), 2);
}
r = ath9k_hw_post_init(ah); r = ath9k_hw_post_init(ah);
if (r) if (r)
return r; return r;
......
...@@ -592,6 +592,8 @@ struct ath_hw { ...@@ -592,6 +592,8 @@ struct ath_hw {
struct ar5416IniArray iniModesAdditional; struct ar5416IniArray iniModesAdditional;
struct ar5416IniArray iniModesRxGain; struct ar5416IniArray iniModesRxGain;
struct ar5416IniArray iniModesTxGain; struct ar5416IniArray iniModesTxGain;
struct ar5416IniArray iniCckfirNormal;
struct ar5416IniArray iniCckfirJapan2484;
u32 intr_gen_timer_trigger; u32 intr_gen_timer_trigger;
u32 intr_gen_timer_thresh; u32 intr_gen_timer_thresh;
......
...@@ -5918,9 +5918,6 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = { ...@@ -5918,9 +5918,6 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = {
{ 0x000099ec, 0x0cc80caa }, { 0x000099ec, 0x0cc80caa },
{ 0x000099f0, 0x00000000 }, { 0x000099f0, 0x00000000 },
{ 0x000099fc, 0x00001042 }, { 0x000099fc, 0x00001042 },
{ 0x0000a1f4, 0x00fffeff },
{ 0x0000a1f8, 0x00f5f9ff },
{ 0x0000a1fc, 0xb79f6427 },
{ 0x0000a208, 0x803e4788 }, { 0x0000a208, 0x803e4788 },
{ 0x0000a210, 0x4080a333 }, { 0x0000a210, 0x4080a333 },
{ 0x0000a214, 0x40206c10 }, { 0x0000a214, 0x40206c10 },
...@@ -5980,7 +5977,7 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = { ...@@ -5980,7 +5977,7 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = {
{ 0x0000b3f4, 0x00000000 }, { 0x0000b3f4, 0x00000000 },
{ 0x0000a7d8, 0x000003f1 }, { 0x0000a7d8, 0x000003f1 },
{ 0x00007800, 0x00000800 }, { 0x00007800, 0x00000800 },
{ 0x00007804, 0x6c35ffc2 }, { 0x00007804, 0x6c35ffd2 },
{ 0x00007808, 0x6db6c000 }, { 0x00007808, 0x6db6c000 },
{ 0x0000780c, 0x6db6cb30 }, { 0x0000780c, 0x6db6cb30 },
{ 0x00007810, 0x6db6cb6c }, { 0x00007810, 0x6db6cb6c },
...@@ -6000,7 +5997,7 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = { ...@@ -6000,7 +5997,7 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = {
{ 0x00007848, 0x934934a8 }, { 0x00007848, 0x934934a8 },
{ 0x00007850, 0x00000000 }, { 0x00007850, 0x00000000 },
{ 0x00007854, 0x00000800 }, { 0x00007854, 0x00000800 },
{ 0x00007858, 0x6c35ffc2 }, { 0x00007858, 0x6c35ffd2 },
{ 0x0000785c, 0x6db6c000 }, { 0x0000785c, 0x6db6c000 },
{ 0x00007860, 0x6db6cb30 }, { 0x00007860, 0x6db6cb30 },
{ 0x00007864, 0x6db6cb6c }, { 0x00007864, 0x6db6cb6c },
...@@ -6027,6 +6024,22 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = { ...@@ -6027,6 +6024,22 @@ static const u_int32_t ar9287Common_9287_1_1[][2] = {
{ 0x000078b8, 0x2a850160 }, { 0x000078b8, 0x2a850160 },
}; };
/*
* For Japanese regulatory requirements, 2484 MHz requires the following three
* registers be programmed differently from the channel between 2412 and 2472 MHz.
*/
static const u_int32_t ar9287Common_normal_cck_fir_coeff_92871_1[][2] = {
{ 0x0000a1f4, 0x00fffeff },
{ 0x0000a1f8, 0x00f5f9ff },
{ 0x0000a1fc, 0xb79f6427 },
};
static const u_int32_t ar9287Common_japan_2484_cck_fir_coeff_92871_1[][2] = {
{ 0x0000a1f4, 0x00000000 },
{ 0x0000a1f8, 0xefff0301 },
{ 0x0000a1fc, 0xca9228ee },
};
static const u_int32_t ar9287Modes_tx_gain_9287_1_1[][6] = { static const u_int32_t ar9287Modes_tx_gain_9287_1_1[][6] = {
/* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */ /* Address 5G-HT20 5G-HT40 2G-HT40 2G-HT20 Turbo */
{ 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
......
...@@ -113,20 +113,31 @@ void ath9k_hw_ar9280_set_channel(struct ath_hw *ah, ...@@ -113,20 +113,31 @@ void ath9k_hw_ar9280_set_channel(struct ath_hw *ah,
if (freq < 4800) { if (freq < 4800) {
u32 txctl; u32 txctl;
int regWrites = 0;
bMode = 1; bMode = 1;
fracMode = 1; fracMode = 1;
aModeRefSel = 0; aModeRefSel = 0;
channelSel = (freq * 0x10000) / 15; channelSel = (freq * 0x10000) / 15;
txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL); if (AR_SREV_9287_11_OR_LATER(ah)) {
if (freq == 2484) { if (freq == 2484) {
REG_WRITE_ARRAY(&ah->iniCckfirJapan2484,
REG_WRITE(ah, AR_PHY_CCK_TX_CTRL, 1, regWrites);
txctl | AR_PHY_CCK_TX_CTRL_JAPAN); } else {
REG_WRITE_ARRAY(&ah->iniCckfirNormal,
1, regWrites);
}
} else { } else {
REG_WRITE(ah, AR_PHY_CCK_TX_CTRL, txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN); if (freq == 2484) {
/* Enable channel spreading for channel 14 */
REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
} else {
REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
txctl &~ AR_PHY_CCK_TX_CTRL_JAPAN);
}
} }
} else { } else {
bMode = 0; bMode = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册