This patch adds the device_reinit function into the us_data structure. The usb-storage driver uses this function for notify the subdrivers that they need to reinitialize the device. Signed-off-by: Mikhail Zaytsev <flashed@xxxxxxx> --- drivers/usb/storage/usb.c | 16 ++++++++-------- drivers/usb/storage/usb.h | 8 +++++--- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index a0c07e05a8f1..60c47b2e877d 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -210,10 +210,10 @@ int usb_stor_reset_resume(struct usb_interface *iface) /* Report the reset to the SCSI core */ usb_stor_report_bus_reset(us); - /* - * FIXME: Notify the subdrivers that they need to reinitialize - * the device - */ + if (us->device_reinit) { + usb_stor_dbg(us, "-- calling device_reinit()\n"); + us->device_reinit(us); + } return 0; } EXPORT_SYMBOL_GPL(usb_stor_reset_resume); @@ -242,10 +242,10 @@ int usb_stor_post_reset(struct usb_interface *iface) /* Report the reset to the SCSI core */ usb_stor_report_bus_reset(us); - /* - * FIXME: Notify the subdrivers that they need to reinitialize - * the device - */ + if (us->device_reinit) { + usb_stor_dbg(us, "-- calling device_reinit()\n"); + us->device_reinit(us); + } mutex_unlock(&us->dev_mutex); return 0; diff --git a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h index 90133e16bec5..c646a0464a51 100644 --- a/drivers/usb/storage/usb.h +++ b/drivers/usb/storage/usb.h @@ -77,9 +77,10 @@ struct us_unusual_dev { #define US_IOBUF_SIZE 64 /* Size of the DMA-mapped I/O buffer */ #define US_SENSE_SIZE 18 /* Size of the autosense data buffer */ -typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data*); -typedef int (*trans_reset)(struct us_data*); -typedef void (*proto_cmnd)(struct scsi_cmnd*, struct us_data*); +typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data *); +typedef int (*trans_reset)(struct us_data *); +typedef int (*dev_reinit)(struct us_data *); +typedef void (*proto_cmnd)(struct scsi_cmnd *, struct us_data *); typedef void (*extra_data_destructor)(void *); /* extra data destructor */ typedef void (*pm_hook)(struct us_data *, int); /* power management hook */ @@ -119,6 +120,7 @@ struct us_data { /* function pointers for this device */ trans_cmnd transport; /* transport function */ trans_reset transport_reset; /* transport device reset */ + dev_reinit device_reinit; /* device reinitialize */ proto_cmnd proto_handler; /* protocol handler */ /* SCSI interfaces */ -- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html