#include <linux/kthread.h>
 #include <linux/netdevice.h>
 #include <linux/sched.h>
+#include <linux/bitops.h>
 #include <linux/etherdevice.h>
 #include <linux/ieee80211.h>
 #include <linux/mmc/sdio_func.h>
 static s32 brcmf_iscan_inprogress(struct brcmf_cfg80211_priv *cfg_priv);
 static s32 brcmf_iscan_aborted(struct brcmf_cfg80211_priv *cfg_priv);
 
-/*
-* find most significant bit set
-*/
-static __used u32 brcmf_find_msb(u16 bit16);
-
 /*
 * update pmklist to dongle
 */
        return err;
 }
 
-static __used u32 brcmf_find_msb(u16 bit16)
-{
-       u32 ret = 0;
-
-       if (bit16 & 0xff00) {
-               ret += 8;
-               bit16 >>= 8;
-       }
-
-       if (bit16 & 0xf0) {
-               ret += 4;
-               bit16 >>= 4;
-       }
-
-       if (bit16 & 0xc) {
-               ret += 2;
-               bit16 >>= 2;
-       }
-
-       if (bit16 & 2)
-               ret += bit16 & 2;
-       else if (bit16)
-               ret += bit16;
-
-       return ret;
-}
-
 static s32
 brcmf_cfg80211_set_bitrate_mask(struct wiphy *wiphy, struct net_device *dev,
                             const u8 *addr,
 
        rateset.count = le32_to_cpu(rateset.count);
 
-       legacy = brcmf_find_msb(mask->control[IEEE80211_BAND_2GHZ].legacy);
+       legacy = ffs(mask->control[IEEE80211_BAND_2GHZ].legacy & 0xFFFF);
        if (!legacy)
-               legacy = brcmf_find_msb(
-                               mask->control[IEEE80211_BAND_5GHZ].legacy);
+               legacy = ffs(mask->control[IEEE80211_BAND_5GHZ].legacy &
+                            0xFFFF);
 
        val = wl_g_rates[legacy - 1].bitrate * 100000;