Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

wifi: rtl8xxxu: Fix off by one initial RTS rate

rtl8xxxu_set_basic_rates() sets the wrong initial RTS rate. It sets the
next higher rate than the one it should set, e.g. 36M instead of 24M.

The while loop was supposed to find the index of the most significant
bit which is 1, but it was copied incorrectly from the vendor driver.
Use __fls() instead.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/761e6836-6cd6-4930-91b6-0446834655c5@gmail.com

authored by

Bitterblue Smith and committed by
Kalle Valo
80850ca0 9475cc7a

+3 -4
+3 -4
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
··· 4870 4870 4871 4871 dev_dbg(&priv->udev->dev, "%s: rates %08x\n", __func__, rate_cfg); 4872 4872 4873 - while (rate_cfg) { 4874 - rate_cfg = (rate_cfg >> 1); 4875 - rate_idx++; 4876 - } 4873 + if (rate_cfg) 4874 + rate_idx = __fls(rate_cfg); 4875 + 4877 4876 rtl8xxxu_write8(priv, REG_INIRTS_RATE_SEL, rate_idx); 4878 4877 } 4879 4878