diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2015-03-14 01:57:56 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-03-20 02:28:11 -0400 |
commit | 60544603b669a25adb90bd6e2ea6fa625e380322 (patch) | |
tree | 922c9b69837cec29ae1d85625162c1a02ae9ee27 | |
parent | f2ef792a80859ecdabeaf5bf960ad97a9dd81fc6 (diff) |
ath9k: Handle MCI_STATE_AIC_CAL
Add the main AIC calibration function to
handle MCI_STATE_AIC_CAL.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_aic.c | 28 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_aic.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_mci.c | 4 |
3 files changed, 31 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_aic.c b/drivers/net/wireless/ath/ath9k/ar9003_aic.c index 5b4f818264f5..1db119d77783 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_aic.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_aic.c | |||
@@ -162,7 +162,7 @@ static void ar9003_aic_gain_table(struct ath_hw *ah) | |||
162 | } | 162 | } |
163 | } | 163 | } |
164 | 164 | ||
165 | static void ar9003_aic_cal_start(struct ath_hw *ah, u8 min_valid_count) | 165 | static u8 ar9003_aic_cal_start(struct ath_hw *ah, u8 min_valid_count) |
166 | { | 166 | { |
167 | struct ath9k_hw_aic *aic = &ah->btcoex_hw.aic; | 167 | struct ath9k_hw_aic *aic = &ah->btcoex_hw.aic; |
168 | int i; | 168 | int i; |
@@ -257,6 +257,8 @@ static void ar9003_aic_cal_start(struct ath_hw *ah, u8 min_valid_count) | |||
257 | 257 | ||
258 | aic->aic_caled_chan = 0; | 258 | aic->aic_caled_chan = 0; |
259 | aic->aic_cal_state = AIC_CAL_STATE_STARTED; | 259 | aic->aic_cal_state = AIC_CAL_STATE_STARTED; |
260 | |||
261 | return aic->aic_cal_state; | ||
260 | } | 262 | } |
261 | 263 | ||
262 | static bool ar9003_aic_cal_post_process(struct ath_hw *ah) | 264 | static bool ar9003_aic_cal_post_process(struct ath_hw *ah) |
@@ -513,6 +515,28 @@ exit: | |||
513 | 515 | ||
514 | } | 516 | } |
515 | 517 | ||
518 | u8 ar9003_aic_calibration(struct ath_hw *ah) | ||
519 | { | ||
520 | struct ath9k_hw_aic *aic = &ah->btcoex_hw.aic; | ||
521 | u8 cal_ret = AIC_CAL_STATE_ERROR; | ||
522 | |||
523 | switch (aic->aic_cal_state) { | ||
524 | case AIC_CAL_STATE_IDLE: | ||
525 | cal_ret = ar9003_aic_cal_start(ah, 1); | ||
526 | break; | ||
527 | case AIC_CAL_STATE_STARTED: | ||
528 | cal_ret = ar9003_aic_cal_continue(ah, false); | ||
529 | break; | ||
530 | case AIC_CAL_STATE_DONE: | ||
531 | cal_ret = AIC_CAL_STATE_DONE; | ||
532 | break; | ||
533 | default: | ||
534 | break; | ||
535 | } | ||
536 | |||
537 | return cal_ret; | ||
538 | } | ||
539 | |||
516 | u8 ar9003_aic_start_normal(struct ath_hw *ah) | 540 | u8 ar9003_aic_start_normal(struct ath_hw *ah) |
517 | { | 541 | { |
518 | struct ath9k_hw_aic *aic = &ah->btcoex_hw.aic; | 542 | struct ath9k_hw_aic *aic = &ah->btcoex_hw.aic; |
@@ -561,7 +585,7 @@ u8 ar9003_aic_calibration_single(struct ath_hw *ah) | |||
561 | 585 | ||
562 | num_chan = MS(mci_hw->config, ATH_MCI_CONFIG_AIC_CAL_NUM_CHAN); | 586 | num_chan = MS(mci_hw->config, ATH_MCI_CONFIG_AIC_CAL_NUM_CHAN); |
563 | 587 | ||
564 | ar9003_aic_cal_start(ah, num_chan); | 588 | (void) ar9003_aic_cal_start(ah, num_chan); |
565 | cal_ret = ar9003_aic_cal_continue(ah, true); | 589 | cal_ret = ar9003_aic_cal_continue(ah, true); |
566 | 590 | ||
567 | return cal_ret; | 591 | return cal_ret; |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_aic.h b/drivers/net/wireless/ath/ath9k/ar9003_aic.h index 4dbff96b49cd..86f40644be43 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_aic.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_aic.h | |||
@@ -53,6 +53,7 @@ struct ath_aic_out_info { | |||
53 | struct ath_aic_sram_info sram; | 53 | struct ath_aic_sram_info sram; |
54 | }; | 54 | }; |
55 | 55 | ||
56 | u8 ar9003_aic_calibration(struct ath_hw *ah); | ||
56 | u8 ar9003_aic_start_normal(struct ath_hw *ah); | 57 | u8 ar9003_aic_start_normal(struct ath_hw *ah); |
57 | u8 ar9003_aic_cal_reset(struct ath_hw *ah); | 58 | u8 ar9003_aic_cal_reset(struct ath_hw *ah); |
58 | u8 ar9003_aic_calibration_single(struct ath_hw *ah); | 59 | u8 ar9003_aic_calibration_single(struct ath_hw *ah); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mci.c b/drivers/net/wireless/ath/ath9k/ar9003_mci.c index b559d75b748b..cdd83d4038a3 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c | |||
@@ -1363,6 +1363,10 @@ u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type) | |||
1363 | value = (!mci->unhalt_bt_gpm && mci->need_flush_btinfo) ? 1 : 0; | 1363 | value = (!mci->unhalt_bt_gpm && mci->need_flush_btinfo) ? 1 : 0; |
1364 | mci->need_flush_btinfo = false; | 1364 | mci->need_flush_btinfo = false; |
1365 | break; | 1365 | break; |
1366 | case MCI_STATE_AIC_CAL: | ||
1367 | if (ath9k_hw_is_aic_enabled(ah)) | ||
1368 | value = ar9003_aic_calibration(ah); | ||
1369 | break; | ||
1366 | case MCI_STATE_AIC_START: | 1370 | case MCI_STATE_AIC_START: |
1367 | if (ath9k_hw_is_aic_enabled(ah)) | 1371 | if (ath9k_hw_is_aic_enabled(ah)) |
1368 | ar9003_aic_start_normal(ah); | 1372 | ar9003_aic_start_normal(ah); |