]> www.infradead.org Git - users/hch/misc.git/commitdiff
usb: gadget: f_hid: Fix zero length packet transfer
authorWilliam Wu <william.wu@rock-chips.com>
Tue, 26 Aug 2025 10:28:07 +0000 (18:28 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Sep 2025 13:22:44 +0000 (15:22 +0200)
Set the hid req->zero flag of ep0/in_ep to true by default,
then the UDC drivers can transfer a zero length packet at
the end if the hid transfer with size divisible to EPs max
packet size according to the USB 2.0 spec.

Signed-off-by: William Wu <william.wu@rock-chips.com>
Link: https://lore.kernel.org/r/1756204087-26111-1-git-send-email-william.wu@rock-chips.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/function/f_hid.c

index 8e1d1e8840503efe0e727ad30c1158b95789a0fd..307ea563af95e88e44d567aabad44aaed4923f21 100644 (file)
@@ -511,7 +511,7 @@ try_again:
        }
 
        req->status   = 0;
-       req->zero     = 0;
+       req->zero     = 1;
        req->length   = count;
        req->complete = f_hidg_req_complete;
        req->context  = hidg;
@@ -967,7 +967,7 @@ stall:
        return -EOPNOTSUPP;
 
 respond:
-       req->zero = 0;
+       req->zero = 1;
        req->length = length;
        status = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
        if (status < 0)