Replace the local nth_bit() helper with fns(), which provides the same zero-based set-bit selection for rate capability masks. Signed-off-by: Yury Norov --- drivers/net/wireless/morsemicro/mm81x/mmrc.c | 26 +++++--------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/drivers/net/wireless/morsemicro/mm81x/mmrc.c b/drivers/net/wireless/morsemicro/mm81x/mmrc.c index fe7e4f501d6c..4cbc35535e07 100644 --- a/drivers/net/wireless/morsemicro/mm81x/mmrc.c +++ b/drivers/net/wireless/morsemicro/mm81x/mmrc.c @@ -2,6 +2,8 @@ /* * Copyright (c) 2017-2026 Morse Micro */ +#include + #include "mmrc.h" /* @@ -198,22 +200,6 @@ */ static const u32 sym_table[10] = { 24, 36, 48, 72, 96, 144, 192, 216, 256, 288 }; -/* - * Calculate which bit is the nth bit set in an integer based flag. - */ -static u8 nth_bit(u16 in, u16 index) -{ - u32 i; - u8 count = 0; - - for (i = 0; count != index + 1; i++) { - if (((1u << i) & in) != 0) - count++; - } - - return i - 1; -} - /* * Calculate the input bit's index among all the set bits in an integer * based flag. @@ -291,19 +277,19 @@ static struct mmrc_rate get_rate_row(struct mmrc_table *tb, u16 index) u16 mcs_index = index / rows; u16 mcs_modulo = index % rows; - mcs = nth_bit(tb->caps.rates, mcs_index); + mcs = fns(tb->caps.rates, mcs_index); /* Find our spatial stream */ rows = rows / streams; - streams = nth_bit(tb->caps.spatial_streams, mcs_modulo / rows); + streams = fns(tb->caps.spatial_streams, mcs_modulo / rows); /* Find our bandwidth */ ss_index = index % rows; rows = rows / bw; - bw = nth_bit(tb->caps.bandwidth, ss_index / rows); + bw = fns(tb->caps.bandwidth, ss_index / rows); /* Find our guard */ - guard = nth_bit(tb->caps.guard, index % guard); + guard = fns(tb->caps.guard, index % guard); /* Add range checks to keep scan-build happy */ if (bw >= MMRC_BW_MAX) -- 2.53.0