66 lines
1.7 KiB
Diff
66 lines
1.7 KiB
Diff
|
From 3af7a8b44f265a482c8297b420085cfb53725136 Mon Sep 17 00:00:00 2001
|
||
|
From: Bhushan Shah <bshah@kde.org>
|
||
|
Date: Wed, 14 Apr 2021 10:29:57 +0530
|
||
|
Subject: [PATCH 4/5] cdc-wdm: provide wrapper for reset_resume
|
||
|
|
||
|
---
|
||
|
drivers/usb/class/cdc-wdm.c | 35 ++++++++++++++++++++++++++++++++++-
|
||
|
1 file changed, 34 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
|
||
|
index 508b1c3f8b731..2b9355ed4a2ad 100644
|
||
|
--- a/drivers/usb/class/cdc-wdm.c
|
||
|
+++ b/drivers/usb/class/cdc-wdm.c
|
||
|
@@ -1119,6 +1119,39 @@ static int wdm_resume(struct usb_interface *intf)
|
||
|
|
||
|
return rv;
|
||
|
}
|
||
|
+
|
||
|
+static int wdm_reset_resume(struct usb_interface *intf)
|
||
|
+{
|
||
|
+ struct wdm_device *desc = wdm_find_device(intf);
|
||
|
+ int rv;
|
||
|
+
|
||
|
+ dev_dbg(&desc->intf->dev, "wdm%d_reset_resume\n", intf->minor);
|
||
|
+
|
||
|
+ spin_lock_irq(&desc->iuspin);
|
||
|
+ set_bit(WDM_RESETTING, &desc->flags);
|
||
|
+ set_bit(WDM_READ, &desc->flags);
|
||
|
+ clear_bit(WDM_IN_USE, &desc->flags);
|
||
|
+
|
||
|
+ desc->rerr = -EINTR;
|
||
|
+
|
||
|
+ spin_unlock_irq(&desc->iuspin);
|
||
|
+ wake_up_all(&desc->wait);
|
||
|
+ mutex_lock(&desc->rlock);
|
||
|
+ mutex_lock(&desc->wlock);
|
||
|
+ poison_urbs(desc);
|
||
|
+ cancel_work_sync(&desc->rxwork);
|
||
|
+ cancel_work_sync(&desc->service_outs_intr);
|
||
|
+
|
||
|
+ clear_bit(WDM_SUSPENDING, &desc->flags);
|
||
|
+ clear_bit(WDM_OVERFLOW, &desc->flags);
|
||
|
+ clear_bit(WDM_RESETTING, &desc->flags);
|
||
|
+
|
||
|
+ rv = recover_from_urb_loss(desc);
|
||
|
+ mutex_unlock(&desc->wlock);
|
||
|
+ mutex_unlock(&desc->rlock);
|
||
|
+
|
||
|
+ return rv;
|
||
|
+}
|
||
|
#endif
|
||
|
|
||
|
static int wdm_pre_reset(struct usb_interface *intf)
|
||
|
@@ -1166,7 +1199,7 @@ static struct usb_driver wdm_driver = {
|
||
|
#ifdef CONFIG_PM
|
||
|
.suspend = wdm_suspend,
|
||
|
.resume = wdm_resume,
|
||
|
- .reset_resume = wdm_resume,
|
||
|
+ .reset_resume = wdm_reset_resume,
|
||
|
#endif
|
||
|
.pre_reset = wdm_pre_reset,
|
||
|
.post_reset = wdm_post_reset,
|
||
|
--
|
||
|
2.31.1
|
||
|
|