Since the host and gadget can't agree with transfer length before
each transfer, but they agree with max packet size for each
endpoint, we use max packet size to format data pattern.

Acked-by: Michal Nazarewicz <[email protected]>
Signed-off-by: Peter Chen <[email protected]>
---
 drivers/usb/gadget/function/f_sourcesink.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/gadget/function/f_sourcesink.c 
b/drivers/usb/gadget/function/f_sourcesink.c
index cbfaf86..37c7a51 100644
--- a/drivers/usb/gadget/function/f_sourcesink.c
+++ b/drivers/usb/gadget/function/f_sourcesink.c
@@ -489,6 +489,7 @@ static int check_read_data(struct f_sourcesink *ss, struct 
usb_request *req)
        unsigned                i;
        u8                      *buf = req->buf;
        struct usb_composite_dev *cdev = ss->function.config->cdev;
+       int max_packet_size = le16_to_cpu(ss->out_ep->desc->wMaxPacketSize);
 
        if (pattern == 2)
                return 0;
@@ -510,7 +511,7 @@ static int check_read_data(struct f_sourcesink *ss, struct 
usb_request *req)
                 * stutter for any reason, including buffer duplication...)
                 */
                case 1:
-                       if (*buf == (u8)(i % 63))
+                       if (*buf == (u8)((i % max_packet_size) % 63))
                                continue;
                        break;
                }
@@ -525,6 +526,7 @@ static void reinit_write_data(struct usb_ep *ep, struct 
usb_request *req)
 {
        unsigned        i;
        u8              *buf = req->buf;
+       int max_packet_size = le16_to_cpu(ep->desc->wMaxPacketSize);
 
        switch (pattern) {
        case 0:
@@ -532,7 +534,7 @@ static void reinit_write_data(struct usb_ep *ep, struct 
usb_request *req)
                break;
        case 1:
                for  (i = 0; i < req->length; i++)
-                       *buf++ = (u8) (i % 63);
+                       *buf++ = (u8) ((i % max_packet_size) % 63);
                break;
        case 2:
                break;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to