Skip to content

Commit 26a8bf9

Browse files
Bitterblue SmithPing-Ke Shih
authored andcommitted
wifi: rtw88: Lock rtwdev->mutex before setting the LED
Some users report that the LED blinking breaks AP mode somehow. Most likely the LED code and the dynamic mechanism are trying to access the hardware registers at the same time. Fix it by locking rtwdev->mutex before setting the LED and unlocking it after. Fixes: 4b6652b ("wifi: rtw88: Add support for LED blinking") Closes: lwfinger/rtw88#305 Signed-off-by: Bitterblue Smith <[email protected]> Acked-by: Ping-Ke Shih <[email protected]> Signed-off-by: Ping-Ke Shih <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent 58de1f9 commit 26a8bf9

File tree

1 file changed

+13
-3
lines changed
  • drivers/net/wireless/realtek/rtw88

1 file changed

+13
-3
lines changed

drivers/net/wireless/realtek/rtw88/led.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,23 @@
66
#include "debug.h"
77
#include "led.h"
88

9-
static int rtw_led_set_blocking(struct led_classdev *led,
10-
enum led_brightness brightness)
9+
static void rtw_led_set(struct led_classdev *led,
10+
enum led_brightness brightness)
1111
{
1212
struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev);
1313

14+
mutex_lock(&rtwdev->mutex);
15+
1416
rtwdev->chip->ops->led_set(led, brightness);
1517

18+
mutex_unlock(&rtwdev->mutex);
19+
}
20+
21+
static int rtw_led_set_blocking(struct led_classdev *led,
22+
enum led_brightness brightness)
23+
{
24+
rtw_led_set(led, brightness);
25+
1626
return 0;
1727
}
1828

@@ -37,7 +47,7 @@ void rtw_led_init(struct rtw_dev *rtwdev)
3747
return;
3848

3949
if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE)
40-
led->brightness_set = rtwdev->chip->ops->led_set;
50+
led->brightness_set = rtw_led_set;
4151
else
4252
led->brightness_set_blocking = rtw_led_set_blocking;
4353

0 commit comments

Comments
 (0)