Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[linux-3.10.git] / drivers / net / wireless / b43 / phy_common.c
index 7b2ea67..07f009f 100644 (file)
@@ -5,7 +5,7 @@
 
   Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>,
   Copyright (c) 2005-2007 Stefano Brivio <stefano.brivio@polimi.it>
-  Copyright (c) 2005-2008 Michael Buesch <mb@bu3sch.de>
+  Copyright (c) 2005-2008 Michael Buesch <m@bues.ch>
   Copyright (c) 2005, 2006 Danny van Dyk <kugelfang@gentoo.org>
   Copyright (c) 2005, 2006 Andreas Jaggi <andreas.jaggi@waterwave.ch>
 
@@ -31,6 +31,8 @@
 #include "phy_a.h"
 #include "phy_n.h"
 #include "phy_lp.h"
+#include "phy_ht.h"
+#include "phy_lcn.h"
 #include "b43.h"
 #include "main.h"
 
@@ -50,7 +52,7 @@ int b43_phy_allocate(struct b43_wldev *dev)
                phy->ops = &b43_phyops_g;
                break;
        case B43_PHYTYPE_N:
-#ifdef CONFIG_B43_NPHY
+#ifdef CONFIG_B43_PHY_N
                phy->ops = &b43_phyops_n;
 #endif
                break;
@@ -59,6 +61,16 @@ int b43_phy_allocate(struct b43_wldev *dev)
                phy->ops = &b43_phyops_lp;
 #endif
                break;
+       case B43_PHYTYPE_HT:
+#ifdef CONFIG_B43_PHY_HT
+               phy->ops = &b43_phyops_ht;
+#endif
+               break;
+       case B43_PHYTYPE_LCN:
+#ifdef CONFIG_B43_PHY_LCN
+               phy->ops = &b43_phyops_lcn;
+#endif
+               break;
        }
        if (B43_WARN_ON(!phy->ops))
                return -ENODEV;
@@ -168,7 +180,7 @@ void b43_phy_lock(struct b43_wldev *dev)
        B43_WARN_ON(dev->phy.phy_locked);
        dev->phy.phy_locked = 1;
 #endif
-       B43_WARN_ON(dev->dev->id.revision < 3);
+       B43_WARN_ON(dev->dev->core_rev < 3);
 
        if (!b43_is_mode(dev->wl, NL80211_IFTYPE_AP))
                b43_power_saving_ctl_bits(dev, B43_PS_AWAKE);
@@ -180,7 +192,7 @@ void b43_phy_unlock(struct b43_wldev *dev)
        B43_WARN_ON(!dev->phy.phy_locked);
        dev->phy.phy_locked = 0;
 #endif
-       B43_WARN_ON(dev->dev->id.revision < 3);
+       B43_WARN_ON(dev->dev->core_rev < 3);
 
        if (!b43_is_mode(dev->wl, NL80211_IFTYPE_AP))
                b43_power_saving_ctl_bits(dev, 0);
@@ -231,6 +243,7 @@ void b43_radio_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set)
 u16 b43_phy_read(struct b43_wldev *dev, u16 reg)
 {
        assert_mac_suspended(dev);
+       dev->phy.writes_counter = 0;
        return dev->phy.ops->phy_read(dev, reg);
 }
 
@@ -238,6 +251,10 @@ void b43_phy_write(struct b43_wldev *dev, u16 reg, u16 value)
 {
        assert_mac_suspended(dev);
        dev->phy.ops->phy_write(dev, reg, value);
+       if (++dev->phy.writes_counter == B43_MAX_WRITES_IN_ROW) {
+               b43_read16(dev, B43_MMIO_PHY_VER);
+               dev->phy.writes_counter = 0;
+       }
 }
 
 void b43_phy_copy(struct b43_wldev *dev, u16 destreg, u16 srcreg)
@@ -363,8 +380,8 @@ void b43_phy_txpower_check(struct b43_wldev *dev, unsigned int flags)
        /* The next check will be needed in two seconds, or later. */
        phy->next_txpwr_check_time = round_jiffies(now + (HZ * 2));
 
-       if ((dev->dev->bus->boardinfo.vendor == SSB_BOARDVENDOR_BCM) &&
-           (dev->dev->bus->boardinfo.type == SSB_BOARD_BU4306))
+       if ((dev->dev->board_vendor == SSB_BOARDVENDOR_BCM) &&
+           (dev->dev->board_type == SSB_BOARD_BU4306))
                return; /* No software txpower adjustment needed */
 
        result = phy->ops->recalc_txpower(dev, !!(flags & B43_TXPWR_IGNORE_TSSI));
@@ -424,12 +441,21 @@ void b43_phyop_switch_analog_generic(struct b43_wldev *dev, bool on)
        b43_write16(dev, B43_MMIO_PHY0, on ? 0 : 0xF4);
 }
 
+
+bool b43_channel_type_is_40mhz(enum nl80211_channel_type channel_type)
+{
+       return (channel_type == NL80211_CHAN_HT40MINUS ||
+               channel_type == NL80211_CHAN_HT40PLUS);
+}
+
 /* http://bcm-v4.sipsolutions.net/802.11/PHY/Cordic */
 struct b43_c32 b43_cordic(int theta)
 {
-       u32 arctg[] = { 2949120, 1740967, 919879, 466945, 234379, 117304,
-                     58666, 29335, 14668, 7334, 3667, 1833, 917, 458,
-                     229, 115, 57, 29, };
+       static const u32 arctg[] = {
+               2949120, 1740967, 919879, 466945, 234379, 117304,
+                 58666,   29335,  14668,   7334,   3667,   1833,
+                   917,     458,    229,    115,     57,     29,
+       };
        u8 i;
        s32 tmp;
        s8 signx = 1;