blob: de8a56c92e1a3bd44e8a74383207a30685070541 [file] [log] [blame]
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -04001/*
Sujith Manoharan5b681382011-05-17 13:36:18 +05302 * Copyright (c) 2008-2011 Atheros Communications Inc.
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -04003 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#include "hw.h"
Luis R. Rodriguezb622a722010-04-15 17:39:28 -040018#include "ar9003_mac.h"
Luis R. Rodriguez72846352010-05-12 21:15:05 -040019#include "ar9003_2p2_initvals.h"
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -080020#include "ar9485_initvals.h"
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +053021#include "ar9340_initvals.h"
Gabor Juhos172805a2011-06-21 11:23:26 +020022#include "ar9330_1p1_initvals.h"
23#include "ar9330_1p2_initvals.h"
Gabor Juhosa0fbb9b2012-07-03 19:13:22 +020024#include "ar955x_1p0_initvals.h"
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -070025#include "ar9580_1p0_initvals.h"
Rajkumar Manoharan76db2f82011-10-13 11:00:43 +053026#include "ar9462_2p0_initvals.h"
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +053027#include "ar9565_1p0_initvals.h"
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -040028
29/* General hardware code for the AR9003 hadware family */
30
Luis R. Rodriguez886b42b2010-10-14 11:44:27 -070031/*
32 * The AR9003 family uses a new INI format (pre, core, post
33 * arrays per subsystem). This provides support for the
34 * AR9003 2.2 chipsets.
35 */
36static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
Luis R. Rodriguez72846352010-05-12 21:15:05 -040037{
Gabor Juhos172805a2011-06-21 11:23:26 +020038 if (AR_SREV_9330_11(ah)) {
39 /* mac */
Gabor Juhos172805a2011-06-21 11:23:26 +020040 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020041 ar9331_1p1_mac_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020042 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020043 ar9331_1p1_mac_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020044
45 /* bb */
Gabor Juhos172805a2011-06-21 11:23:26 +020046 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020047 ar9331_1p1_baseband_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020048 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020049 ar9331_1p1_baseband_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020050
51 /* radio */
Gabor Juhos172805a2011-06-21 11:23:26 +020052 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020053 ar9331_1p1_radio_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020054
55 /* soc */
56 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +020057 ar9331_1p1_soc_preamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020058 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020059 ar9331_1p1_soc_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020060
61 /* rx/tx gain */
62 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +020063 ar9331_common_rx_gain_1p1);
Gabor Juhos172805a2011-06-21 11:23:26 +020064 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +020065 ar9331_modes_lowest_ob_db_tx_gain_1p1);
Gabor Juhos172805a2011-06-21 11:23:26 +020066
Sujith Manoharan57527f82012-11-13 11:33:53 +053067 /* Japan 2484 Mhz CCK */
68 INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
69 ar9331_1p1_baseband_core_txfir_coeff_japan_2484);
70
Gabor Juhos172805a2011-06-21 11:23:26 +020071 /* additional clock settings */
72 if (ah->is_clk_25mhz)
Felix Fietkauc7d36f92012-03-14 16:40:31 +010073 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +020074 ar9331_1p1_xtal_25M);
Gabor Juhos172805a2011-06-21 11:23:26 +020075 else
Felix Fietkauc7d36f92012-03-14 16:40:31 +010076 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +020077 ar9331_1p1_xtal_40M);
Gabor Juhos172805a2011-06-21 11:23:26 +020078 } else if (AR_SREV_9330_12(ah)) {
79 /* mac */
Gabor Juhos172805a2011-06-21 11:23:26 +020080 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020081 ar9331_1p2_mac_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020082 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020083 ar9331_1p2_mac_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020084
85 /* bb */
Gabor Juhos172805a2011-06-21 11:23:26 +020086 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020087 ar9331_1p2_baseband_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020088 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020089 ar9331_1p2_baseband_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020090
91 /* radio */
Gabor Juhos172805a2011-06-21 11:23:26 +020092 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020093 ar9331_1p2_radio_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020094
95 /* soc */
96 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +020097 ar9331_1p2_soc_preamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020098 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020099 ar9331_1p2_soc_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +0200100
101 /* rx/tx gain */
102 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200103 ar9331_common_rx_gain_1p2);
Gabor Juhos172805a2011-06-21 11:23:26 +0200104 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200105 ar9331_modes_lowest_ob_db_tx_gain_1p2);
Gabor Juhos172805a2011-06-21 11:23:26 +0200106
Sujith Manoharan57527f82012-11-13 11:33:53 +0530107 /* Japan 2484 Mhz CCK */
108 INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
109 ar9331_1p2_baseband_core_txfir_coeff_japan_2484);
110
Gabor Juhos172805a2011-06-21 11:23:26 +0200111 /* additional clock settings */
112 if (ah->is_clk_25mhz)
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100113 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +0200114 ar9331_1p2_xtal_25M);
Gabor Juhos172805a2011-06-21 11:23:26 +0200115 else
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100116 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +0200117 ar9331_1p2_xtal_40M);
Gabor Juhos172805a2011-06-21 11:23:26 +0200118 } else if (AR_SREV_9340(ah)) {
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530119 /* mac */
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530120 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200121 ar9340_1p0_mac_core);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530122 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200123 ar9340_1p0_mac_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530124
125 /* bb */
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530126 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200127 ar9340_1p0_baseband_core);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530128 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200129 ar9340_1p0_baseband_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530130
131 /* radio */
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530132 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200133 ar9340_1p0_radio_core);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530134 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200135 ar9340_1p0_radio_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530136
137 /* soc */
138 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200139 ar9340_1p0_soc_preamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530140 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200141 ar9340_1p0_soc_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530142
143 /* rx/tx gain */
144 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200145 ar9340Common_wo_xlna_rx_gain_table_1p0);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530146 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200147 ar9340Modes_high_ob_db_tx_gain_table_1p0);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530148
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100149 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200150 ar9340Modes_fast_clock_1p0);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530151
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100152 if (!ah->is_clk_25mhz)
153 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +0200154 ar9340_1p0_radio_core_40M);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530155 } else if (AR_SREV_9485_11(ah)) {
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530156 /* mac */
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530157 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200158 ar9485_1_1_mac_core);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530159 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200160 ar9485_1_1_mac_postamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530161
162 /* bb */
Felix Fietkaua3645172012-07-15 19:53:33 +0200163 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], ar9485_1_1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530164 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200165 ar9485_1_1_baseband_core);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530166 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200167 ar9485_1_1_baseband_postamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530168
169 /* radio */
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530170 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200171 ar9485_1_1_radio_core);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530172 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200173 ar9485_1_1_radio_postamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530174
175 /* soc */
176 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200177 ar9485_1_1_soc_preamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530178
179 /* rx/tx gain */
180 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200181 ar9485Common_wo_xlna_rx_gain_1_1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530182 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200183 ar9485_modes_lowest_ob_db_tx_gain_1_1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530184
Sujith Manoharan57527f82012-11-13 11:33:53 +0530185 /* Japan 2484 Mhz CCK */
186 INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
187 ar9485_1_1_baseband_core_txfir_coeff_japan_2484);
188
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530189 /* Load PCIE SERDES settings from INI */
190
191 /* Awake Setting */
192
193 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Felix Fietkaua3645172012-07-15 19:53:33 +0200194 ar9485_1_1_pcie_phy_clkreq_disable_L1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530195
196 /* Sleep Setting */
197
198 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Felix Fietkaua3645172012-07-15 19:53:33 +0200199 ar9485_1_1_pcie_phy_clkreq_disable_L1);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530200 } else if (AR_SREV_9462_20(ah)) {
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530201
Felix Fietkaua3645172012-07-15 19:53:33 +0200202 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ar9462_2p0_mac_core);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530203 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200204 ar9462_2p0_mac_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530205
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530206 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200207 ar9462_2p0_baseband_core);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530208 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200209 ar9462_2p0_baseband_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530210
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530211 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200212 ar9462_2p0_radio_core);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530213 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200214 ar9462_2p0_radio_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530215 INIT_INI_ARRAY(&ah->ini_radio_post_sys2ant,
Felix Fietkaua3645172012-07-15 19:53:33 +0200216 ar9462_2p0_radio_postamble_sys2ant);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530217
218 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200219 ar9462_2p0_soc_preamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530220 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200221 ar9462_2p0_soc_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530222
223 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200224 ar9462_common_rx_gain_table_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530225
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530226 /* Awake -> Sleep Setting */
227 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Rajkumar Manoharan16802602012-10-25 17:11:31 +0530228 ar9462_pciephy_clkreq_disable_L1_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530229 /* Sleep -> Awake Setting */
230 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Rajkumar Manoharan16802602012-10-25 17:11:31 +0530231 ar9462_pciephy_clkreq_disable_L1_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530232
233 /* Fast clock modal settings */
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100234 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200235 ar9462_modes_fast_clock_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530236
237 INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
Sujith Manoharan57527f82012-11-13 11:33:53 +0530238 ar9462_2p0_baseband_core_txfir_coeff_japan_2484);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200239 } else if (AR_SREV_9550(ah)) {
240 /* mac */
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200241 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200242 ar955x_1p0_mac_core);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200243 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200244 ar955x_1p0_mac_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530245
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200246 /* bb */
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200247 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200248 ar955x_1p0_baseband_core);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200249 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200250 ar955x_1p0_baseband_postamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200251
252 /* radio */
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200253 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200254 ar955x_1p0_radio_core);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200255 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200256 ar955x_1p0_radio_postamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200257
258 /* soc */
259 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200260 ar955x_1p0_soc_preamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200261 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200262 ar955x_1p0_soc_postamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200263
264 /* rx/tx gain */
265 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200266 ar955x_1p0_common_wo_xlna_rx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200267 INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
Felix Fietkaua3645172012-07-15 19:53:33 +0200268 ar955x_1p0_common_wo_xlna_rx_gain_bounds);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200269 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200270 ar955x_1p0_modes_xpa_tx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200271
272 /* Fast clock modal settings */
273 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200274 ar955x_1p0_modes_fast_clock);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700275 } else if (AR_SREV_9580(ah)) {
276 /* mac */
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700277 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200278 ar9580_1p0_mac_core);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700279 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200280 ar9580_1p0_mac_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700281
282 /* bb */
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700283 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200284 ar9580_1p0_baseband_core);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700285 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200286 ar9580_1p0_baseband_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700287
288 /* radio */
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700289 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200290 ar9580_1p0_radio_core);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700291 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200292 ar9580_1p0_radio_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700293
294 /* soc */
295 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200296 ar9580_1p0_soc_preamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700297 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200298 ar9580_1p0_soc_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700299
300 /* rx/tx gain */
301 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200302 ar9580_1p0_rx_gain_table);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700303 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200304 ar9580_1p0_low_ob_db_tx_gain_table);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700305
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100306 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200307 ar9580_1p0_modes_fast_clock);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530308 } else if (AR_SREV_9565(ah)) {
309 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
310 ar9565_1p0_mac_core);
311 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
312 ar9565_1p0_mac_postamble);
313
314 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
315 ar9565_1p0_baseband_core);
316 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
317 ar9565_1p0_baseband_postamble);
318
319 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
320 ar9565_1p0_radio_core);
321 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
322 ar9565_1p0_radio_postamble);
323
324 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
325 ar9565_1p0_soc_preamble);
326 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
327 ar9565_1p0_soc_postamble);
328
329 INIT_INI_ARRAY(&ah->iniModesRxGain,
330 ar9565_1p0_Common_rx_gain_table);
331 INIT_INI_ARRAY(&ah->iniModesTxGain,
332 ar9565_1p0_Modes_lowest_ob_db_tx_gain_table);
333
334 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Rajkumar Manoharan84464842012-10-25 17:16:51 +0530335 ar9565_1p0_pciephy_clkreq_disable_L1);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530336 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Rajkumar Manoharan84464842012-10-25 17:16:51 +0530337 ar9565_1p0_pciephy_clkreq_disable_L1);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530338
339 INIT_INI_ARRAY(&ah->iniModesFastClock,
340 ar9565_1p0_modes_fast_clock);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800341 } else {
342 /* mac */
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800343 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200344 ar9300_2p2_mac_core);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800345 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200346 ar9300_2p2_mac_postamble);
Luis R. Rodriguez72846352010-05-12 21:15:05 -0400347
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800348 /* bb */
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800349 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200350 ar9300_2p2_baseband_core);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800351 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200352 ar9300_2p2_baseband_postamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800353
354 /* radio */
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800355 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200356 ar9300_2p2_radio_core);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800357 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200358 ar9300_2p2_radio_postamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800359
360 /* soc */
361 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200362 ar9300_2p2_soc_preamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800363 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200364 ar9300_2p2_soc_postamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800365
366 /* rx/tx gain */
367 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200368 ar9300Common_rx_gain_table_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800369 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200370 ar9300Modes_lowest_ob_db_tx_gain_table_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800371
372 /* Load PCIE SERDES settings from INI */
373
374 /* Awake Setting */
375
376 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Felix Fietkaua3645172012-07-15 19:53:33 +0200377 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800378
379 /* Sleep Setting */
380
381 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Felix Fietkaua3645172012-07-15 19:53:33 +0200382 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800383
384 /* Fast clock modal settings */
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100385 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200386 ar9300Modes_fast_clock_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800387 }
Luis R. Rodriguez72846352010-05-12 21:15:05 -0400388}
389
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530390static void ar9003_tx_gain_table_mode0(struct ath_hw *ah)
391{
392 if (AR_SREV_9330_12(ah))
393 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200394 ar9331_modes_lowest_ob_db_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530395 else if (AR_SREV_9330_11(ah))
396 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200397 ar9331_modes_lowest_ob_db_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530398 else if (AR_SREV_9340(ah))
399 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200400 ar9340Modes_lowest_ob_db_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530401 else if (AR_SREV_9485_11(ah))
402 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200403 ar9485_modes_lowest_ob_db_tx_gain_1_1);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200404 else if (AR_SREV_9550(ah))
405 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200406 ar955x_1p0_modes_xpa_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530407 else if (AR_SREV_9580(ah))
408 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200409 ar9580_1p0_lowest_ob_db_tx_gain_table);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530410 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530411 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200412 ar9462_modes_low_ob_db_tx_gain_table_2p0);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530413 else if (AR_SREV_9565(ah))
414 INIT_INI_ARRAY(&ah->iniModesTxGain,
415 ar9565_1p0_modes_low_ob_db_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530416 else
417 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200418 ar9300Modes_lowest_ob_db_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530419}
420
421static void ar9003_tx_gain_table_mode1(struct ath_hw *ah)
422{
423 if (AR_SREV_9330_12(ah))
424 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200425 ar9331_modes_high_ob_db_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530426 else if (AR_SREV_9330_11(ah))
427 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200428 ar9331_modes_high_ob_db_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530429 else if (AR_SREV_9340(ah))
430 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200431 ar9340Modes_high_ob_db_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530432 else if (AR_SREV_9485_11(ah))
433 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200434 ar9485Modes_high_ob_db_tx_gain_1_1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530435 else if (AR_SREV_9580(ah))
436 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200437 ar9580_1p0_high_ob_db_tx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200438 else if (AR_SREV_9550(ah))
439 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200440 ar955x_1p0_modes_no_xpa_tx_gain_table);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530441 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530442 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200443 ar9462_modes_high_ob_db_tx_gain_table_2p0);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530444 else if (AR_SREV_9565(ah))
445 INIT_INI_ARRAY(&ah->iniModesTxGain,
446 ar9565_1p0_modes_high_ob_db_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530447 else
448 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200449 ar9300Modes_high_ob_db_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530450}
451
452static void ar9003_tx_gain_table_mode2(struct ath_hw *ah)
453{
454 if (AR_SREV_9330_12(ah))
455 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200456 ar9331_modes_low_ob_db_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530457 else if (AR_SREV_9330_11(ah))
458 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200459 ar9331_modes_low_ob_db_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530460 else if (AR_SREV_9340(ah))
461 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200462 ar9340Modes_low_ob_db_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530463 else if (AR_SREV_9485_11(ah))
464 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200465 ar9485Modes_low_ob_db_tx_gain_1_1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530466 else if (AR_SREV_9580(ah))
467 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200468 ar9580_1p0_low_ob_db_tx_gain_table);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530469 else if (AR_SREV_9565(ah))
470 INIT_INI_ARRAY(&ah->iniModesTxGain,
471 ar9565_1p0_modes_low_ob_db_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530472 else
473 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200474 ar9300Modes_low_ob_db_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530475}
476
477static void ar9003_tx_gain_table_mode3(struct ath_hw *ah)
478{
479 if (AR_SREV_9330_12(ah))
480 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200481 ar9331_modes_high_power_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530482 else if (AR_SREV_9330_11(ah))
483 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200484 ar9331_modes_high_power_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530485 else if (AR_SREV_9340(ah))
486 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200487 ar9340Modes_high_power_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530488 else if (AR_SREV_9485_11(ah))
489 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200490 ar9485Modes_high_power_tx_gain_1_1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530491 else if (AR_SREV_9580(ah))
492 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200493 ar9580_1p0_high_power_tx_gain_table);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530494 else if (AR_SREV_9565(ah))
495 INIT_INI_ARRAY(&ah->iniModesTxGain,
496 ar9565_1p0_modes_high_power_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530497 else
498 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200499 ar9300Modes_high_power_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530500}
501
Felix Fietkaub05a0112012-07-15 19:53:32 +0200502static void ar9003_tx_gain_table_mode4(struct ath_hw *ah)
503{
504 if (AR_SREV_9340(ah))
505 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200506 ar9340Modes_mixed_ob_db_tx_gain_table_1p0);
Felix Fietkaub05a0112012-07-15 19:53:32 +0200507 else if (AR_SREV_9580(ah))
508 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200509 ar9580_1p0_mixed_ob_db_tx_gain_table);
Felix Fietkaueab6d792013-01-10 19:41:52 +0100510 else
511 INIT_INI_ARRAY(&ah->iniModesTxGain,
512 ar9300Modes_mixed_ob_db_tx_gain_table_2p2);
Felix Fietkaub05a0112012-07-15 19:53:32 +0200513}
514
Felix Fietkaueab6d792013-01-10 19:41:52 +0100515static void ar9003_tx_gain_table_mode5(struct ath_hw *ah)
516{
517 if (AR_SREV_9485_11(ah))
518 INIT_INI_ARRAY(&ah->iniModesTxGain,
519 ar9485Modes_green_ob_db_tx_gain_1_1);
520 else if (AR_SREV_9340(ah))
521 INIT_INI_ARRAY(&ah->iniModesTxGain,
522 ar9340Modes_ub124_tx_gain_table_1p0);
523 else if (AR_SREV_9580(ah))
524 INIT_INI_ARRAY(&ah->iniModesTxGain,
525 ar9580_1p0_type5_tx_gain_table);
526 else if (AR_SREV_9300_22(ah))
527 INIT_INI_ARRAY(&ah->iniModesTxGain,
528 ar9300Modes_type5_tx_gain_table_2p2);
529}
530
531static void ar9003_tx_gain_table_mode6(struct ath_hw *ah)
532{
533 if (AR_SREV_9340(ah))
534 INIT_INI_ARRAY(&ah->iniModesTxGain,
535 ar9340Modes_low_ob_db_and_spur_tx_gain_table_1p0);
536 else if (AR_SREV_9485_11(ah))
537 INIT_INI_ARRAY(&ah->iniModesTxGain,
538 ar9485Modes_green_spur_ob_db_tx_gain_1_1);
539 else if (AR_SREV_9580(ah))
540 INIT_INI_ARRAY(&ah->iniModesTxGain,
541 ar9580_1p0_type6_tx_gain_table);
542}
543
544typedef void (*ath_txgain_tab)(struct ath_hw *ah);
545
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400546static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
547{
Felix Fietkaueab6d792013-01-10 19:41:52 +0100548 static const ath_txgain_tab modes[] = {
549 ar9003_tx_gain_table_mode0,
550 ar9003_tx_gain_table_mode1,
551 ar9003_tx_gain_table_mode2,
552 ar9003_tx_gain_table_mode3,
553 ar9003_tx_gain_table_mode4,
554 ar9003_tx_gain_table_mode5,
555 ar9003_tx_gain_table_mode6,
556 };
557 int idx = ar9003_hw_get_tx_gain_idx(ah);
558
559 if (idx >= ARRAY_SIZE(modes))
560 idx = 0;
561
562 modes[idx](ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400563}
564
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530565static void ar9003_rx_gain_table_mode0(struct ath_hw *ah)
566{
567 if (AR_SREV_9330_12(ah))
568 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200569 ar9331_common_rx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530570 else if (AR_SREV_9330_11(ah))
571 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200572 ar9331_common_rx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530573 else if (AR_SREV_9340(ah))
574 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200575 ar9340Common_rx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530576 else if (AR_SREV_9485_11(ah))
577 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200578 ar9485Common_wo_xlna_rx_gain_1_1);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200579 else if (AR_SREV_9550(ah)) {
580 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200581 ar955x_1p0_common_rx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200582 INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
Felix Fietkaua3645172012-07-15 19:53:33 +0200583 ar955x_1p0_common_rx_gain_bounds);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200584 } else if (AR_SREV_9580(ah))
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530585 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200586 ar9580_1p0_rx_gain_table);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530587 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530588 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200589 ar9462_common_rx_gain_table_2p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530590 else
591 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200592 ar9300Common_rx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530593}
594
595static void ar9003_rx_gain_table_mode1(struct ath_hw *ah)
596{
597 if (AR_SREV_9330_12(ah))
598 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200599 ar9331_common_wo_xlna_rx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530600 else if (AR_SREV_9330_11(ah))
601 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200602 ar9331_common_wo_xlna_rx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530603 else if (AR_SREV_9340(ah))
604 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200605 ar9340Common_wo_xlna_rx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530606 else if (AR_SREV_9485_11(ah))
607 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200608 ar9485Common_wo_xlna_rx_gain_1_1);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530609 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530610 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200611 ar9462_common_wo_xlna_rx_gain_table_2p0);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200612 else if (AR_SREV_9550(ah)) {
613 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200614 ar955x_1p0_common_wo_xlna_rx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200615 INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
Felix Fietkaua3645172012-07-15 19:53:33 +0200616 ar955x_1p0_common_wo_xlna_rx_gain_bounds);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200617 } else if (AR_SREV_9580(ah))
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530618 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200619 ar9580_1p0_wo_xlna_rx_gain_table);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530620 else if (AR_SREV_9565(ah))
621 INIT_INI_ARRAY(&ah->iniModesRxGain,
622 ar9565_1p0_common_wo_xlna_rx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530623 else
624 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200625 ar9300Common_wo_xlna_rx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530626}
627
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530628static void ar9003_rx_gain_table_mode2(struct ath_hw *ah)
629{
Sujith Manoharanc91ec462012-02-22 12:40:03 +0530630 if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530631 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200632 ar9462_common_mixed_rx_gain_table_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530633}
634
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400635static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
636{
637 switch (ar9003_hw_get_rx_gain_idx(ah)) {
638 case 0:
639 default:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530640 ar9003_rx_gain_table_mode0(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400641 break;
642 case 1:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530643 ar9003_rx_gain_table_mode1(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400644 break;
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530645 case 2:
646 ar9003_rx_gain_table_mode2(ah);
647 break;
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400648 }
649}
650
651/* set gain table pointers according to values read from the eeprom */
652static void ar9003_hw_init_mode_gain_regs(struct ath_hw *ah)
653{
654 ar9003_tx_gain_table_apply(ah);
655 ar9003_rx_gain_table_apply(ah);
656}
657
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400658/*
659 * Helper for ASPM support.
660 *
661 * Disable PLL when in L0s as well as receiver clock when in L1.
662 * This power saving option must be enabled through the SerDes.
663 *
664 * Programming the SerDes must go through the same 288 bit serial shift
665 * register as the other analog registers. Hence the 9 writes.
666 */
667static void ar9003_hw_configpcipowersave(struct ath_hw *ah,
Stanislaw Gruszka84c87dc2011-08-05 13:10:32 +0200668 bool power_off)
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400669{
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400670 /* Nothing to do on restore for 11N */
Stanislaw Gruszka84c87dc2011-08-05 13:10:32 +0200671 if (!power_off /* !restore */) {
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400672 /* set bit 19 to allow forcing of pcie core into L1 state */
673 REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
674
675 /* Several PCIe massages to ensure proper behaviour */
676 if (ah->config.pcie_waen)
677 REG_WRITE(ah, AR_WA, ah->config.pcie_waen);
Luis R. Rodriguez9a658d22010-06-21 18:38:47 -0400678 else
679 REG_WRITE(ah, AR_WA, ah->WARegVal);
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400680 }
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400681
682 /*
683 * Configire PCIE after Ini init. SERDES values now come from ini file
684 * This enables PCIe low power mode.
685 */
Luis R. Rodriguez6a0ec302010-06-21 18:38:49 -0400686 if (ah->config.pcieSerDesWrite) {
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400687 unsigned int i;
Luis R. Rodriguezd5c4d192010-06-21 18:38:50 -0400688 struct ar5416IniArray *array;
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400689
Luis R. Rodriguezd5c4d192010-06-21 18:38:50 -0400690 array = power_off ? &ah->iniPcieSerdes :
691 &ah->iniPcieSerdesLowPower;
692
693 for (i = 0; i < array->ia_rows; i++) {
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400694 REG_WRITE(ah,
Luis R. Rodriguezd5c4d192010-06-21 18:38:50 -0400695 INI_RA(array, i, 0),
696 INI_RA(array, i, 1));
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400697 }
698 }
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400699}
700
701/* Sets up the AR9003 hardware familiy callbacks */
702void ar9003_hw_attach_ops(struct ath_hw *ah)
703{
704 struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
705 struct ath_hw_ops *ops = ath9k_hw_ops(ah);
706
707 priv_ops->init_mode_regs = ar9003_hw_init_mode_regs;
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400708 priv_ops->init_mode_gain_regs = ar9003_hw_init_mode_gain_regs;
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400709
710 ops->config_pci_powersave = ar9003_hw_configpcipowersave;
711
712 ar9003_hw_attach_phy_ops(ah);
713 ar9003_hw_attach_calib_ops(ah);
714 ar9003_hw_attach_mac_ops(ah);
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400715}