提交 64e368bf 编写于 作者: G Gábor Stefanik 提交者: John W. Linville

b43: Implement antenna diversity support for LP-PHY

The A/G-PHY changes are fallout fixes from the enum change,
which in turn allows the LP-PHY code to be much simpler.
The antenna_to_phyctl change is a fix for a potential
existing bug that this patch may otherwise trigger.
Signed-off-by: NGábor Stefanik <netrolller.3d@gmail.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 867b2efe
...@@ -1456,7 +1456,8 @@ static u16 b43_antenna_to_phyctl(int antenna) ...@@ -1456,7 +1456,8 @@ static u16 b43_antenna_to_phyctl(int antenna)
return B43_TXH_PHY_ANT2; return B43_TXH_PHY_ANT2;
case B43_ANTENNA3: case B43_ANTENNA3:
return B43_TXH_PHY_ANT3; return B43_TXH_PHY_ANT3;
case B43_ANTENNA_AUTO: case B43_ANTENNA_AUTO0:
case B43_ANTENNA_AUTO1:
return B43_TXH_PHY_ANT01AUTO; return B43_TXH_PHY_ANT01AUTO;
} }
B43_WARN_ON(1); B43_WARN_ON(1);
......
...@@ -531,7 +531,7 @@ static void b43_aphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna) ...@@ -531,7 +531,7 @@ static void b43_aphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna)
tmp = b43_phy_read(dev, B43_PHY_BBANDCFG); tmp = b43_phy_read(dev, B43_PHY_BBANDCFG);
tmp &= ~B43_PHY_BBANDCFG_RXANT; tmp &= ~B43_PHY_BBANDCFG_RXANT;
tmp |= (autodiv ? B43_ANTENNA_AUTO0 : antenna) tmp |= (autodiv ? B43_ANTENNA_AUTO1 : antenna)
<< B43_PHY_BBANDCFG_RXANT_SHIFT; << B43_PHY_BBANDCFG_RXANT_SHIFT;
b43_phy_write(dev, B43_PHY_BBANDCFG, tmp); b43_phy_write(dev, B43_PHY_BBANDCFG, tmp);
......
...@@ -49,11 +49,11 @@ enum b43_interference_mitigation { ...@@ -49,11 +49,11 @@ enum b43_interference_mitigation {
/* Antenna identifiers */ /* Antenna identifiers */
enum { enum {
B43_ANTENNA0, /* Antenna 0 */ B43_ANTENNA0 = 0, /* Antenna 0 */
B43_ANTENNA1, /* Antenna 0 */ B43_ANTENNA1 = 1, /* Antenna 1 */
B43_ANTENNA_AUTO1, /* Automatic, starting with antenna 1 */ B43_ANTENNA_AUTO0 = 2, /* Automatic, starting with antenna 0 */
B43_ANTENNA_AUTO0, /* Automatic, starting with antenna 0 */ B43_ANTENNA_AUTO1 = 3, /* Automatic, starting with antenna 1 */
B43_ANTENNA2, B43_ANTENNA2 = 4,
B43_ANTENNA3 = 8, B43_ANTENNA3 = 8,
B43_ANTENNA_AUTO = B43_ANTENNA_AUTO0, B43_ANTENNA_AUTO = B43_ANTENNA_AUTO0,
......
...@@ -2664,7 +2664,7 @@ static void b43_gphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna) ...@@ -2664,7 +2664,7 @@ static void b43_gphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna)
tmp = b43_phy_read(dev, B43_PHY_BBANDCFG); tmp = b43_phy_read(dev, B43_PHY_BBANDCFG);
tmp &= ~B43_PHY_BBANDCFG_RXANT; tmp &= ~B43_PHY_BBANDCFG_RXANT;
tmp |= (autodiv ? B43_ANTENNA_AUTO0 : antenna) tmp |= (autodiv ? B43_ANTENNA_AUTO1 : antenna)
<< B43_PHY_BBANDCFG_RXANT_SHIFT; << B43_PHY_BBANDCFG_RXANT_SHIFT;
b43_phy_write(dev, B43_PHY_BBANDCFG, tmp); b43_phy_write(dev, B43_PHY_BBANDCFG, tmp);
......
...@@ -2205,7 +2205,14 @@ static int b43_lpphy_op_init(struct b43_wldev *dev) ...@@ -2205,7 +2205,14 @@ static int b43_lpphy_op_init(struct b43_wldev *dev)
static void b43_lpphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna) static void b43_lpphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna)
{ {
//TODO if (dev->phy.rev >= 2)
return; // rev2+ doesn't support antenna diversity
if (B43_WARN_ON(antenna > B43_ANTENNA_AUTO1))
return;
b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xFFFD, antenna & 0x2);
b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xFFFE, antenna & 0x1);
} }
static void b43_lpphy_op_adjust_txpower(struct b43_wldev *dev) static void b43_lpphy_op_adjust_txpower(struct b43_wldev *dev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册