Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: make forcing clock common (HT-PHY also uses that)

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
f6a3e99d 6a461c23

+38 -36
+32
drivers/net/wireless/b43/phy_common.c
··· 448 448 channel_type == NL80211_CHAN_HT40PLUS); 449 449 } 450 450 451 + /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/BmacPhyClkFgc */ 452 + void b43_phy_force_clock(struct b43_wldev *dev, bool force) 453 + { 454 + u32 tmp; 455 + 456 + WARN_ON(dev->phy.type != B43_PHYTYPE_N && 457 + dev->phy.type != B43_PHYTYPE_HT); 458 + 459 + switch (dev->dev->bus_type) { 460 + #ifdef CONFIG_B43_BCMA 461 + case B43_BUS_BCMA: 462 + tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); 463 + if (force) 464 + tmp |= BCMA_IOCTL_FGC; 465 + else 466 + tmp &= ~BCMA_IOCTL_FGC; 467 + bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); 468 + break; 469 + #endif 470 + #ifdef CONFIG_B43_SSB 471 + case B43_BUS_SSB: 472 + tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); 473 + if (force) 474 + tmp |= SSB_TMSLOW_FGC; 475 + else 476 + tmp &= ~SSB_TMSLOW_FGC; 477 + ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); 478 + break; 479 + #endif 480 + } 481 + } 482 + 451 483 /* http://bcm-v4.sipsolutions.net/802.11/PHY/Cordic */ 452 484 struct b43_c32 b43_cordic(int theta) 453 485 {
+2
drivers/net/wireless/b43/phy_common.h
··· 444 444 445 445 bool b43_channel_type_is_40mhz(enum nl80211_channel_type channel_type); 446 446 447 + void b43_phy_force_clock(struct b43_wldev *dev, bool force); 448 + 447 449 struct b43_c32 b43_cordic(int theta); 448 450 449 451 #endif /* LINUX_B43_PHY_COMMON_H_ */
+4 -36
drivers/net/wireless/b43/phy_n.c
··· 600 600 } 601 601 } 602 602 603 - /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/BmacPhyClkFgc */ 604 - static void b43_nphy_bmac_clock_fgc(struct b43_wldev *dev, bool force) 605 - { 606 - u32 tmp; 607 - 608 - if (dev->phy.type != B43_PHYTYPE_N) 609 - return; 610 - 611 - switch (dev->dev->bus_type) { 612 - #ifdef CONFIG_B43_BCMA 613 - case B43_BUS_BCMA: 614 - tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); 615 - if (force) 616 - tmp |= BCMA_IOCTL_FGC; 617 - else 618 - tmp &= ~BCMA_IOCTL_FGC; 619 - bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); 620 - break; 621 - #endif 622 - #ifdef CONFIG_B43_SSB 623 - case B43_BUS_SSB: 624 - tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); 625 - if (force) 626 - tmp |= SSB_TMSLOW_FGC; 627 - else 628 - tmp &= ~SSB_TMSLOW_FGC; 629 - ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); 630 - break; 631 - #endif 632 - } 633 - } 634 - 635 603 /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/CCA */ 636 604 static void b43_nphy_reset_cca(struct b43_wldev *dev) 637 605 { 638 606 u16 bbcfg; 639 607 640 - b43_nphy_bmac_clock_fgc(dev, 1); 608 + b43_phy_force_clock(dev, 1); 641 609 bbcfg = b43_phy_read(dev, B43_NPHY_BBCFG); 642 610 b43_phy_write(dev, B43_NPHY_BBCFG, bbcfg | B43_NPHY_BBCFG_RSTCCA); 643 611 udelay(1); 644 612 b43_phy_write(dev, B43_NPHY_BBCFG, bbcfg & ~B43_NPHY_BBCFG_RSTCCA); 645 - b43_nphy_bmac_clock_fgc(dev, 0); 613 + b43_phy_force_clock(dev, 0); 646 614 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); 647 615 } 648 616 ··· 3683 3715 b43_nphy_workarounds(dev); 3684 3716 3685 3717 /* Reset CCA, in init code it differs a little from standard way */ 3686 - b43_nphy_bmac_clock_fgc(dev, 1); 3718 + b43_phy_force_clock(dev, 1); 3687 3719 tmp = b43_phy_read(dev, B43_NPHY_BBCFG); 3688 3720 b43_phy_write(dev, B43_NPHY_BBCFG, tmp | B43_NPHY_BBCFG_RSTCCA); 3689 3721 b43_phy_write(dev, B43_NPHY_BBCFG, tmp & ~B43_NPHY_BBCFG_RSTCCA); 3690 - b43_nphy_bmac_clock_fgc(dev, 0); 3722 + b43_phy_force_clock(dev, 0); 3691 3723 3692 3724 b43_mac_phy_clock_set(dev, true); 3693 3725