Lines Matching refs:ah
55 void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum) in ath9k_hw_init_btcoex_hw() argument
57 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_init_btcoex_hw()
71 if (AR_SREV_9300_20_OR_LATER(ah)) in ath9k_hw_init_btcoex_hw()
93 void ath9k_hw_btcoex_init_scheme(struct ath_hw *ah) in ath9k_hw_btcoex_init_scheme() argument
95 struct ath_common *common = ath9k_hw_common(ah); in ath9k_hw_btcoex_init_scheme()
96 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_init_scheme()
106 if (ah->caps.hw_caps & ATH9K_HW_CAP_MCI) { in ath9k_hw_btcoex_init_scheme()
108 } else if (AR_SREV_9300_20_OR_LATER(ah)) { in ath9k_hw_btcoex_init_scheme()
113 } else if (AR_SREV_9280_20_OR_LATER(ah)) { in ath9k_hw_btcoex_init_scheme()
117 if (AR_SREV_9285(ah)) { in ath9k_hw_btcoex_init_scheme()
127 void ath9k_hw_btcoex_init_2wire(struct ath_hw *ah) in ath9k_hw_btcoex_init_2wire() argument
129 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_init_2wire()
132 REG_CLR_BIT(ah, AR_GPIO_INPUT_EN_VAL, in ath9k_hw_btcoex_init_2wire()
136 REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, in ath9k_hw_btcoex_init_2wire()
140 REG_RMW_FIELD(ah, AR_GPIO_INPUT_MUX1, in ath9k_hw_btcoex_init_2wire()
145 ath9k_hw_cfg_gpio_input(ah, btcoex_hw->btactive_gpio); in ath9k_hw_btcoex_init_2wire()
149 void ath9k_hw_btcoex_init_3wire(struct ath_hw *ah) in ath9k_hw_btcoex_init_3wire() argument
151 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_init_3wire()
154 REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, in ath9k_hw_btcoex_init_3wire()
160 REG_RMW_FIELD(ah, AR_GPIO_INPUT_MUX1, in ath9k_hw_btcoex_init_3wire()
164 REG_RMW_FIELD(ah, AR_GPIO_INPUT_MUX1, in ath9k_hw_btcoex_init_3wire()
170 ath9k_hw_cfg_gpio_input(ah, btcoex_hw->btactive_gpio); in ath9k_hw_btcoex_init_3wire()
171 ath9k_hw_cfg_gpio_input(ah, btcoex_hw->btpriority_gpio); in ath9k_hw_btcoex_init_3wire()
175 void ath9k_hw_btcoex_init_mci(struct ath_hw *ah) in ath9k_hw_btcoex_init_mci() argument
177 ah->btcoex_hw.mci.ready = false; in ath9k_hw_btcoex_init_mci()
178 ah->btcoex_hw.mci.bt_state = 0; in ath9k_hw_btcoex_init_mci()
179 ah->btcoex_hw.mci.bt_ver_major = 3; in ath9k_hw_btcoex_init_mci()
180 ah->btcoex_hw.mci.bt_ver_minor = 0; in ath9k_hw_btcoex_init_mci()
181 ah->btcoex_hw.mci.bt_version_known = false; in ath9k_hw_btcoex_init_mci()
182 ah->btcoex_hw.mci.update_2g5g = true; in ath9k_hw_btcoex_init_mci()
183 ah->btcoex_hw.mci.is_2g = true; in ath9k_hw_btcoex_init_mci()
184 ah->btcoex_hw.mci.wlan_channels_update = false; in ath9k_hw_btcoex_init_mci()
185 ah->btcoex_hw.mci.wlan_channels[0] = 0x00000000; in ath9k_hw_btcoex_init_mci()
186 ah->btcoex_hw.mci.wlan_channels[1] = 0xffffffff; in ath9k_hw_btcoex_init_mci()
187 ah->btcoex_hw.mci.wlan_channels[2] = 0xffffffff; in ath9k_hw_btcoex_init_mci()
188 ah->btcoex_hw.mci.wlan_channels[3] = 0x7fffffff; in ath9k_hw_btcoex_init_mci()
189 ah->btcoex_hw.mci.query_bt = true; in ath9k_hw_btcoex_init_mci()
190 ah->btcoex_hw.mci.unhalt_bt_gpm = true; in ath9k_hw_btcoex_init_mci()
191 ah->btcoex_hw.mci.halted_bt_gpm = false; in ath9k_hw_btcoex_init_mci()
192 ah->btcoex_hw.mci.need_flush_btinfo = false; in ath9k_hw_btcoex_init_mci()
193 ah->btcoex_hw.mci.wlan_cal_seq = 0; in ath9k_hw_btcoex_init_mci()
194 ah->btcoex_hw.mci.wlan_cal_done = 0; in ath9k_hw_btcoex_init_mci()
195 ah->btcoex_hw.mci.config = (AR_SREV_9462(ah)) ? 0x2201 : 0xa4c1; in ath9k_hw_btcoex_init_mci()
199 static void ath9k_hw_btcoex_enable_2wire(struct ath_hw *ah) in ath9k_hw_btcoex_enable_2wire() argument
201 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_enable_2wire()
204 ath9k_hw_cfg_output(ah, btcoex_hw->wlanactive_gpio, in ath9k_hw_btcoex_enable_2wire()
212 void ath9k_hw_btcoex_set_weight(struct ath_hw *ah, in ath9k_hw_btcoex_set_weight() argument
217 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_set_weight()
218 struct ath9k_hw_mci *mci_hw = &ah->btcoex_hw.mci; in ath9k_hw_btcoex_set_weight()
224 if (!AR_SREV_9300_20_OR_LATER(ah)) { in ath9k_hw_btcoex_set_weight()
231 if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) { in ath9k_hw_btcoex_set_weight()
261 static void ath9k_hw_btcoex_enable_3wire(struct ath_hw *ah) in ath9k_hw_btcoex_enable_3wire() argument
263 struct ath_btcoex_hw *btcoex = &ah->btcoex_hw; in ath9k_hw_btcoex_enable_3wire()
271 REG_WRITE(ah, AR_BT_COEX_MODE, btcoex->bt_coex_mode); in ath9k_hw_btcoex_enable_3wire()
272 REG_WRITE(ah, AR_BT_COEX_MODE2, btcoex->bt_coex_mode2); in ath9k_hw_btcoex_enable_3wire()
275 if (AR_SREV_9300_20_OR_LATER(ah)) { in ath9k_hw_btcoex_enable_3wire()
276 REG_WRITE(ah, AR_BT_COEX_WL_WEIGHTS0, btcoex->wlan_weight[0]); in ath9k_hw_btcoex_enable_3wire()
277 REG_WRITE(ah, AR_BT_COEX_WL_WEIGHTS1, btcoex->wlan_weight[1]); in ath9k_hw_btcoex_enable_3wire()
279 REG_WRITE(ah, AR_BT_COEX_BT_WEIGHTS(i), in ath9k_hw_btcoex_enable_3wire()
282 REG_WRITE(ah, AR_BT_COEX_WEIGHT, btcoex->bt_coex_weights); in ath9k_hw_btcoex_enable_3wire()
286 if (AR_SREV_9271(ah)) { in ath9k_hw_btcoex_enable_3wire()
287 val = REG_READ(ah, 0x50040); in ath9k_hw_btcoex_enable_3wire()
289 REG_WRITE(ah, 0x50040, val); in ath9k_hw_btcoex_enable_3wire()
292 REG_RMW_FIELD(ah, AR_QUIET1, AR_QUIET1_QUIET_ACK_CTS_ENABLE, 1); in ath9k_hw_btcoex_enable_3wire()
293 REG_RMW_FIELD(ah, AR_PCU_MISC, AR_PCU_BT_ANT_PREVENT_RX, 0); in ath9k_hw_btcoex_enable_3wire()
295 ath9k_hw_cfg_output(ah, btcoex->wlanactive_gpio, in ath9k_hw_btcoex_enable_3wire()
299 static void ath9k_hw_btcoex_enable_mci(struct ath_hw *ah) in ath9k_hw_btcoex_enable_mci() argument
301 struct ath_btcoex_hw *btcoex = &ah->btcoex_hw; in ath9k_hw_btcoex_enable_mci()
305 REG_WRITE(ah, AR_MCI_COEX_WL_WEIGHTS(i), in ath9k_hw_btcoex_enable_mci()
308 REG_RMW_FIELD(ah, AR_QUIET1, AR_QUIET1_QUIET_ACK_CTS_ENABLE, 1); in ath9k_hw_btcoex_enable_mci()
312 static void ath9k_hw_btcoex_disable_mci(struct ath_hw *ah) in ath9k_hw_btcoex_disable_mci() argument
314 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_disable_mci()
317 ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_NONE); in ath9k_hw_btcoex_disable_mci()
320 REG_WRITE(ah, AR_MCI_COEX_WL_WEIGHTS(i), in ath9k_hw_btcoex_disable_mci()
324 void ath9k_hw_btcoex_enable(struct ath_hw *ah) in ath9k_hw_btcoex_enable() argument
326 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_enable()
328 switch (ath9k_hw_get_btcoex_scheme(ah)) { in ath9k_hw_btcoex_enable()
332 ath9k_hw_btcoex_enable_2wire(ah); in ath9k_hw_btcoex_enable()
335 ath9k_hw_btcoex_enable_3wire(ah); in ath9k_hw_btcoex_enable()
338 ath9k_hw_btcoex_enable_mci(ah); in ath9k_hw_btcoex_enable()
342 if (ath9k_hw_get_btcoex_scheme(ah) != ATH_BTCOEX_CFG_MCI) { in ath9k_hw_btcoex_enable()
343 REG_RMW(ah, AR_GPIO_PDPU, in ath9k_hw_btcoex_enable()
348 ah->btcoex_hw.enabled = true; in ath9k_hw_btcoex_enable()
352 void ath9k_hw_btcoex_disable(struct ath_hw *ah) in ath9k_hw_btcoex_disable() argument
354 struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw; in ath9k_hw_btcoex_disable()
359 if (ath9k_hw_get_btcoex_scheme(ah) == ATH_BTCOEX_CFG_MCI) { in ath9k_hw_btcoex_disable()
360 ath9k_hw_btcoex_disable_mci(ah); in ath9k_hw_btcoex_disable()
364 if (!AR_SREV_9300_20_OR_LATER(ah)) in ath9k_hw_btcoex_disable()
365 ath9k_hw_set_gpio(ah, btcoex_hw->wlanactive_gpio, 0); in ath9k_hw_btcoex_disable()
367 ath9k_hw_cfg_output(ah, btcoex_hw->wlanactive_gpio, in ath9k_hw_btcoex_disable()
371 REG_WRITE(ah, AR_BT_COEX_MODE, AR_BT_QUIET | AR_BT_MODE); in ath9k_hw_btcoex_disable()
372 REG_WRITE(ah, AR_BT_COEX_MODE2, 0); in ath9k_hw_btcoex_disable()
374 if (AR_SREV_9300_20_OR_LATER(ah)) { in ath9k_hw_btcoex_disable()
375 REG_WRITE(ah, AR_BT_COEX_WL_WEIGHTS0, 0); in ath9k_hw_btcoex_disable()
376 REG_WRITE(ah, AR_BT_COEX_WL_WEIGHTS1, 0); in ath9k_hw_btcoex_disable()
378 REG_WRITE(ah, AR_BT_COEX_BT_WEIGHTS(i), 0); in ath9k_hw_btcoex_disable()
380 REG_WRITE(ah, AR_BT_COEX_WEIGHT, 0); in ath9k_hw_btcoex_disable()
389 void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah, in ath9k_hw_btcoex_bt_stomp() argument
392 if (AR_SREV_9300_20_OR_LATER(ah)) { in ath9k_hw_btcoex_bt_stomp()
393 ath9k_hw_btcoex_set_weight(ah, 0, 0, stomp_type); in ath9k_hw_btcoex_bt_stomp()
399 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT, in ath9k_hw_btcoex_bt_stomp()
403 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT, in ath9k_hw_btcoex_bt_stomp()
407 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT, in ath9k_hw_btcoex_bt_stomp()
411 ath_dbg(ath9k_hw_common(ah), BTCOEX, "Invalid Stomptype\n"); in ath9k_hw_btcoex_bt_stomp()
417 void ath9k_hw_btcoex_set_concur_txprio(struct ath_hw *ah, u8 *stomp_txprio) in ath9k_hw_btcoex_set_concur_txprio() argument
419 struct ath_btcoex_hw *btcoex = &ah->btcoex_hw; in ath9k_hw_btcoex_set_concur_txprio()