From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Wed, 03 Jan 2024 09:43:39 +0000 Subject: [PATCH] update kernel to 5.10.198 --- kernel/drivers/media/usb/uvc/uvc_video.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-) diff --git a/kernel/drivers/media/usb/uvc/uvc_video.c b/kernel/drivers/media/usb/uvc/uvc_video.c index f6373d6..5344e67 100644 --- a/kernel/drivers/media/usb/uvc/uvc_video.c +++ b/kernel/drivers/media/usb/uvc/uvc_video.c @@ -20,6 +20,7 @@ #include <media/v4l2-common.h> #include "uvcvideo.h" +#include <soc/rockchip/rockchip-system-status.h> /* ------------------------------------------------------------------------ * UVC Controls @@ -1308,7 +1309,9 @@ if (has_scr) memcpy(stream->clock.last_scr, scr, 6); - memcpy(&meta->length, mem, length); + meta->length = mem[0]; + meta->flags = mem[1]; + memcpy(meta->buf, &mem[2], length - 2); meta_buf->bytesused += length + sizeof(meta->ns) + sizeof(meta->sof); uvc_trace(UVC_TRACE_FRAME, @@ -1903,6 +1906,17 @@ uvc_trace(UVC_TRACE_VIDEO, "Selecting alternate setting %u " "(%u B/frame bandwidth).\n", altsetting, best_psize); + /* + * Some devices, namely the Logitech C910 and B910, are unable + * to recover from a USB autosuspend, unless the alternate + * setting of the streaming interface is toggled. + */ + if (stream->dev->quirks & UVC_QUIRK_WAKE_AUTOSUSPEND) { + usb_set_interface(stream->dev->udev, intfnum, + altsetting); + usb_set_interface(stream->dev->udev, intfnum, 0); + } + ret = usb_set_interface(stream->dev->udev, intfnum, altsetting); if (ret < 0) return ret; @@ -2126,6 +2140,8 @@ if (ret < 0) goto error_commit; + rockchip_set_system_status(SYS_STATUS_PERFORMANCE); + ret = uvc_video_start_transfer(stream, GFP_KERNEL); if (ret < 0) goto error_video; @@ -2133,6 +2149,7 @@ return 0; error_video: + rockchip_clear_system_status(SYS_STATUS_PERFORMANCE); usb_set_interface(stream->dev->udev, stream->intfnum, 0); error_commit: uvc_video_clock_cleanup(stream); @@ -2163,4 +2180,5 @@ } uvc_video_clock_cleanup(stream); + rockchip_clear_system_status(SYS_STATUS_PERFORMANCE); } -- Gitblit v1.6.2