Skip to contentSkip to conversation

USB: serial: ch341: fix resume after reset

PATCH In review Johan Hovold 2 participants 2 messages Jan 17, 2017 Stable branch

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 USB: serial: ch341: fix resume after reset

commit ce5e292828117d1b71cbd3edf9e9137cf31acd30 upstream.

Fix reset-resume handling which failed to resubmit the read and interrupt URBs, thereby leaving a port that was open before suspend in a broken state until closed and reopened.

Fixes 1ded7ea47b88 ("USB: ch341 serial: fix port number changed after

resume")

Fixes 2bfd1c96a9fb ("USB: serial: ch341: remove reset_resume callback")
Cc stable <[email protected]>

---

This is a backport of ce5e29282811 ("USB: serial: ch341: fix resume after reset") to 4.4 stable.

Note that current version of this patch in the stable queue will fail to compile as it depends on patch that went into 4.7.

This patch should replace the one currently in the 4.4 stable queue.

Johan

 drivers/usb/serial/ch341.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)
drivers/usb/serial/ch341.c +13 -4
index 56e1d2ab5fa5..f20b856d4ab6 100644
@@ -544,14 +544,23 @@ static int ch341_tiocmget(struct tty_struct *tty)
 
 static int ch341_reset_resume(struct usb_serial *serial)
 {
-	struct ch341_private *priv;
-
-	priv = usb_get_serial_port_data(serial->port[0]);
+	struct usb_serial_port *port = serial->port[0];
+	struct ch341_private *priv = usb_get_serial_port_data(port);
+	int ret;
 
 	/* reconfigure ch341 serial port after bus-reset */
 	ch341_configure(serial->dev, priv);
 
-	return 0;
+	if (test_bit(ASYNCB_INITIALIZED, &port->port.flags)) {
+		ret = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO);
+		if (ret) {
+			dev_err(&port->dev, "failed to submit interrupt urb: %d\n",
+				ret);
+			return ret;
+		}
+	}
+
+	return usb_serial_generic_resume(serial);
 }
 
 static struct usb_serial_driver ch341_device = {
Signature · 1 line
2.10.2
#1 lore raw
Quoted 13 lines · Johan Hovold

commit ce5e292828117d1b71cbd3edf9e9137cf31acd30 upstream.

Fix reset-resume handling which failed to resubmit the read and interrupt URBs, thereby leaving a port that was open before suspend in a broken state until closed and reopened.

Fixes 1ded7ea47b88 ("USB: ch341 serial: fix port number changed after

resume")

Fixes 2bfd1c96a9fb ("USB: serial: ch341: remove reset_resume callback")
Cc stable <[email protected]>

---

Quoted 7 lines

This is a backport of ce5e29282811 ("USB: serial: ch341: fix resume after reset") to 4.4 stable.

Note that current version of this patch in the stable queue will fail to compile as it depends on patch that went into 4.7.

This patch should replace the one currently in the 4.4 stable queue.

Thanks for this, now applied.

greg k-h