aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/ar9002_hw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9002_hw.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9002_hw.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
index 303c63da5ea3..94392daebaa0 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
@@ -580,3 +580,53 @@ void ar9002_hw_attach_ops(struct ath_hw *ah)
580 else 580 else
581 ath9k_hw_attach_ani_ops_old(ah); 581 ath9k_hw_attach_ani_ops_old(ah);
582} 582}
583
584void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan)
585{
586 u32 modesIndex;
587 int i;
588
589 switch (chan->chanmode) {
590 case CHANNEL_A:
591 case CHANNEL_A_HT20:
592 modesIndex = 1;
593 break;
594 case CHANNEL_A_HT40PLUS:
595 case CHANNEL_A_HT40MINUS:
596 modesIndex = 2;
597 break;
598 case CHANNEL_G:
599 case CHANNEL_G_HT20:
600 case CHANNEL_B:
601 modesIndex = 4;
602 break;
603 case CHANNEL_G_HT40PLUS:
604 case CHANNEL_G_HT40MINUS:
605 modesIndex = 3;
606 break;
607
608 default:
609 return;
610 }
611
612 ENABLE_REGWRITE_BUFFER(ah);
613
614 for (i = 0; i < ah->iniModes_9271_ANI_reg.ia_rows; i++) {
615 u32 reg = INI_RA(&ah->iniModes_9271_ANI_reg, i, 0);
616 u32 val = INI_RA(&ah->iniModes_9271_ANI_reg, i, modesIndex);
617 u32 val_orig;
618
619 if (reg == AR_PHY_CCK_DETECT) {
620 val_orig = REG_READ(ah, reg);
621 val &= AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK;
622 val_orig &= ~AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK;
623
624 REG_WRITE(ah, reg, val|val_orig);
625 } else
626 REG_WRITE(ah, reg, val);
627 }
628
629 REGWRITE_BUFFER_FLUSH(ah);
630 DISABLE_REGWRITE_BUFFER(ah);
631
632}