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: Gábor Stefanik <netrolller.3d@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
867b2efe68
commit
64e368bf9c
|
@ -1456,7 +1456,8 @@ static u16 b43_antenna_to_phyctl(int antenna)
|
|||
return B43_TXH_PHY_ANT2;
|
||||
case B43_ANTENNA3:
|
||||
return B43_TXH_PHY_ANT3;
|
||||
case B43_ANTENNA_AUTO:
|
||||
case B43_ANTENNA_AUTO0:
|
||||
case B43_ANTENNA_AUTO1:
|
||||
return B43_TXH_PHY_ANT01AUTO;
|
||||
}
|
||||
B43_WARN_ON(1);
|
||||
|
|
|
@ -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_BBANDCFG_RXANT;
|
||||
tmp |= (autodiv ? B43_ANTENNA_AUTO0 : antenna)
|
||||
tmp |= (autodiv ? B43_ANTENNA_AUTO1 : antenna)
|
||||
<< B43_PHY_BBANDCFG_RXANT_SHIFT;
|
||||
b43_phy_write(dev, B43_PHY_BBANDCFG, tmp);
|
||||
|
||||
|
|
|
@ -49,11 +49,11 @@ enum b43_interference_mitigation {
|
|||
|
||||
/* Antenna identifiers */
|
||||
enum {
|
||||
B43_ANTENNA0, /* Antenna 0 */
|
||||
B43_ANTENNA1, /* Antenna 0 */
|
||||
B43_ANTENNA_AUTO1, /* Automatic, starting with antenna 1 */
|
||||
B43_ANTENNA_AUTO0, /* Automatic, starting with antenna 0 */
|
||||
B43_ANTENNA2,
|
||||
B43_ANTENNA0 = 0, /* Antenna 0 */
|
||||
B43_ANTENNA1 = 1, /* Antenna 1 */
|
||||
B43_ANTENNA_AUTO0 = 2, /* Automatic, starting with antenna 0 */
|
||||
B43_ANTENNA_AUTO1 = 3, /* Automatic, starting with antenna 1 */
|
||||
B43_ANTENNA2 = 4,
|
||||
B43_ANTENNA3 = 8,
|
||||
|
||||
B43_ANTENNA_AUTO = B43_ANTENNA_AUTO0,
|
||||
|
|
|
@ -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_BBANDCFG_RXANT;
|
||||
tmp |= (autodiv ? B43_ANTENNA_AUTO0 : antenna)
|
||||
tmp |= (autodiv ? B43_ANTENNA_AUTO1 : antenna)
|
||||
<< B43_PHY_BBANDCFG_RXANT_SHIFT;
|
||||
b43_phy_write(dev, B43_PHY_BBANDCFG, tmp);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
//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)
|
||||
|
|
Loading…
Reference in New Issue