]> git.ipfire.org Git - thirdparty/kernel/stable.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>
Wed, 3 Dec 2025 11:45:11 +0000 (12:45 +0100)
[ Upstream commit ed6f727c575b1eb8136e744acfd5e7306c9548f6 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/gadget/function/f_hid.c

index 77354626252cd8db1ca6dd24584b029aaf60cc01..cea9157ea2b4230274cc698a991b5d63c59d2e1c 100644 (file)
@@ -496,7 +496,7 @@ try_again:
        }
 
        req->status   = 0;
-       req->zero     = 0;
+       req->zero     = 1;
        req->length   = count;
        req->complete = f_hidg_req_complete;
        req->context  = hidg;
@@ -767,7 +767,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)