Skip to content

Commit a5f8164

Browse files
kekrbygregkh
authored andcommitted
USB: core: add 'shutdown' callback to usb_driver
Currently there is no standardized method for USB drivers to handle shutdown events. This patch simplifies running code on shutdown for USB devices by adding a shutdown callback to usb_driver. Signed-off-by: Kerem Karabay <[email protected]> Signed-off-by: Aditya Garg <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 41ea26a commit a5f8164

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

drivers/usb/core/driver.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,19 @@ static int usb_unbind_interface(struct device *dev)
517517
return 0;
518518
}
519519

520+
static void usb_shutdown_interface(struct device *dev)
521+
{
522+
struct usb_interface *intf = to_usb_interface(dev);
523+
struct usb_driver *driver;
524+
525+
if (!dev->driver)
526+
return;
527+
528+
driver = to_usb_driver(dev->driver);
529+
if (driver->shutdown)
530+
driver->shutdown(intf);
531+
}
532+
520533
/**
521534
* usb_driver_claim_interface - bind a driver to an interface
522535
* @driver: the driver to be bound
@@ -1059,6 +1072,7 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
10591072
new_driver->driver.bus = &usb_bus_type;
10601073
new_driver->driver.probe = usb_probe_interface;
10611074
new_driver->driver.remove = usb_unbind_interface;
1075+
new_driver->driver.shutdown = usb_shutdown_interface;
10621076
new_driver->driver.owner = owner;
10631077
new_driver->driver.mod_name = mod_name;
10641078
new_driver->driver.dev_groups = new_driver->dev_groups;

include/linux/usb.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,7 @@ extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf);
11711171
* post_reset method is called.
11721172
* @post_reset: Called by usb_reset_device() after the device
11731173
* has been reset
1174+
* @shutdown: Called at shut-down time to quiesce the device.
11741175
* @id_table: USB drivers use ID table to support hotplugging.
11751176
* Export this with MODULE_DEVICE_TABLE(usb,...). This must be set
11761177
* or your driver's probe function will never get called.
@@ -1222,6 +1223,8 @@ struct usb_driver {
12221223
int (*pre_reset)(struct usb_interface *intf);
12231224
int (*post_reset)(struct usb_interface *intf);
12241225

1226+
void (*shutdown)(struct usb_interface *intf);
1227+
12251228
const struct usb_device_id *id_table;
12261229
const struct attribute_group **dev_groups;
12271230

0 commit comments

Comments
 (0)