diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2010-01-17 07:03:28 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-01-19 16:31:27 -0500 |
commit | 026816fce48390807859508cd5172e9c79901ef7 (patch) | |
tree | c43174e39ee1c92160827b45ca6d540019b04ced | |
parent | c6fcf6bcfc3cfc1c00cc7fd9610cfa2b1a18041f (diff) |
b43: N-PHY: implement RX PHY cleanup and setup
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/b43/phy_n.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c index 4a817e3da163..a1dd381c6c6e 100644 --- a/drivers/net/wireless/b43/phy_n.c +++ b/drivers/net/wireless/b43/phy_n.c | |||
@@ -480,6 +480,88 @@ static void b43_nphy_rx_iq_coeffs(struct b43_wldev *dev, bool write, | |||
480 | } | 480 | } |
481 | } | 481 | } |
482 | 482 | ||
483 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RxCalPhyCleanup */ | ||
484 | static void b43_nphy_rx_cal_phy_cleanup(struct b43_wldev *dev, u8 core) | ||
485 | { | ||
486 | u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs; | ||
487 | |||
488 | b43_phy_write(dev, B43_NPHY_RFSEQCA, regs[0]); | ||
489 | if (core == 0) { | ||
490 | b43_phy_write(dev, B43_NPHY_AFECTL_C1, regs[1]); | ||
491 | b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, regs[2]); | ||
492 | } else { | ||
493 | b43_phy_write(dev, B43_NPHY_AFECTL_C2, regs[1]); | ||
494 | b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[2]); | ||
495 | } | ||
496 | b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[3]); | ||
497 | b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[4]); | ||
498 | b43_phy_write(dev, B43_NPHY_RFCTL_RSSIO1, regs[5]); | ||
499 | b43_phy_write(dev, B43_NPHY_RFCTL_RSSIO2, regs[6]); | ||
500 | b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S1, regs[7]); | ||
501 | b43_phy_write(dev, B43_NPHY_RFCTL_OVER, regs[8]); | ||
502 | b43_phy_write(dev, B43_NPHY_PAPD_EN0, regs[9]); | ||
503 | b43_phy_write(dev, B43_NPHY_PAPD_EN1, regs[10]); | ||
504 | } | ||
505 | |||
506 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RxCalPhySetup */ | ||
507 | static void b43_nphy_rx_cal_phy_setup(struct b43_wldev *dev, u8 core) | ||
508 | { | ||
509 | u8 rxval, txval; | ||
510 | u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs; | ||
511 | |||
512 | regs[0] = b43_phy_read(dev, B43_NPHY_RFSEQCA); | ||
513 | if (core == 0) { | ||
514 | regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C1); | ||
515 | regs[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER1); | ||
516 | } else { | ||
517 | regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2); | ||
518 | regs[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); | ||
519 | } | ||
520 | regs[3] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1); | ||
521 | regs[4] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2); | ||
522 | regs[5] = b43_phy_read(dev, B43_NPHY_RFCTL_RSSIO1); | ||
523 | regs[6] = b43_phy_read(dev, B43_NPHY_RFCTL_RSSIO2); | ||
524 | regs[7] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B1S1); | ||
525 | regs[8] = b43_phy_read(dev, B43_NPHY_RFCTL_OVER); | ||
526 | regs[9] = b43_phy_read(dev, B43_NPHY_PAPD_EN0); | ||
527 | regs[10] = b43_phy_read(dev, B43_NPHY_PAPD_EN1); | ||
528 | |||
529 | b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x0001); | ||
530 | b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x0001); | ||
531 | |||
532 | b43_phy_maskset(dev, B43_NPHY_RFSEQCA, (u16)~B43_NPHY_RFSEQCA_RXDIS, | ||
533 | ((1 - core) << B43_NPHY_RFSEQCA_RXDIS_SHIFT)); | ||
534 | b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_TXEN, | ||
535 | ((1 - core) << B43_NPHY_RFSEQCA_TXEN_SHIFT)); | ||
536 | b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_RXEN, | ||
537 | (core << B43_NPHY_RFSEQCA_RXEN_SHIFT)); | ||
538 | b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_TXDIS, | ||
539 | (core << B43_NPHY_RFSEQCA_TXDIS_SHIFT)); | ||
540 | |||
541 | if (core == 0) { | ||
542 | b43_phy_mask(dev, B43_NPHY_AFECTL_C1, ~0x0007); | ||
543 | b43_phy_set(dev, B43_NPHY_AFECTL_OVER1, 0x0007); | ||
544 | } else { | ||
545 | b43_phy_mask(dev, B43_NPHY_AFECTL_C2, ~0x0007); | ||
546 | b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x0007); | ||
547 | } | ||
548 | |||
549 | /* TODO: Call N PHY RF Ctrl Intc Override with 2, 0, 3 as arguments */ | ||
550 | /* TODO: Call N PHY RF Intc Override with 8, 0, 3, 0 as arguments */ | ||
551 | /* TODO: Call N PHY RF Seq with 0 as argument */ | ||
552 | |||
553 | if (core == 0) { | ||
554 | rxval = 1; | ||
555 | txval = 8; | ||
556 | } else { | ||
557 | rxval = 4; | ||
558 | txval = 2; | ||
559 | } | ||
560 | |||
561 | /* TODO: Call N PHY RF Ctrl Intc Override with 1, rxval, (core + 1) */ | ||
562 | /* TODO: Call N PHY RF Ctrl Intc Override with 1, txval, (2 - core) */ | ||
563 | } | ||
564 | |||
483 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/CalcRxIqComp */ | 565 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/CalcRxIqComp */ |
484 | static void b43_nphy_calc_rx_iq_comp(struct b43_wldev *dev, u8 mask) | 566 | static void b43_nphy_calc_rx_iq_comp(struct b43_wldev *dev, u8 mask) |
485 | { | 567 | { |