830-v6.17-Revert-leds-trigger-netdev-Configure-LED-blink-inter.patch 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. From 26f732791f2bcab18f59c61915bbe35225f30136 Mon Sep 17 00:00:00 2001
  2. From: Daniel Golle <[email protected]>
  3. Date: Sat, 12 Jul 2025 16:39:21 +0100
  4. Subject: [PATCH] Revert "leds: trigger: netdev: Configure LED blink interval
  5. for HW offload"
  6. This reverts commit c629c972b310af41e9e072febb6dae9a299edde6.
  7. While .led_blink_set() would previously put an LED into an unconditional
  8. permanently blinking state, the offending commit now uses same operation
  9. to (also?) set the blink timing of the netdev trigger when offloading.
  10. This breaks many if not all of the existing PHY drivers which offer
  11. offloading LED operations, as those drivers would just put the LED into
  12. blinking state after .led_blink_set() has been called.
  13. Unfortunately the change even made it into stable kernels for unknown
  14. reasons, so it should be reverted there as well.
  15. Fixes: c629c972b310a ("leds: trigger: netdev: Configure LED blink interval for HW offload")
  16. Link: https://lore.kernel.org/linux-leds/[email protected]/T/#m9d6fe81bbcb273e59f12bbedbd633edd32118387
  17. Suggested-by: Andrew Lunn <[email protected]>
  18. Cc: [email protected]
  19. Signed-off-by: Daniel Golle <[email protected]>
  20. Reviewed-by: Andrew Lunn <[email protected]>
  21. Link: https://lore.kernel.org/r/6dcc77ee1c9676891d6250d8994850f521426a0f.1752334655.git.daniel@makrotopia.org
  22. Signed-off-by: Lee Jones <[email protected]>
  23. ---
  24. drivers/leds/trigger/ledtrig-netdev.c | 16 +++-------------
  25. 1 file changed, 3 insertions(+), 13 deletions(-)
  26. --- a/drivers/leds/trigger/ledtrig-netdev.c
  27. +++ b/drivers/leds/trigger/ledtrig-netdev.c
  28. @@ -68,7 +68,6 @@ struct led_netdev_data {
  29. unsigned int last_activity;
  30. unsigned long mode;
  31. - unsigned long blink_delay;
  32. int link_speed;
  33. __ETHTOOL_DECLARE_LINK_MODE_MASK(supported_link_modes);
  34. u8 duplex;
  35. @@ -87,10 +86,6 @@ static void set_baseline_state(struct le
  36. /* Already validated, hw control is possible with the requested mode */
  37. if (trigger_data->hw_control) {
  38. led_cdev->hw_control_set(led_cdev, trigger_data->mode);
  39. - if (led_cdev->blink_set) {
  40. - led_cdev->blink_set(led_cdev, &trigger_data->blink_delay,
  41. - &trigger_data->blink_delay);
  42. - }
  43. return;
  44. }
  45. @@ -459,11 +454,10 @@ static ssize_t interval_store(struct dev
  46. size_t size)
  47. {
  48. struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
  49. - struct led_classdev *led_cdev = trigger_data->led_cdev;
  50. unsigned long value;
  51. int ret;
  52. - if (trigger_data->hw_control && !led_cdev->blink_set)
  53. + if (trigger_data->hw_control)
  54. return -EINVAL;
  55. ret = kstrtoul(buf, 0, &value);
  56. @@ -472,13 +466,9 @@ static ssize_t interval_store(struct dev
  57. /* impose some basic bounds on the timer interval */
  58. if (value >= 5 && value <= 10000) {
  59. - if (trigger_data->hw_control) {
  60. - trigger_data->blink_delay = value;
  61. - } else {
  62. - cancel_delayed_work_sync(&trigger_data->work);
  63. + cancel_delayed_work_sync(&trigger_data->work);
  64. - atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
  65. - }
  66. + atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
  67. set_baseline_state(trigger_data); /* resets timer */
  68. }