aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--0001-USB-move-usb-debugfs-directory-creation-to-the-usb-c.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/0001-USB-move-usb-debugfs-directory-creation-to-the-usb-c.patch b/0001-USB-move-usb-debugfs-directory-creation-to-the-usb-c.patch
new file mode 100644
index 00000000000000..4cb09f67b68bdd
--- /dev/null
+++ b/0001-USB-move-usb-debugfs-directory-creation-to-the-usb-c.patch
@@ -0,0 +1,159 @@
+From 34fef47efd28235e5dcee8cfba449ea98b86dfed Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Tue, 4 Jun 2019 16:07:40 +0200
+Subject: [PATCH] USB: move usb debugfs directory creation to the usb common
+ core
+
+The USB gadget subsystem wants to use the USB debugfs root directory, so
+move it to the common "core" USB code so that it is properly initialized
+and removed as needed.
+
+In order to properly do this, we need to load the common code before the
+usb core code, when everything is linked into the kernel, so reorder the
+link order of the code.
+
+Also as the usb common code has the possibility of the led trigger logic
+to be merged into it, handle the build option properly by only having
+one module init/exit function and have the common code initialize the
+led trigger if needed.
+
+Reported-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
+Cc: Felipe Balbi <felipe.balbi@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/Makefile | 3 +--
+ drivers/usb/common/common.c | 21 +++++++++++++++++++++
+ drivers/usb/common/common.h | 14 ++++++++++++++
+ drivers/usb/common/led.c | 9 +++------
+ drivers/usb/core/usb.c | 10 ++++------
+ 5 files changed, 43 insertions(+), 14 deletions(-)
+ create mode 100644 drivers/usb/common/common.h
+
+--- a/drivers/usb/Makefile
++++ b/drivers/usb/Makefile
+@@ -5,6 +5,7 @@
+
+ # Object files in subdirectories
+
++obj-$(CONFIG_USB_COMMON) += common/
+ obj-$(CONFIG_USB) += core/
+ obj-$(CONFIG_USB_SUPPORT) += phy/
+
+@@ -60,8 +61,6 @@ obj-$(CONFIG_USB_CHIPIDEA) += chipidea/
+ obj-$(CONFIG_USB_RENESAS_USBHS) += renesas_usbhs/
+ obj-$(CONFIG_USB_GADGET) += gadget/
+
+-obj-$(CONFIG_USB_COMMON) += common/
+-
+ obj-$(CONFIG_USBIP_CORE) += usbip/
+
+ obj-$(CONFIG_TYPEC) += typec/
+--- a/drivers/usb/common/common.c
++++ b/drivers/usb/common/common.c
+@@ -15,6 +15,8 @@
+ #include <linux/usb/of.h>
+ #include <linux/usb/otg.h>
+ #include <linux/of_platform.h>
++#include <linux/debugfs.h>
++#include "common.h"
+
+ static const char *const ep_type_names[] = {
+ [USB_ENDPOINT_XFER_CONTROL] = "ctrl",
+@@ -291,4 +293,23 @@ struct device *usb_of_get_companion_dev(
+ EXPORT_SYMBOL_GPL(usb_of_get_companion_dev);
+ #endif
+
++struct dentry *usb_debug_root;
++EXPORT_SYMBOL_GPL(usb_debug_root);
++
++static int __init usb_common_init(void)
++{
++ usb_debug_root = debugfs_create_dir("usb", NULL);
++ ledtrig_usb_init();
++ return 0;
++}
++
++static void __exit usb_common_exit(void)
++{
++ ledtrig_usb_exit();
++ debugfs_remove_recursive(usb_debug_root);
++}
++
++subsys_initcall(usb_common_init);
++module_exit(usb_common_exit);
++
+ MODULE_LICENSE("GPL");
+--- /dev/null
++++ b/drivers/usb/common/common.h
+@@ -0,0 +1,14 @@
++/* SPDX-License-Identifier: GPL-2.0 */
++
++#ifndef __LINUX_USB_COMMON_H
++#define __LINUX_USB_COMMON_H
++
++#if defined(CONFIG_USB_LED_TRIG)
++void ledtrig_usb_init(void);
++void ledtrig_usb_exit(void);
++#else
++static inline void ledtrig_usb_init(void) { }
++static inline void ledtrig_usb_exit(void) { }
++#endif
++
++#endif /* __LINUX_USB_COMMON_H */
+--- a/drivers/usb/common/led.c
++++ b/drivers/usb/common/led.c
+@@ -10,6 +10,7 @@
+ #include <linux/init.h>
+ #include <linux/leds.h>
+ #include <linux/usb.h>
++#include "common.h"
+
+ #define BLINK_DELAY 30
+
+@@ -36,18 +37,14 @@ void usb_led_activity(enum usb_led_event
+ EXPORT_SYMBOL_GPL(usb_led_activity);
+
+
+-static int __init ledtrig_usb_init(void)
++void __init ledtrig_usb_init(void)
+ {
+ led_trigger_register_simple("usb-gadget", &ledtrig_usb_gadget);
+ led_trigger_register_simple("usb-host", &ledtrig_usb_host);
+- return 0;
+ }
+
+-static void __exit ledtrig_usb_exit(void)
++void __exit ledtrig_usb_exit(void)
+ {
+ led_trigger_unregister_simple(ledtrig_usb_gadget);
+ led_trigger_unregister_simple(ledtrig_usb_host);
+ }
+-
+-module_init(ledtrig_usb_init);
+-module_exit(ledtrig_usb_exit);
+--- a/drivers/usb/core/usb.c
++++ b/drivers/usb/core/usb.c
+@@ -1185,19 +1185,17 @@ static struct notifier_block usb_bus_nb
+ .notifier_call = usb_bus_notify,
+ };
+
+-struct dentry *usb_debug_root;
+-EXPORT_SYMBOL_GPL(usb_debug_root);
++static struct dentry *usb_devices_root;
+
+ static void usb_debugfs_init(void)
+ {
+- usb_debug_root = debugfs_create_dir("usb", NULL);
+- debugfs_create_file("devices", 0444, usb_debug_root, NULL,
+- &usbfs_devices_fops);
++ usb_devices_root = debugfs_create_file("devices", 0444, usb_debug_root,
++ NULL, &usbfs_devices_fops);
+ }
+
+ static void usb_debugfs_cleanup(void)
+ {
+- debugfs_remove_recursive(usb_debug_root);
++ debugfs_remove(usb_devices_root);
+ }
+
+ /*