Commit b8fbc392 authored by Arend van Spriel's avatar Arend van Spriel Committed by Greg Kroah-Hartman

staging: brcm80211: make use of fls bit operation in wlc_phy_compute_dB

wlc_phy_compute_dB converts absolute power value to dB implementing
a fixed point calculation for 10*log10(x). It does this by determining
the most significant bit for value x. This can be done using the fls()
bit operation, which has arch specific and possibly more efficient
implementation.

Cc: devel@linuxdriverproject.org
Cc: linux-wireless@vger.kernel.org
Reviewed-by: default avatarRoland Vossen <rvossen@broadcoom.com>
Reviewed-by: default avatarHenry Ptasinski <henryp@broadcom.com>
Reviewed-by: default avatarBrett Rudley <brudley@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent dc1e9616
......@@ -18,10 +18,12 @@
#include <linux/kernel.h>
#include <linux/string.h>
#include <bcmdefs.h>
#include <linux/bitops.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <bcmdefs.h>
#include <bcmnvram.h>
#include <sbchipc.h>
#include <bcmdevs.h>
......@@ -2746,20 +2748,15 @@ s8 lcnphy_gain_index_offset_for_pkt_rssi[] = {
void wlc_phy_compute_dB(u32 *cmplx_pwr, s8 *p_cmplx_pwr_dB, u8 core)
{
u8 shift_ct, lsb, msb, secondmsb, i;
u8 msb, secondmsb, i;
u32 tmp;
for (i = 0; i < core; i++) {
secondmsb = 0;
tmp = cmplx_pwr[i];
shift_ct = msb = secondmsb = 0;
while (tmp != 0) {
tmp = tmp >> 1;
shift_ct++;
lsb = (u8) (tmp & 1);
if (lsb == 1)
msb = shift_ct;
}
secondmsb = (u8) ((cmplx_pwr[i] >> (msb - 1)) & 1);
msb = fls(tmp);
if (msb)
secondmsb = (u8) ((tmp >> (--msb - 1)) & 1);
p_cmplx_pwr_dB[i] = (s8) (3 * msb + 2 * secondmsb);
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment