Instead of suspending/resume the USB device at open()/close(), do it when the device is actually used. This way we can reduce the power consumption when a service is holding the video device and leaving it in an idle state. And now that all the access to the hardware, has a common entry path, use it to fix the race conditions to hardware disconnects. To: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> Cc: linux-media@xxxxxxxxxxxxxxx Cc: linux-kernel@xxxxxxxxxxxxxxx Cc: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> Cc: Tomasz Figa <tfiga@xxxxxxxxxxxx> Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Cc: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> Cc: Guenter Roeck <linux@xxxxxxxxxxxx> Cc: Max Staudt <mstaudt@xxxxxxxxxx> Signed-off-by: Ricardo Ribalda <ribalda@xxxxxxxxxxxx> --- Changes in v2: - Make access to uvc_status contitional - Merge with Guenter race condition patchset: https://lore.kernel.org/lkml/20200917022547.198090-1-linux@xxxxxxxxxxxx/ - Link to v1: https://lore.kernel.org/r/20220920-resend-powersave-v1-0-123aa2ba3836@xxxxxxxxxxxx --- Guenter Roeck (4): media: uvcvideo: Cancel async worker earlier media: uvcvideo: Lock video streams and queues while unregistering media: uvcvideo: Release stream queue when unregistering video device media: uvcvideo: Protect uvc queue file operations against disconnect Ricardo Ribalda (4): media: uvcvideo: Only create input devs if hw supports it media: uvcvideo: Refactor streamon/streamoff media: uvcvideo: Do power management granularly media: uvcvideo: Only call status ep if hw supports it drivers/media/usb/uvc/uvc_ctrl.c | 11 +- drivers/media/usb/uvc/uvc_driver.c | 28 +++++- drivers/media/usb/uvc/uvc_queue.c | 32 +++++- drivers/media/usb/uvc/uvc_status.c | 34 ++++++- drivers/media/usb/uvc/uvc_v4l2.c | 201 ++++++++++++++++++++++++++++++------- drivers/media/usb/uvc/uvcvideo.h | 2 + 6 files changed, 262 insertions(+), 46 deletions(-) --- base-commit: 1a2dcbdde82e3a5f1db9b2f4c48aa1aeba534fb2 change-id: 20220920-resend-powersave-5981719ed267 Best regards, -- Ricardo Ribalda <ribalda@xxxxxxxxxxxx>