aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSujith Manoharan <c_manoha@qca.qualcomm.com>2015-03-14 01:57:56 -0400
committerKalle Valo <kvalo@codeaurora.org>2015-03-20 02:28:11 -0400
commit60544603b669a25adb90bd6e2ea6fa625e380322 (patch)
tree922c9b69837cec29ae1d85625162c1a02ae9ee27
parentf2ef792a80859ecdabeaf5bf960ad97a9dd81fc6 (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.c28
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_aic.h1
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_mci.c4
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
165static void ar9003_aic_cal_start(struct ath_hw *ah, u8 min_valid_count) 165static 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
262static bool ar9003_aic_cal_post_process(struct ath_hw *ah) 264static bool ar9003_aic_cal_post_process(struct ath_hw *ah)
@@ -513,6 +515,28 @@ exit:
513 515
514} 516}
515 517
518u8 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
516u8 ar9003_aic_start_normal(struct ath_hw *ah) 540u8 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
56u8 ar9003_aic_calibration(struct ath_hw *ah);
56u8 ar9003_aic_start_normal(struct ath_hw *ah); 57u8 ar9003_aic_start_normal(struct ath_hw *ah);
57u8 ar9003_aic_cal_reset(struct ath_hw *ah); 58u8 ar9003_aic_cal_reset(struct ath_hw *ah);
58u8 ar9003_aic_calibration_single(struct ath_hw *ah); 59u8 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);