[PATCH 2/4] usb: core: set mod_name in driver registration
From: Shashank Balaji
Date: Tue Jul 21 2026 - 23:43:09 EST
The driver core only creates the sysfs "module" symlink for a built-in
driver when its struct device_driver has mod_name set (see
module_add_driver()). This registration path left mod_name unset, so built-in
drivers using it had no such symlink.
Set mod_name to KBUILD_MODNAME during driver registration. Built-in
drivers now gain the symlink, while loadable modules are unaffected.
Co-developed-by: Rahul Bukte <rahul.bukte@xxxxxxxx>
Signed-off-by: Rahul Bukte <rahul.bukte@xxxxxxxx>
Signed-off-by: Shashank Balaji <shashank.mahadasyam@xxxxxxxx>
---
include/linux/usb.h | 4 ++--
drivers/usb/core/driver.c | 4 +++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 2466183a45f0..6507c217bca7 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -1369,9 +1369,9 @@ extern void usb_deregister(struct usb_driver *);
usb_deregister)
#define usb_register_device_driver(new_udriver) \
- __usb_register_device_driver(new_udriver, THIS_MODULE)
+ __usb_register_device_driver(new_udriver, THIS_MODULE, KBUILD_MODNAME)
extern int __usb_register_device_driver(struct usb_device_driver *,
- struct module *);
+ struct module *, const char *);
extern void usb_deregister_device_driver(struct usb_device_driver *);
extern int usb_register_dev(struct usb_interface *intf,
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index eac1ff468c08..ab809cb6da26 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -983,6 +983,7 @@ bool is_usb_device_driver(const struct device_driver *drv)
* __usb_register_device_driver - register a USB device (not interface) driver
* @new_udriver: USB operations for the device driver
* @owner: module owner of this driver.
+ * @mod_name: module name string
*
* Registers a USB device driver with the USB core. The list of
* unattached devices will be rescanned whenever a new driver is
@@ -991,7 +992,7 @@ bool is_usb_device_driver(const struct device_driver *drv)
* Return: A negative error code on failure and 0 on success.
*/
int __usb_register_device_driver(struct usb_device_driver *new_udriver,
- struct module *owner)
+ struct module *owner, const char *mod_name)
{
int retval = 0;
@@ -1003,6 +1004,7 @@ int __usb_register_device_driver(struct usb_device_driver *new_udriver,
new_udriver->driver.probe = usb_probe_device;
new_udriver->driver.remove = usb_unbind_device;
new_udriver->driver.owner = owner;
+ new_udriver->driver.mod_name = mod_name;
new_udriver->driver.dev_groups = new_udriver->dev_groups;
retval = driver_register(&new_udriver->driver);
--
2.43.0