Refreshed all patches. Remove upstreamed patch: - 800-v5.0-usb-leds-fix-regression-in-usbport-led-trigger.patch Compile-tested on: cns3xxx Runtime-tested on: cns3xxx Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>master
parent
206bebcad4
commit
3da230a2e6
@ -1,88 +0,0 @@ |
||||
From 91f7d2e89868fcac0e750a28230fdb1ad4512137 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Lamparter <chunkeey@gmail.com>
|
||||
Date: Fri, 11 Jan 2019 17:29:45 +0100
|
||||
Subject: USB: leds: fix regression in usbport led trigger
|
||||
|
||||
The patch "usb: simplify usbport trigger" together with "leds: triggers:
|
||||
add device attribute support" caused an regression for the usbport
|
||||
trigger. it will no longer enumerate any active usb hub ports under the
|
||||
"ports" directory in the sysfs class directory, if the usb host drivers
|
||||
are fully initialized before the usbport trigger was loaded.
|
||||
|
||||
The reason is that the usbport driver tries to register the sysfs
|
||||
entries during the activate() callback. And this will fail with -2 /
|
||||
ENOENT because the patch "leds: triggers: add device attribute support"
|
||||
made it so that the sysfs "ports" group was only being added after the
|
||||
activate() callback succeeded.
|
||||
|
||||
This version of the patch reverts parts of the "usb: simplify usbport
|
||||
trigger" patch and restores usbport trigger's functionality.
|
||||
|
||||
Fixes: 6f7b0bad8839 ("usb: simplify usbport trigger")
|
||||
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
Cc: stable <stable@vger.kernel.org>
|
||||
Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
--- a/drivers/usb/core/ledtrig-usbport.c
|
||||
+++ b/drivers/usb/core/ledtrig-usbport.c
|
||||
@@ -119,11 +119,6 @@ static const struct attribute_group port
|
||||
.attrs = ports_attrs,
|
||||
};
|
||||
|
||||
-static const struct attribute_group *ports_groups[] = {
|
||||
- &ports_group,
|
||||
- NULL
|
||||
-};
|
||||
-
|
||||
/***************************************
|
||||
* Adding & removing ports
|
||||
***************************************/
|
||||
@@ -307,6 +302,7 @@ static int usbport_trig_notify(struct no
|
||||
static int usbport_trig_activate(struct led_classdev *led_cdev)
|
||||
{
|
||||
struct usbport_trig_data *usbport_data;
|
||||
+ int err;
|
||||
|
||||
usbport_data = kzalloc(sizeof(*usbport_data), GFP_KERNEL);
|
||||
if (!usbport_data)
|
||||
@@ -315,6 +311,9 @@ static int usbport_trig_activate(struct
|
||||
|
||||
/* List of ports */
|
||||
INIT_LIST_HEAD(&usbport_data->ports);
|
||||
+ err = sysfs_create_group(&led_cdev->dev->kobj, &ports_group);
|
||||
+ if (err)
|
||||
+ goto err_free;
|
||||
usb_for_each_dev(usbport_data, usbport_trig_add_usb_dev_ports);
|
||||
usbport_trig_update_count(usbport_data);
|
||||
|
||||
@@ -322,8 +321,11 @@ static int usbport_trig_activate(struct
|
||||
usbport_data->nb.notifier_call = usbport_trig_notify;
|
||||
led_set_trigger_data(led_cdev, usbport_data);
|
||||
usb_register_notify(&usbport_data->nb);
|
||||
-
|
||||
return 0;
|
||||
+
|
||||
+err_free:
|
||||
+ kfree(usbport_data);
|
||||
+ return err;
|
||||
}
|
||||
|
||||
static void usbport_trig_deactivate(struct led_classdev *led_cdev)
|
||||
@@ -335,6 +337,8 @@ static void usbport_trig_deactivate(stru
|
||||
usbport_trig_remove_port(usbport_data, port);
|
||||
}
|
||||
|
||||
+ sysfs_remove_group(&led_cdev->dev->kobj, &ports_group);
|
||||
+
|
||||
usb_unregister_notify(&usbport_data->nb);
|
||||
|
||||
kfree(usbport_data);
|
||||
@@ -344,7 +348,6 @@ static struct led_trigger usbport_led_tr
|
||||
.name = "usbport",
|
||||
.activate = usbport_trig_activate,
|
||||
.deactivate = usbport_trig_deactivate,
|
||||
- .groups = ports_groups,
|
||||
};
|
||||
|
||||
static int __init usbport_trig_init(void)
|
Loading…
Reference in new issue