Skip to content

Commit 0d76990

Browse files
committed
realtek: Indicate that RTL8231 LED ops can sleep
The RTL8231 LED driver is using the .brightness_set op, which according to the documentation should not sleep. Since the RTL8231 is controlled via an MDIO bus, this is not the case. When using a non-offloaded LED driver such as netdev, this may currently trigger kernel warnings: WARNING: CPU: 0 PID: 14 at kernel/time/timer.c:1754 call_timer_fn.isra.0+0x84/0x8c timer: led_timer_function+0x0/0x1d8 preempt leak: 00000100 -> 00000000 Switch to the .brightness_set_blocking op to indicate the operation might sleep. Fixes: 6ef6014 ("realtek: Add pinctrl support for RTL8231") Signed-off-by: Sander Vanheule <sander@svanheule.net>
1 parent 3166710 commit 0d76990

2 files changed

Lines changed: 8 additions & 8 deletions

File tree

target/linux/realtek/patches-6.12/804-leds-Add-support-for-RTL8231-LED-scan-matrix.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,15 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
129129
+ .toggle_rates = rtl8231_toggle_rates,
130130
+};
131131
+
132-
+static void rtl8231_led_brightness_set(struct led_classdev *led_cdev,
132+
+static int rtl8231_led_brightness_set(struct led_classdev *led_cdev,
133133
+ enum led_brightness brightness)
134134
+{
135135
+ struct rtl8231_led *pled = to_rtl8231_led(led_cdev);
136136
+
137137
+ if (brightness)
138-
+ regmap_field_write(pled->reg_field, pled->modes->on);
138+
+ return regmap_field_write(pled->reg_field, pled->modes->on);
139139
+ else
140-
+ regmap_field_write(pled->reg_field, pled->modes->off);
140+
+ return regmap_field_write(pled->reg_field, pled->modes->off);
141141
+}
142142
+
143143
+static enum led_brightness rtl8231_led_brightness_get(struct led_classdev *led_cdev)
@@ -276,7 +276,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
276276
+
277277
+ pled->led.max_brightness = 1;
278278
+ pled->led.brightness_get = rtl8231_led_brightness_get;
279-
+ pled->led.brightness_set = rtl8231_led_brightness_set;
279+
+ pled->led.brightness_set_blocking = rtl8231_led_brightness_set;
280280
+ pled->led.blink_set = rtl8231_led_blink_set;
281281
+
282282
+ init_data.fwnode = fwnode;

target/linux/realtek/patches-6.18/804-leds-Add-support-for-RTL8231-LED-scan-matrix.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,15 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
129129
+ .toggle_rates = rtl8231_toggle_rates,
130130
+};
131131
+
132-
+static void rtl8231_led_brightness_set(struct led_classdev *led_cdev,
132+
+static int rtl8231_led_brightness_set(struct led_classdev *led_cdev,
133133
+ enum led_brightness brightness)
134134
+{
135135
+ struct rtl8231_led *pled = to_rtl8231_led(led_cdev);
136136
+
137137
+ if (brightness)
138-
+ regmap_field_write(pled->reg_field, pled->modes->on);
138+
+ return regmap_field_write(pled->reg_field, pled->modes->on);
139139
+ else
140-
+ regmap_field_write(pled->reg_field, pled->modes->off);
140+
+ return regmap_field_write(pled->reg_field, pled->modes->off);
141141
+}
142142
+
143143
+static enum led_brightness rtl8231_led_brightness_get(struct led_classdev *led_cdev)
@@ -276,7 +276,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
276276
+
277277
+ pled->led.max_brightness = 1;
278278
+ pled->led.brightness_get = rtl8231_led_brightness_get;
279-
+ pled->led.brightness_set = rtl8231_led_brightness_set;
279+
+ pled->led.brightness_set_blocking = rtl8231_led_brightness_set;
280280
+ pled->led.blink_set = rtl8231_led_blink_set;
281281
+
282282
+ init_data.fwnode = fwnode;

0 commit comments

Comments
 (0)