blob: 0a6b7a3385df98d1219671748c62e6bcbfd7d780 [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{
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +053038#define AR9462_BB_CTX_COEFJ(x) \
39 ar9462_##x##_baseband_core_txfir_coeff_japan_2484
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +053040
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +053041#define AR9462_BBC_TXIFR_COEFFJ \
42 ar9462_2p0_baseband_core_txfir_coeff_japan_2484
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +053043
Gabor Juhos172805a2011-06-21 11:23:26 +020044 if (AR_SREV_9330_11(ah)) {
45 /* mac */
Gabor Juhos172805a2011-06-21 11:23:26 +020046 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020047 ar9331_1p1_mac_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020048 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020049 ar9331_1p1_mac_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020050
51 /* bb */
Gabor Juhos172805a2011-06-21 11:23:26 +020052 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020053 ar9331_1p1_baseband_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020054 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020055 ar9331_1p1_baseband_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020056
57 /* radio */
Gabor Juhos172805a2011-06-21 11:23:26 +020058 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020059 ar9331_1p1_radio_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020060
61 /* soc */
62 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +020063 ar9331_1p1_soc_preamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020064 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020065 ar9331_1p1_soc_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020066
67 /* rx/tx gain */
68 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +020069 ar9331_common_rx_gain_1p1);
Gabor Juhos172805a2011-06-21 11:23:26 +020070 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +020071 ar9331_modes_lowest_ob_db_tx_gain_1p1);
Gabor Juhos172805a2011-06-21 11:23:26 +020072
73 /* additional clock settings */
74 if (ah->is_clk_25mhz)
Felix Fietkauc7d36f92012-03-14 16:40:31 +010075 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +020076 ar9331_1p1_xtal_25M);
Gabor Juhos172805a2011-06-21 11:23:26 +020077 else
Felix Fietkauc7d36f92012-03-14 16:40:31 +010078 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +020079 ar9331_1p1_xtal_40M);
Gabor Juhos172805a2011-06-21 11:23:26 +020080 } else if (AR_SREV_9330_12(ah)) {
81 /* mac */
Gabor Juhos172805a2011-06-21 11:23:26 +020082 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020083 ar9331_1p2_mac_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020084 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020085 ar9331_1p2_mac_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020086
87 /* bb */
Gabor Juhos172805a2011-06-21 11:23:26 +020088 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020089 ar9331_1p2_baseband_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020090 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +020091 ar9331_1p2_baseband_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +020092
93 /* radio */
Gabor Juhos172805a2011-06-21 11:23:26 +020094 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +020095 ar9331_1p2_radio_core);
Gabor Juhos172805a2011-06-21 11:23:26 +020096
97 /* soc */
98 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +020099 ar9331_1p2_soc_preamble);
Gabor Juhos172805a2011-06-21 11:23:26 +0200100 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200101 ar9331_1p2_soc_postamble);
Gabor Juhos172805a2011-06-21 11:23:26 +0200102
103 /* rx/tx gain */
104 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200105 ar9331_common_rx_gain_1p2);
Gabor Juhos172805a2011-06-21 11:23:26 +0200106 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200107 ar9331_modes_lowest_ob_db_tx_gain_1p2);
Gabor Juhos172805a2011-06-21 11:23:26 +0200108
109 /* additional clock settings */
110 if (ah->is_clk_25mhz)
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100111 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +0200112 ar9331_1p2_xtal_25M);
Gabor Juhos172805a2011-06-21 11:23:26 +0200113 else
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100114 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +0200115 ar9331_1p2_xtal_40M);
Gabor Juhos172805a2011-06-21 11:23:26 +0200116 } else if (AR_SREV_9340(ah)) {
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530117 /* mac */
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530118 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200119 ar9340_1p0_mac_core);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530120 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200121 ar9340_1p0_mac_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530122
123 /* bb */
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530124 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200125 ar9340_1p0_baseband_core);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530126 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200127 ar9340_1p0_baseband_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530128
129 /* radio */
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530130 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200131 ar9340_1p0_radio_core);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530132 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200133 ar9340_1p0_radio_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530134
135 /* soc */
136 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200137 ar9340_1p0_soc_preamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530138 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200139 ar9340_1p0_soc_postamble);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530140
141 /* rx/tx gain */
142 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200143 ar9340Common_wo_xlna_rx_gain_table_1p0);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530144 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200145 ar9340Modes_high_ob_db_tx_gain_table_1p0);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530146
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100147 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200148 ar9340Modes_fast_clock_1p0);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530149
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100150 if (!ah->is_clk_25mhz)
151 INIT_INI_ARRAY(&ah->iniAdditional,
Felix Fietkaua3645172012-07-15 19:53:33 +0200152 ar9340_1p0_radio_core_40M);
Vasanthakumar Thiagarajand89baac2011-04-19 19:29:04 +0530153 } else if (AR_SREV_9485_11(ah)) {
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530154 /* mac */
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530155 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200156 ar9485_1_1_mac_core);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530157 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200158 ar9485_1_1_mac_postamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530159
160 /* bb */
Felix Fietkaua3645172012-07-15 19:53:33 +0200161 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], ar9485_1_1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530162 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200163 ar9485_1_1_baseband_core);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530164 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200165 ar9485_1_1_baseband_postamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530166
167 /* radio */
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530168 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200169 ar9485_1_1_radio_core);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530170 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200171 ar9485_1_1_radio_postamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530172
173 /* soc */
174 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200175 ar9485_1_1_soc_preamble);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530176
177 /* rx/tx gain */
178 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200179 ar9485Common_wo_xlna_rx_gain_1_1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530180 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200181 ar9485_modes_lowest_ob_db_tx_gain_1_1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530182
183 /* Load PCIE SERDES settings from INI */
184
185 /* Awake Setting */
186
187 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Felix Fietkaua3645172012-07-15 19:53:33 +0200188 ar9485_1_1_pcie_phy_clkreq_disable_L1);
Vivek Natarajan1a63e2c2011-02-18 16:49:47 +0530189
190 /* Sleep Setting */
191
192 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Felix Fietkaua3645172012-07-15 19:53:33 +0200193 ar9485_1_1_pcie_phy_clkreq_disable_L1);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530194 } else if (AR_SREV_9462_20(ah)) {
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530195
Felix Fietkaua3645172012-07-15 19:53:33 +0200196 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ar9462_2p0_mac_core);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530197 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200198 ar9462_2p0_mac_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530199
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530200 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200201 ar9462_2p0_baseband_core);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530202 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200203 ar9462_2p0_baseband_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530204
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530205 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200206 ar9462_2p0_radio_core);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530207 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200208 ar9462_2p0_radio_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530209 INIT_INI_ARRAY(&ah->ini_radio_post_sys2ant,
Felix Fietkaua3645172012-07-15 19:53:33 +0200210 ar9462_2p0_radio_postamble_sys2ant);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530211
212 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200213 ar9462_2p0_soc_preamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530214 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200215 ar9462_2p0_soc_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530216
217 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200218 ar9462_common_rx_gain_table_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530219
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530220 /* Awake -> Sleep Setting */
221 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Rajkumar Manoharan16802602012-10-25 17:11:31 +0530222 ar9462_pciephy_clkreq_disable_L1_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530223 /* Sleep -> Awake Setting */
224 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Rajkumar Manoharan16802602012-10-25 17:11:31 +0530225 ar9462_pciephy_clkreq_disable_L1_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530226
227 /* Fast clock modal settings */
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100228 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200229 ar9462_modes_fast_clock_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530230
231 INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
Felix Fietkaua3645172012-07-15 19:53:33 +0200232 AR9462_BB_CTX_COEFJ(2p0));
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530233
Felix Fietkaua3645172012-07-15 19:53:33 +0200234 INIT_INI_ARRAY(&ah->ini_japan2484, AR9462_BBC_TXIFR_COEFFJ);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200235 } else if (AR_SREV_9550(ah)) {
236 /* mac */
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200237 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200238 ar955x_1p0_mac_core);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200239 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200240 ar955x_1p0_mac_postamble);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530241
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200242 /* bb */
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200243 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200244 ar955x_1p0_baseband_core);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200245 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200246 ar955x_1p0_baseband_postamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200247
248 /* radio */
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200249 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200250 ar955x_1p0_radio_core);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200251 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200252 ar955x_1p0_radio_postamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200253
254 /* soc */
255 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200256 ar955x_1p0_soc_preamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200257 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200258 ar955x_1p0_soc_postamble);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200259
260 /* rx/tx gain */
261 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200262 ar955x_1p0_common_wo_xlna_rx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200263 INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
Felix Fietkaua3645172012-07-15 19:53:33 +0200264 ar955x_1p0_common_wo_xlna_rx_gain_bounds);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200265 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200266 ar955x_1p0_modes_xpa_tx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200267
268 /* Fast clock modal settings */
269 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200270 ar955x_1p0_modes_fast_clock);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700271 } else if (AR_SREV_9580(ah)) {
272 /* mac */
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700273 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200274 ar9580_1p0_mac_core);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700275 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200276 ar9580_1p0_mac_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700277
278 /* bb */
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700279 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200280 ar9580_1p0_baseband_core);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700281 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200282 ar9580_1p0_baseband_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700283
284 /* radio */
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700285 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200286 ar9580_1p0_radio_core);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700287 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200288 ar9580_1p0_radio_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700289
290 /* soc */
291 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200292 ar9580_1p0_soc_preamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700293 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200294 ar9580_1p0_soc_postamble);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700295
296 /* rx/tx gain */
297 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200298 ar9580_1p0_rx_gain_table);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700299 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200300 ar9580_1p0_low_ob_db_tx_gain_table);
Luis R. Rodriguez5a63ef02011-08-24 15:36:08 -0700301
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100302 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200303 ar9580_1p0_modes_fast_clock);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530304 } else if (AR_SREV_9565(ah)) {
305 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
306 ar9565_1p0_mac_core);
307 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
308 ar9565_1p0_mac_postamble);
309
310 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
311 ar9565_1p0_baseband_core);
312 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
313 ar9565_1p0_baseband_postamble);
314
315 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
316 ar9565_1p0_radio_core);
317 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
318 ar9565_1p0_radio_postamble);
319
320 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
321 ar9565_1p0_soc_preamble);
322 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
323 ar9565_1p0_soc_postamble);
324
325 INIT_INI_ARRAY(&ah->iniModesRxGain,
326 ar9565_1p0_Common_rx_gain_table);
327 INIT_INI_ARRAY(&ah->iniModesTxGain,
328 ar9565_1p0_Modes_lowest_ob_db_tx_gain_table);
329
330 INIT_INI_ARRAY(&ah->iniPcieSerdes,
331 ar9565_1p0_pciephy_pll_on_clkreq_disable_L1);
332 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
333 ar9565_1p0_pciephy_pll_on_clkreq_disable_L1);
334
335 INIT_INI_ARRAY(&ah->iniModesFastClock,
336 ar9565_1p0_modes_fast_clock);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800337 } else {
338 /* mac */
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800339 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200340 ar9300_2p2_mac_core);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800341 INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200342 ar9300_2p2_mac_postamble);
Luis R. Rodriguez72846352010-05-12 21:15:05 -0400343
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800344 /* bb */
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800345 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200346 ar9300_2p2_baseband_core);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800347 INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200348 ar9300_2p2_baseband_postamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800349
350 /* radio */
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800351 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200352 ar9300_2p2_radio_core);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800353 INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200354 ar9300_2p2_radio_postamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800355
356 /* soc */
357 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
Felix Fietkaua3645172012-07-15 19:53:33 +0200358 ar9300_2p2_soc_preamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800359 INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
Felix Fietkaua3645172012-07-15 19:53:33 +0200360 ar9300_2p2_soc_postamble);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800361
362 /* rx/tx gain */
363 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200364 ar9300Common_rx_gain_table_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800365 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200366 ar9300Modes_lowest_ob_db_tx_gain_table_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800367
368 /* Load PCIE SERDES settings from INI */
369
370 /* Awake Setting */
371
372 INIT_INI_ARRAY(&ah->iniPcieSerdes,
Felix Fietkaua3645172012-07-15 19:53:33 +0200373 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800374
375 /* Sleep Setting */
376
377 INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
Felix Fietkaua3645172012-07-15 19:53:33 +0200378 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800379
380 /* Fast clock modal settings */
Felix Fietkauc7d36f92012-03-14 16:40:31 +0100381 INIT_INI_ARRAY(&ah->iniModesFastClock,
Felix Fietkaua3645172012-07-15 19:53:33 +0200382 ar9300Modes_fast_clock_2p2);
Vasanthakumar Thiagarajanc88457e2010-12-06 04:27:37 -0800383 }
Luis R. Rodriguez72846352010-05-12 21:15:05 -0400384}
385
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530386static void ar9003_tx_gain_table_mode0(struct ath_hw *ah)
387{
388 if (AR_SREV_9330_12(ah))
389 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200390 ar9331_modes_lowest_ob_db_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530391 else if (AR_SREV_9330_11(ah))
392 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200393 ar9331_modes_lowest_ob_db_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530394 else if (AR_SREV_9340(ah))
395 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200396 ar9340Modes_lowest_ob_db_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530397 else if (AR_SREV_9485_11(ah))
398 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200399 ar9485_modes_lowest_ob_db_tx_gain_1_1);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200400 else if (AR_SREV_9550(ah))
401 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200402 ar955x_1p0_modes_xpa_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530403 else if (AR_SREV_9580(ah))
404 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200405 ar9580_1p0_lowest_ob_db_tx_gain_table);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530406 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530407 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200408 ar9462_modes_low_ob_db_tx_gain_table_2p0);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530409 else if (AR_SREV_9565(ah))
410 INIT_INI_ARRAY(&ah->iniModesTxGain,
411 ar9565_1p0_modes_low_ob_db_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530412 else
413 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200414 ar9300Modes_lowest_ob_db_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530415}
416
417static void ar9003_tx_gain_table_mode1(struct ath_hw *ah)
418{
419 if (AR_SREV_9330_12(ah))
420 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200421 ar9331_modes_high_ob_db_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530422 else if (AR_SREV_9330_11(ah))
423 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200424 ar9331_modes_high_ob_db_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530425 else if (AR_SREV_9340(ah))
426 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200427 ar9340Modes_high_ob_db_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530428 else if (AR_SREV_9485_11(ah))
429 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200430 ar9485Modes_high_ob_db_tx_gain_1_1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530431 else if (AR_SREV_9580(ah))
432 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200433 ar9580_1p0_high_ob_db_tx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200434 else if (AR_SREV_9550(ah))
435 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200436 ar955x_1p0_modes_no_xpa_tx_gain_table);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530437 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530438 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200439 ar9462_modes_high_ob_db_tx_gain_table_2p0);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530440 else if (AR_SREV_9565(ah))
441 INIT_INI_ARRAY(&ah->iniModesTxGain,
442 ar9565_1p0_modes_high_ob_db_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530443 else
444 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200445 ar9300Modes_high_ob_db_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530446}
447
448static void ar9003_tx_gain_table_mode2(struct ath_hw *ah)
449{
450 if (AR_SREV_9330_12(ah))
451 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200452 ar9331_modes_low_ob_db_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530453 else if (AR_SREV_9330_11(ah))
454 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200455 ar9331_modes_low_ob_db_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530456 else if (AR_SREV_9340(ah))
457 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200458 ar9340Modes_low_ob_db_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530459 else if (AR_SREV_9485_11(ah))
460 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200461 ar9485Modes_low_ob_db_tx_gain_1_1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530462 else if (AR_SREV_9580(ah))
463 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200464 ar9580_1p0_low_ob_db_tx_gain_table);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530465 else if (AR_SREV_9565(ah))
466 INIT_INI_ARRAY(&ah->iniModesTxGain,
467 ar9565_1p0_modes_low_ob_db_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530468 else
469 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200470 ar9300Modes_low_ob_db_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530471}
472
473static void ar9003_tx_gain_table_mode3(struct ath_hw *ah)
474{
475 if (AR_SREV_9330_12(ah))
476 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200477 ar9331_modes_high_power_tx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530478 else if (AR_SREV_9330_11(ah))
479 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200480 ar9331_modes_high_power_tx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530481 else if (AR_SREV_9340(ah))
482 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200483 ar9340Modes_high_power_tx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530484 else if (AR_SREV_9485_11(ah))
485 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200486 ar9485Modes_high_power_tx_gain_1_1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530487 else if (AR_SREV_9580(ah))
488 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200489 ar9580_1p0_high_power_tx_gain_table);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530490 else if (AR_SREV_9565(ah))
491 INIT_INI_ARRAY(&ah->iniModesTxGain,
492 ar9565_1p0_modes_high_power_tx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530493 else
494 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200495 ar9300Modes_high_power_tx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530496}
497
Felix Fietkaub05a0112012-07-15 19:53:32 +0200498static void ar9003_tx_gain_table_mode4(struct ath_hw *ah)
499{
500 if (AR_SREV_9340(ah))
501 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200502 ar9340Modes_mixed_ob_db_tx_gain_table_1p0);
Felix Fietkaub05a0112012-07-15 19:53:32 +0200503 else if (AR_SREV_9580(ah))
504 INIT_INI_ARRAY(&ah->iniModesTxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200505 ar9580_1p0_mixed_ob_db_tx_gain_table);
Felix Fietkaub05a0112012-07-15 19:53:32 +0200506}
507
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400508static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
509{
510 switch (ar9003_hw_get_tx_gain_idx(ah)) {
511 case 0:
512 default:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530513 ar9003_tx_gain_table_mode0(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400514 break;
515 case 1:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530516 ar9003_tx_gain_table_mode1(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400517 break;
518 case 2:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530519 ar9003_tx_gain_table_mode2(ah);
Vasanthakumar Thiagarajanff48ba42010-12-06 04:27:38 -0800520 break;
521 case 3:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530522 ar9003_tx_gain_table_mode3(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400523 break;
Felix Fietkaub05a0112012-07-15 19:53:32 +0200524 case 4:
525 ar9003_tx_gain_table_mode4(ah);
526 break;
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400527 }
528}
529
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530530static void ar9003_rx_gain_table_mode0(struct ath_hw *ah)
531{
532 if (AR_SREV_9330_12(ah))
533 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200534 ar9331_common_rx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530535 else if (AR_SREV_9330_11(ah))
536 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200537 ar9331_common_rx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530538 else if (AR_SREV_9340(ah))
539 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200540 ar9340Common_rx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530541 else if (AR_SREV_9485_11(ah))
542 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200543 ar9485Common_wo_xlna_rx_gain_1_1);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200544 else if (AR_SREV_9550(ah)) {
545 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200546 ar955x_1p0_common_rx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200547 INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
Felix Fietkaua3645172012-07-15 19:53:33 +0200548 ar955x_1p0_common_rx_gain_bounds);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200549 } else if (AR_SREV_9580(ah))
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530550 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200551 ar9580_1p0_rx_gain_table);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530552 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530553 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200554 ar9462_common_rx_gain_table_2p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530555 else
556 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200557 ar9300Common_rx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530558}
559
560static void ar9003_rx_gain_table_mode1(struct ath_hw *ah)
561{
562 if (AR_SREV_9330_12(ah))
563 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200564 ar9331_common_wo_xlna_rx_gain_1p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530565 else if (AR_SREV_9330_11(ah))
566 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200567 ar9331_common_wo_xlna_rx_gain_1p1);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530568 else if (AR_SREV_9340(ah))
569 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200570 ar9340Common_wo_xlna_rx_gain_table_1p0);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530571 else if (AR_SREV_9485_11(ah))
572 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200573 ar9485Common_wo_xlna_rx_gain_1_1);
Rajkumar Manoharan423e38e2011-10-13 11:00:44 +0530574 else if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530575 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200576 ar9462_common_wo_xlna_rx_gain_table_2p0);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200577 else if (AR_SREV_9550(ah)) {
578 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200579 ar955x_1p0_common_wo_xlna_rx_gain_table);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200580 INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
Felix Fietkaua3645172012-07-15 19:53:33 +0200581 ar955x_1p0_common_wo_xlna_rx_gain_bounds);
Gabor Juhos8bc45c62012-07-03 19:13:23 +0200582 } else if (AR_SREV_9580(ah))
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530583 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200584 ar9580_1p0_wo_xlna_rx_gain_table);
Sujith Manoharanaaa53ee2012-09-10 09:19:54 +0530585 else if (AR_SREV_9565(ah))
586 INIT_INI_ARRAY(&ah->iniModesRxGain,
587 ar9565_1p0_common_wo_xlna_rx_gain_table);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530588 else
589 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200590 ar9300Common_wo_xlna_rx_gain_table_2p2);
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530591}
592
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530593static void ar9003_rx_gain_table_mode2(struct ath_hw *ah)
594{
Sujith Manoharanc91ec462012-02-22 12:40:03 +0530595 if (AR_SREV_9462_20(ah))
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530596 INIT_INI_ARRAY(&ah->iniModesRxGain,
Felix Fietkaua3645172012-07-15 19:53:33 +0200597 ar9462_common_mixed_rx_gain_table_2p0);
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530598}
599
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400600static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
601{
602 switch (ar9003_hw_get_rx_gain_idx(ah)) {
603 case 0:
604 default:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530605 ar9003_rx_gain_table_mode0(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400606 break;
607 case 1:
Senthil Balasubramanian4d0707e2011-09-13 22:38:17 +0530608 ar9003_rx_gain_table_mode1(ah);
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400609 break;
Senthil Balasubramanian2577c6e2011-09-13 22:38:18 +0530610 case 2:
611 ar9003_rx_gain_table_mode2(ah);
612 break;
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400613 }
614}
615
616/* set gain table pointers according to values read from the eeprom */
617static void ar9003_hw_init_mode_gain_regs(struct ath_hw *ah)
618{
619 ar9003_tx_gain_table_apply(ah);
620 ar9003_rx_gain_table_apply(ah);
621}
622
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400623/*
624 * Helper for ASPM support.
625 *
626 * Disable PLL when in L0s as well as receiver clock when in L1.
627 * This power saving option must be enabled through the SerDes.
628 *
629 * Programming the SerDes must go through the same 288 bit serial shift
630 * register as the other analog registers. Hence the 9 writes.
631 */
632static void ar9003_hw_configpcipowersave(struct ath_hw *ah,
Stanislaw Gruszka84c87dc2011-08-05 13:10:32 +0200633 bool power_off)
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400634{
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400635 /* Nothing to do on restore for 11N */
Stanislaw Gruszka84c87dc2011-08-05 13:10:32 +0200636 if (!power_off /* !restore */) {
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400637 /* set bit 19 to allow forcing of pcie core into L1 state */
638 REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
639
640 /* Several PCIe massages to ensure proper behaviour */
641 if (ah->config.pcie_waen)
642 REG_WRITE(ah, AR_WA, ah->config.pcie_waen);
Luis R. Rodriguez9a658d22010-06-21 18:38:47 -0400643 else
644 REG_WRITE(ah, AR_WA, ah->WARegVal);
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400645 }
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400646
647 /*
648 * Configire PCIE after Ini init. SERDES values now come from ini file
649 * This enables PCIe low power mode.
650 */
Luis R. Rodriguez6a0ec302010-06-21 18:38:49 -0400651 if (ah->config.pcieSerDesWrite) {
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400652 unsigned int i;
Luis R. Rodriguezd5c4d192010-06-21 18:38:50 -0400653 struct ar5416IniArray *array;
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400654
Luis R. Rodriguezd5c4d192010-06-21 18:38:50 -0400655 array = power_off ? &ah->iniPcieSerdes :
656 &ah->iniPcieSerdesLowPower;
657
658 for (i = 0; i < array->ia_rows; i++) {
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400659 REG_WRITE(ah,
Luis R. Rodriguezd5c4d192010-06-21 18:38:50 -0400660 INI_RA(array, i, 0),
661 INI_RA(array, i, 1));
Luis R. Rodriguez653fe372010-06-21 18:38:48 -0400662 }
663 }
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400664}
665
666/* Sets up the AR9003 hardware familiy callbacks */
667void ar9003_hw_attach_ops(struct ath_hw *ah)
668{
669 struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
670 struct ath_hw_ops *ops = ath9k_hw_ops(ah);
671
672 priv_ops->init_mode_regs = ar9003_hw_init_mode_regs;
Luis R. Rodriguezc14a85d2010-04-15 17:39:21 -0400673 priv_ops->init_mode_gain_regs = ar9003_hw_init_mode_gain_regs;
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400674
675 ops->config_pci_powersave = ar9003_hw_configpcipowersave;
676
677 ar9003_hw_attach_phy_ops(ah);
678 ar9003_hw_attach_calib_ops(ah);
679 ar9003_hw_attach_mac_ops(ah);
Luis R. Rodriguezb3950e62010-04-15 17:39:03 -0400680}