Commit c9325e2f authored by Rafał Miłecki's avatar Rafał Miłecki Committed by John W. Linville
Browse files

b43: N-PHY: set band on every channel switch



Seems to be required by some hardware, wl does it every time.

Signed-off-by: default avatarRafał Miłecki <zajec5@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent ef0d635e
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -6058,23 +6058,23 @@ static void b43_nphy_channel_setup(struct b43_wldev *dev,
	struct b43_phy *phy = &dev->phy;
	struct b43_phy_n *nphy = dev->phy.n;
	int ch = new_channel->hw_value;

	u16 old_band_5ghz;
	u16 tmp16;

	old_band_5ghz =
		b43_phy_read(dev, B43_NPHY_BANDCTL) & B43_NPHY_BANDCTL_5GHZ;
	if (new_channel->band == IEEE80211_BAND_5GHZ && !old_band_5ghz) {
	if (new_channel->band == IEEE80211_BAND_5GHZ) {
		tmp16 = b43_read16(dev, B43_MMIO_PSM_PHY_HDR);
		b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4);
		b43_phy_set(dev, B43_PHY_B_BBCFG, 0xC000);
		/* Put BPHY in the reset */
		b43_phy_set(dev, B43_PHY_B_BBCFG,
			    B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX);
		b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16);
		b43_phy_set(dev, B43_NPHY_BANDCTL, B43_NPHY_BANDCTL_5GHZ);
	} else if (new_channel->band == IEEE80211_BAND_2GHZ && old_band_5ghz) {
	} else if (new_channel->band == IEEE80211_BAND_2GHZ) {
		b43_phy_mask(dev, B43_NPHY_BANDCTL, ~B43_NPHY_BANDCTL_5GHZ);
		tmp16 = b43_read16(dev, B43_MMIO_PSM_PHY_HDR);
		b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4);
		b43_phy_mask(dev, B43_PHY_B_BBCFG, 0x3FFF);
		/* Take BPHY out of the reset */
		b43_phy_mask(dev, B43_PHY_B_BBCFG,
			     (u16)~(B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX));
		b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16);
	}

+2 −0
Original line number Diff line number Diff line
@@ -869,6 +869,8 @@
#define B43_NPHY_REV7_RF_CTL_OVER6		B43_PHY_N(0x347)

#define B43_PHY_B_BBCFG				B43_PHY_N_BMODE(0x001) /* BB config */
#define  B43_PHY_B_BBCFG_RSTCCA			0x4000 /* Reset CCA */
#define  B43_PHY_B_BBCFG_RSTRX			0x8000 /* Reset RX */
#define B43_PHY_B_TEST				B43_PHY_N_BMODE(0x00A)

struct b43_wldev;