aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb/serial/uvscom.c
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2021-07-06 10:29:57 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2021-07-15 10:11:53 +0000
commitf83f5d58394db57576bbed6dc7531997cabeb102 (patch)
tree36623792f9e3036c7c8d6002d12bd4f8405bbd9c /sys/dev/usb/serial/uvscom.c
parentb644d64e8a4641a6e4c53b3f4be51e08cb17f6cc (diff)
Diffstat (limited to 'sys/dev/usb/serial/uvscom.c')
-rw-r--r--sys/dev/usb/serial/uvscom.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/dev/usb/serial/uvscom.c b/sys/dev/usb/serial/uvscom.c
index 8bb69e4402cf..81fd5334a243 100644
--- a/sys/dev/usb/serial/uvscom.c
+++ b/sys/dev/usb/serial/uvscom.c
@@ -318,8 +318,7 @@ uvscom_attach(device_t dev)
/* clear stall at first run */
mtx_lock(&sc->sc_mtx);
- usbd_xfer_set_stall(sc->sc_xfer[UVSCOM_BULK_DT_WR]);
- usbd_xfer_set_stall(sc->sc_xfer[UVSCOM_BULK_DT_RD]);
+ usbd_xfer_set_zlp(sc->sc_xfer[UVSCOM_BULK_DT_WR]);
mtx_unlock(&sc->sc_mtx);
error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc,
@@ -391,13 +390,16 @@ uvscom_write_callback(struct usb_xfer *xfer, usb_error_t error)
case USB_ST_SETUP:
case USB_ST_TRANSFERRED:
tr_setup:
+ if (usbd_xfer_get_and_clr_zlp(xfer))
+ break;
+
pc = usbd_xfer_get_frame(xfer, 0);
if (ucom_get_data(&sc->sc_ucom, pc, 0,
UVSCOM_BULK_BUF_SIZE, &actlen)) {
usbd_xfer_set_frame_len(xfer, 0, actlen);
usbd_transfer_submit(xfer);
}
- return;
+ break;
default: /* Error */
if (error != USB_ERR_CANCELLED) {
@@ -405,7 +407,7 @@ tr_setup:
usbd_xfer_set_stall(xfer);
goto tr_setup;
}
- return;
+ break;
}
}