diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c index a3ec066419eb..7f257d18c2d2 100644 --- a/drivers/usb/gadget/function/uvc_v4l2.c +++ b/drivers/usb/gadget/function/uvc_v4l2.c @@ -78,6 +78,16 @@ static int uvc_get_frame_size(struct uvcg_format *uformat, { unsigned int bpl = uvc_v4l2_get_bytesperline(uformat, uframe); + if (uformat->type == UVCG_FRAMEBASED && !bpl) { + struct uvcg_framebased *u; + + u = to_uvcg_framebased(&uformat->group.cg_item); + if (u) { + bpl = u->desc.bBitsPerPixel * uframe->frame.w_width / 8; + pr_info("%s: set bpl to %d for framebased format\n", __func__, bpl); + } + } + return bpl ? bpl * uframe->frame.w_height : uframe->frame.dw_max_video_frame_buffer_size; }