Commit f262ce66 authored by Michael Grzeschik's avatar Michael Grzeschik Committed by Greg Kroah-Hartman
Browse files

usb: gadget: uvc: use on returned header len in video_encode_isoc_sg



The function uvc_video_encode_header function returns the number of
bytes used for the header. We change the video_encode_isoc_sg function
to use the returned header_len rather than UVCG_REQUEST_HEADER_LEN and
make the encode function more flexible.

Signed-off-by: default avatarMichael Grzeschik <m.grzeschik@pengutronix.de>
Link: https://lore.kernel.org/r/20211022093223.26493-1-m.grzeschik@pengutronix.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d9f27348
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -104,22 +104,22 @@ uvc_video_encode_isoc_sg(struct usb_request *req, struct uvc_video *video,
	unsigned int len = video->req_size;
	unsigned int sg_left, part = 0;
	unsigned int i;
	int ret;
	int header_len;

	sg = ureq->sgt.sgl;
	sg_init_table(sg, ureq->sgt.nents);

	/* Init the header. */
	ret = uvc_video_encode_header(video, buf, ureq->header,
	header_len = uvc_video_encode_header(video, buf, ureq->header,
				      video->req_size);
	sg_set_buf(sg, ureq->header, UVCG_REQUEST_HEADER_LEN);
	len -= ret;
	sg_set_buf(sg, ureq->header, header_len);
	len -= header_len;

	if (pending <= len)
		len = pending;

	req->length = (len == pending) ?
		len + UVCG_REQUEST_HEADER_LEN : video->req_size;
		len + header_len : video->req_size;

	/* Init the pending sgs with payload */
	sg = sg_next(sg);
@@ -148,7 +148,7 @@ uvc_video_encode_isoc_sg(struct usb_request *req, struct uvc_video *video,
	req->num_sgs = i + 1;

	req->length -= len;
	video->queue.buf_used += req->length - UVCG_REQUEST_HEADER_LEN;
	video->queue.buf_used += req->length - header_len;

	if (buf->bytesused == video->queue.buf_used || !buf->sg) {
		video->queue.buf_used = 0;