mirror of
https://github.com/immortalwrt/immortalwrt.git
synced 2025-08-07 22:06:25 +08:00

A commit which broke netdev trigger LEDs offloaded to PHYs recently made it all the way down to the Linux 6.6 stable branch. The revert has been accepted to linux-next, however, a backport to the various -stable trees is still pending. Import the backported revert commit to fix in OpenWrt in the meantime until the revert also gets picked to linux-stable. Link: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=26f732791f2bcab18f59c61915bbe35225f30136 Signed-off-by: Daniel Golle <daniel@makrotopia.org>
82 lines
3.0 KiB
Diff
82 lines
3.0 KiB
Diff
From 26f732791f2bcab18f59c61915bbe35225f30136 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Golle <daniel@makrotopia.org>
|
|
Date: Sat, 12 Jul 2025 16:39:21 +0100
|
|
Subject: [PATCH] Revert "leds: trigger: netdev: Configure LED blink interval
|
|
for HW offload"
|
|
|
|
This reverts commit c629c972b310af41e9e072febb6dae9a299edde6.
|
|
|
|
While .led_blink_set() would previously put an LED into an unconditional
|
|
permanently blinking state, the offending commit now uses same operation
|
|
to (also?) set the blink timing of the netdev trigger when offloading.
|
|
|
|
This breaks many if not all of the existing PHY drivers which offer
|
|
offloading LED operations, as those drivers would just put the LED into
|
|
blinking state after .led_blink_set() has been called.
|
|
|
|
Unfortunately the change even made it into stable kernels for unknown
|
|
reasons, so it should be reverted there as well.
|
|
|
|
Fixes: c629c972b310a ("leds: trigger: netdev: Configure LED blink interval for HW offload")
|
|
Link: https://lore.kernel.org/linux-leds/c6134e26-2e45-4121-aa15-58aaef327201@lunn.ch/T/#m9d6fe81bbcb273e59f12bbedbd633edd32118387
|
|
Suggested-by: Andrew Lunn <andrew@lunn.ch>
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Link: https://lore.kernel.org/r/6dcc77ee1c9676891d6250d8994850f521426a0f.1752334655.git.daniel@makrotopia.org
|
|
Signed-off-by: Lee Jones <lee@kernel.org>
|
|
---
|
|
drivers/leds/trigger/ledtrig-netdev.c | 16 +++-------------
|
|
1 file changed, 3 insertions(+), 13 deletions(-)
|
|
|
|
--- a/drivers/leds/trigger/ledtrig-netdev.c
|
|
+++ b/drivers/leds/trigger/ledtrig-netdev.c
|
|
@@ -54,7 +54,6 @@ struct led_netdev_data {
|
|
unsigned int last_activity;
|
|
|
|
unsigned long mode;
|
|
- unsigned long blink_delay;
|
|
int link_speed;
|
|
u8 duplex;
|
|
|
|
@@ -70,10 +69,6 @@ static void set_baseline_state(struct le
|
|
/* Already validated, hw control is possible with the requested mode */
|
|
if (trigger_data->hw_control) {
|
|
led_cdev->hw_control_set(led_cdev, trigger_data->mode);
|
|
- if (led_cdev->blink_set) {
|
|
- led_cdev->blink_set(led_cdev, &trigger_data->blink_delay,
|
|
- &trigger_data->blink_delay);
|
|
- }
|
|
|
|
return;
|
|
}
|
|
@@ -415,11 +410,10 @@ static ssize_t interval_store(struct dev
|
|
size_t size)
|
|
{
|
|
struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
|
|
- struct led_classdev *led_cdev = trigger_data->led_cdev;
|
|
unsigned long value;
|
|
int ret;
|
|
|
|
- if (trigger_data->hw_control && !led_cdev->blink_set)
|
|
+ if (trigger_data->hw_control)
|
|
return -EINVAL;
|
|
|
|
ret = kstrtoul(buf, 0, &value);
|
|
@@ -428,13 +422,9 @@ static ssize_t interval_store(struct dev
|
|
|
|
/* impose some basic bounds on the timer interval */
|
|
if (value >= 5 && value <= 10000) {
|
|
- if (trigger_data->hw_control) {
|
|
- trigger_data->blink_delay = value;
|
|
- } else {
|
|
- cancel_delayed_work_sync(&trigger_data->work);
|
|
+ cancel_delayed_work_sync(&trigger_data->work);
|
|
|
|
- atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
|
|
- }
|
|
+ atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
|
|
set_baseline_state(trigger_data); /* resets timer */
|
|
}
|
|
|