mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 06:57:57 +00:00
cf08db988b
Backport initial LEDs hw control support. Currently this is limited to
only rx/tx and link events for the netdev trigger but the API got
accepted and the additional modes are working on and will be backported
later.
Refresh every patch and add the additional config flag for QCA8K new
LEDs support.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 0a4b309f41
)
54 lines
1.9 KiB
Diff
54 lines
1.9 KiB
Diff
From 0316cc5629d15880dd3f097d221c55ca648bcd61 Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Mon, 29 May 2023 18:32:40 +0200
|
|
Subject: [PATCH 10/13] leds: trigger: netdev: init mode if hw control already
|
|
active
|
|
|
|
On netdev trigger activation, hw control may be already active by
|
|
default. If this is the case and a device is actually provided by
|
|
hw_control_get_device(), init the already active mode and set the
|
|
bool to hw_control bool to true to reflect the already set mode in the
|
|
trigger_data.
|
|
|
|
Co-developed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/leds/trigger/ledtrig-netdev.c | 17 +++++++++++++++++
|
|
1 file changed, 17 insertions(+)
|
|
|
|
--- a/drivers/leds/trigger/ledtrig-netdev.c
|
|
+++ b/drivers/leds/trigger/ledtrig-netdev.c
|
|
@@ -454,6 +454,8 @@ static void netdev_trig_work(struct work
|
|
static int netdev_trig_activate(struct led_classdev *led_cdev)
|
|
{
|
|
struct led_netdev_data *trigger_data;
|
|
+ unsigned long mode;
|
|
+ struct device *dev;
|
|
int rc;
|
|
|
|
trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
|
|
@@ -475,6 +477,21 @@ static int netdev_trig_activate(struct l
|
|
atomic_set(&trigger_data->interval, msecs_to_jiffies(NETDEV_LED_DEFAULT_INTERVAL));
|
|
trigger_data->last_activity = 0;
|
|
|
|
+ /* 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)) {
|
|
+ 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;
|
|
+ }
|
|
+ }
|
|
+
|
|
led_set_trigger_data(led_cdev, trigger_data);
|
|
|
|
rc = register_netdevice_notifier(&trigger_data->notifier);
|