USB: move usb debugfs directory creation to the usb common core
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Jun 2019 12:44:40 +0000 (14:44 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Jun 2019 06:59:19 +0000 (08:59 +0200)
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>
Tested-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/Makefile
drivers/usb/common/common.c
drivers/usb/common/common.h [new file with mode: 0644]
drivers/usb/common/led.c
drivers/usb/core/usb.c

index 7d1b8c82b208917e83ada929ef6902fed878e12e..ecc2de1ffaaeab7b2c59bf902a08c396cd4882b5 100644 (file)
@@ -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/
index 18f5dcf58b0dd4dce209687f3d7e1e98f4e49818..1433260d99b48e5c47eefea74ab9f1f9a179d4f2 100644 (file)
@@ -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(struct device *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");
diff --git a/drivers/usb/common/common.h b/drivers/usb/common/common.h
new file mode 100644 (file)
index 0000000..424a913
--- /dev/null
@@ -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 */
index 7bd81166b77d7833cbc1389e18ee65f452df4a85..0865dd44a80ad1ee48e2a02c75752f6aa23bd02e 100644 (file)
@@ -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 ev)
 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);
index 7fcb9f782931035b10fbeb3e6a50b897f6828e36..5a0df527a8ca2239d00c8d39760817ca4f3b591c 100644 (file)
@@ -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);
 }
 
 /*