6b63fcf8df
Backport patch adding support for LED PHY directly in PHY ops struct. Add new PHYLIB_LEDS config and refresh patches. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
58 lines
2.1 KiB
Diff
58 lines
2.1 KiB
Diff
From 7df1f14c04cbb1950e79c19793420f87227c3e80 Mon Sep 17 00:00:00 2001
|
|
From: Andrew Lunn <andrew@lunn.ch>
|
|
Date: Tue, 8 Aug 2023 23:04:33 +0200
|
|
Subject: [PATCH 1/4] led: trig: netdev: Fix requesting offload device
|
|
|
|
When the netdev trigger is activates, it tries to determine what
|
|
device the LED blinks for, and what the current blink mode is.
|
|
|
|
The documentation for hw_control_get() says:
|
|
|
|
* Return 0 on success, a negative error number on failing parsing the
|
|
* initial mode. Error from this function is NOT FATAL as the device
|
|
* may be in a not supported initial state by the attached LED trigger.
|
|
*/
|
|
|
|
For the Marvell PHY and the Armada 370-rd board, the initial LED blink
|
|
mode is not supported by the trigger, so it returns an error. This
|
|
resulted in not getting the device the LED is blinking for. As a
|
|
result, the device is unknown and offloaded is never performed.
|
|
|
|
Change to condition to always get the device if offloading is
|
|
supported, and reduce the scope of testing for an error from
|
|
hw_control_get() to skip setting trigger internal state if there is an
|
|
error.
|
|
|
|
Reviewed-by: Simon Horman <simon.horman@corigine.com>
|
|
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
|
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
|
Link: https://lore.kernel.org/r/20230808210436.838995-2-andrew@lunn.ch
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/leds/trigger/ledtrig-netdev.c | 8 +++++---
|
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/leds/trigger/ledtrig-netdev.c
|
|
+++ b/drivers/leds/trigger/ledtrig-netdev.c
|
|
@@ -564,15 +564,17 @@ static int netdev_trig_activate(struct l
|
|
/* Check if hw control is active by default on the LED.
|
|
* Init already enabled mode in hw control.
|
|
*/
|
|
- if (supports_hw_control(led_cdev) &&
|
|
- !led_cdev->hw_control_get(led_cdev, &mode)) {
|
|
+ if (supports_hw_control(led_cdev)) {
|
|
dev = led_cdev->hw_control_get_device(led_cdev);
|
|
if (dev) {
|
|
const char *name = dev_name(dev);
|
|
|
|
set_device_name(trigger_data, name, strlen(name));
|
|
trigger_data->hw_control = true;
|
|
- trigger_data->mode = mode;
|
|
+
|
|
+ rc = led_cdev->hw_control_get(led_cdev, &mode);
|
|
+ if (!rc)
|
|
+ trigger_data->mode = mode;
|
|
}
|
|
}
|
|
|