From nobody Fri Dec 19 03:45:32 2025 Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD242221732 for ; Wed, 26 Feb 2025 14:23:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579813; cv=none; b=HLYpvmpzp6wnwSM0yPuTKkqn0gAZjsEanKgZHPWdoG7/dXF6u6R/Mkw3SA7H1obhTbNv6l/OAeo+8CP5Nep/jRQJeTge8QQQBXlQKlwaUq4SRLKnxvd+zNImcnfW6W8GiHLFYDAxaWEa75vskclLOYqqxmztiBns7Ao95Ygc910= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579813; c=relaxed/simple; bh=ri+j1q9HNTbPxqJ5PKx8hnKBR80LOJzmJuwIpKv0D6k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ToJPQrZH2T6BP/7puhIFonIn5f6kL3DgHl5SMoljKSMOc2X9QbGpsEohLJcXYhBnZ0oxJcS226O1w4fIhduqsELDPDdiaa/yEUu3kXzklUUvlRX739sj5GBE1dS42yFUBUELyaI5Gj16lNFLVSrkp0+2G+DCwtDa96lKQHI1Pd0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=ED5Bnt73; arc=none smtp.client-ip=209.85.222.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ED5Bnt73" Received: by mail-qk1-f177.google.com with SMTP id af79cd13be357-7c0b9f35dc7so933878285a.2 for ; Wed, 26 Feb 2025 06:23:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740579810; x=1741184610; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=FR7Ypv0Sg+ewXBIGdoxyyeMv+vtDJwycIUjyx2MKkFY=; b=ED5Bnt73wpD3fChX3kqbJa3/XhmoG76Oyzv4FTfkR8UQR0x0iInvO6gv/vZp9HnW+E ++7HupKvm6+/9hlElPdS+ocGL/JEWZILR1TTtZ9mb1ufUgjklUru3tJAOj26yxZNg+A8 uIgIieCR+Z13WkyFwWno2Au6D0TdRjVwtlV0A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740579810; x=1741184610; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FR7Ypv0Sg+ewXBIGdoxyyeMv+vtDJwycIUjyx2MKkFY=; b=ccJoZSvtjqAIaVr4csJ7bpCS2Sv14cpMvdIRdclVq5LL7C+x1Jls2wXUKWjE5gdWX1 JtUA4scnR7K+45ACkgQLs1haGpEUzsOO0tbpQRy8xYCoOU+yoIq7mwadspwq3tuACpqc 8mrGo/uhmhrNRx/U99ZNVmndhkQIGCcDO0uvn4CMmYKs8GgR9oNgRWb9gs0YmLkGFPH3 7AD/e2wG8LxdFytsHXik7E/tWltWm/0f98+eGPf30J9eqa7nCqkMHo69CL4F4fRIfC84 vkWtdXWIRhby0egYPrcrxyyoD5KNAagQK0Tp34jW4RSTvxY91I9ssfEqQI+Qo0MhRFFH L35A== X-Forwarded-Encrypted: i=1; AJvYcCWOCsJjSi4CBt6Lr1RZSMB0xsqTtVT8/k2iDeDDYu/z32OqVXcXidA7eRls4y/7Bkk8wZcqp2d32mXUsa4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywxv0rDVBPjSybT8s3WG/ggdr1KFG8QJj6kFbmS/FJq92aQltL7 osRiZ0bjja5CTXh/SyvfCkSoDmleNJZsgbxM9A5F2YFL7N7tiSmwDyQGEKbG/A== X-Gm-Gg: ASbGncueNz944O+ruFUCkdz1VYWWwhGeVXlZyy1pv/MncYOOeBkfl5v4fl55AUo23VZ xuXi7DSXUsDj+ZgaUak4zGj9dYYcW2z4kDPzKX13wPR/j/vsuy2psN8VF4wJ/76mDPP54Uy1loO J+UBXASI9yAcUk0NSgwIgTW526H/dKVCavQx0hwCQGzVwmkfgb7HA3YRnEOU+hicvkvRwNwcTKS cFDipD/VbYb0jPhXAk0b21/ebhEEW5Rwt5BoLScxo+kb5SDnTOAcqf37bDFWaiZ3hF9Cs9Yh7bv 40mMBrfQ1zT2zly2djMerHA9dvJQjCXS/OY77fPgVoXusE7OmVAKLgBqzaPcEAmxEpj9UwB3T+S eQxw= X-Google-Smtp-Source: AGHT+IH79EX6T3W52JGBBGWui/gHd8e8j+HpD2LiLS0W30noVcOURaOisGZHFg886wnhbnBhazedTQ== X-Received: by 2002:a05:620a:404a:b0:7c0:808b:1c78 with SMTP id af79cd13be357-7c247fcb611mr700665085a.36.1740579810731; Wed, 26 Feb 2025 06:23:30 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7c23c33cfb0sm246336085a.103.2025.02.26.06.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 06:23:29 -0800 (PST) From: Ricardo Ribalda Date: Wed, 26 Feb 2025 14:23:27 +0000 Subject: [PATCH v4 1/5] media: uvcvideo: Keep streaming state in the file handle Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250226-uvc-granpower-ng-v4-1-3ec9be906048@chromium.org> References: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> In-Reply-To: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Add a variable in the file handle state to figure out if a camera is in the streaming state or not. This variable will be used in the future for power management policies. Now that we are at it, make use of guards to simplify the code. Reviewed-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_v4l2.c | 18 +++++++++++++----- drivers/media/usb/uvc/uvcvideo.h | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 93c6cdb23881..f9cd6db759c5 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -835,11 +835,18 @@ static int uvc_ioctl_streamon(struct file *file, void= *fh, if (!uvc_has_privileges(handle)) return -EBUSY; =20 - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + + if (handle->is_streaming) + return 0; + ret =3D uvc_queue_streamon(&stream->queue, type); - mutex_unlock(&stream->mutex); + if (ret) + return ret; =20 - return ret; + handle->is_streaming =3D true; + + return 0; } =20 static int uvc_ioctl_streamoff(struct file *file, void *fh, @@ -851,9 +858,10 @@ static int uvc_ioctl_streamoff(struct file *file, void= *fh, if (!uvc_has_privileges(handle)) return -EBUSY; =20 - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + uvc_queue_streamoff(&stream->queue, type); - mutex_unlock(&stream->mutex); + handle->is_streaming =3D false; =20 return 0; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 5e388f05f3fc..bc87e1f2c669 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -618,6 +618,7 @@ struct uvc_fh { struct uvc_streaming *stream; enum uvc_handle_state state; unsigned int pending_async_ctrls; + bool is_streaming; }; =20 struct uvc_driver { --=20 2.48.1.658.g4767266eb4-goog From nobody Fri Dec 19 03:45:32 2025 Received: from mail-qk1-f181.google.com (mail-qk1-f181.google.com [209.85.222.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA0AB22173E for ; Wed, 26 Feb 2025 14:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579814; cv=none; b=JEvfopKVCUuAP8xJJdV7QsvRua/aYjBtFkWRgojgLataFgKNVnLRXUjX0+QuCqC5yyKvDA36Jt0qPDvMaReAog09OVe+43pDecvX3O8BdefhOkiRCrf1ZmOTkEb0XZNAw0MWhNB+YW8LPuMSGEk6nkUxN1MRh2x/Eh+JMvwf78Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579814; c=relaxed/simple; bh=71qURUpKQyHqhn8hHrbpIZhkr9HtzexcGmxJCr00cjw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ey6iDClDVLTd3sFivI0j8IhFW4KeK6FoxZ8IILwdTdjbPVTEKsBsdWTBoBnAhMPz/gNx753vQ8re+6ewq7NaiY1kPUrNJ09QTIBj2ZzF9Hi9TL5KXQAJwaD32QVRmfNc7BPD9SChMAKr9Ia1mWTGyBWgV+hsZ9yqlqCoOB4YcgM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=VlTu6iqz; arc=none smtp.client-ip=209.85.222.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="VlTu6iqz" Received: by mail-qk1-f181.google.com with SMTP id af79cd13be357-7c24ae82de4so53671985a.1 for ; Wed, 26 Feb 2025 06:23:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740579812; x=1741184612; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=I2vbUd0IkHjhLkq4YLUTxGcYI4X6Kojg8kTGYZFd8GM=; b=VlTu6iqzZGlq3ht1GCmuK1OelGevKydVcN2QJdKdOAsETpuWJ3JS5PyJ+K4LM2ffRR vSzZmrHPQU/HKIYwtyl2geSKkxVDygtH3ZIIlCvBkfL/xsd1DGrt7OHTsnhMQyq+vE27 t84hjsJdF9d4grfg6zgPj60bvKDm5Xnmpe2gY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740579812; x=1741184612; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=I2vbUd0IkHjhLkq4YLUTxGcYI4X6Kojg8kTGYZFd8GM=; b=PLzpsWEkHLESs5VIZd8W7jxgqMiYkArTPG2jve8iaf2KdK+H1tQ4/yC+4wqFumYEDo DTv5zHIgJNppXE9or+nCeMTVVoRIwivfXFukfpkl4tPCbGxd4Mhj1al0rAZbC/yQYSiQ dEcaotiRtVU0SNiexeKzRjIpYIRa/ccFAGwUBV/2h9IGTt7Sqknl/o5iAtqHqZGLj9ed dlL8pcyH/ypIlvh7F0VE1Gs4hoSi2xygcnEWzUXYV7KvXTPZnVzBz8uDuB+UfYxrIKSS 2o20jR4t07K7UGQ7furEpiX5qmmDmjENs8k9BHmHEgjlQXUh5CCcDY01Ce0Dv0SrVDX7 ERiQ== X-Forwarded-Encrypted: i=1; AJvYcCU5WMhMwTzQ2Uqd5NIJWohRNYjFT1Y/4oB1GDKjJirFbgE/taouo+TdnZpvywNshKVX9uwJVXDY0vSa9mU=@vger.kernel.org X-Gm-Message-State: AOJu0YxSGCpmjehyt7WH8yspgNUG+7x8azt8Ce6X+k9mEBo+LS9K7ct1 B7W1eiz6ivTLhAJfK4ZLvuRur+oWRJcHCC06Gh7hEKsFkQTwNebiTN1k5ulacA== X-Gm-Gg: ASbGncsNhg1/WppdF7z7fzafkVuqUctBaQCzt5ZbZu/0Bp+vcDdQsu+q4B7qccBvEMG Kqrdaas0wTu1PmqCHp3cwv9v9hVs7fD4o98zAk/ywV+tUYIs2oZEG6fEY1Y7gHqURAz8gJKFe8T lKemuW2XOHTzcYa3kBQOntLb5AXkuRs7+tok5wF43/tEKGSJxQhL9PzWEdHbNHQa6atOQMNxjap gkxQd+1WkI4wcsQsQ2vbOkncIMVq7QPn+JN86VsjP4fDA9QwMacfy/KHvCL+u5FLOcuTDAdjolE u1wP8xC10CE4JxzepHuB8G6Zbq6MoiRv8+vIl/bd2xbh3+jkNV4JFd6ik8JnNbwmkKmeU+JrKv4 7AXI= X-Google-Smtp-Source: AGHT+IEIjZIDI9MFFXd5K8qshi0fFF0mSwbprLeHtnyDrbye91YUoOAfrTDjrDmjYqtIPY5GIvRxrQ== X-Received: by 2002:a05:620a:31a8:b0:7c0:bb3f:e285 with SMTP id af79cd13be357-7c0cf8ce834mr2663166985a.24.1740579811861; Wed, 26 Feb 2025 06:23:31 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7c23c33cfb0sm246336085a.103.2025.02.26.06.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 06:23:30 -0800 (PST) From: Ricardo Ribalda Date: Wed, 26 Feb 2025 14:23:28 +0000 Subject: [PATCH v4 2/5] media: uvcvideo: Create uvc_pm_(get|put) functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250226-uvc-granpower-ng-v4-2-3ec9be906048@chromium.org> References: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> In-Reply-To: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Most of the times that we have to call uvc_status_(get|put) we need to call the usb_autopm_ functions. Create a new pair of functions that automate this for us. This simplifies the current code and future PM changes in the driver. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_v4l2.c | 36 ++++++++++++++++++++++++------------ drivers/media/usb/uvc/uvcvideo.h | 4 ++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index f9cd6db759c5..de1e105f7263 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -26,6 +26,27 @@ =20 #include "uvcvideo.h" =20 +int uvc_pm_get(struct uvc_device *dev) +{ + int ret; + + ret =3D usb_autopm_get_interface(dev->intf); + if (ret) + return ret; + + ret =3D uvc_status_get(dev); + if (ret) + usb_autopm_put_interface(dev->intf); + + return ret; +} + +void uvc_pm_put(struct uvc_device *dev) +{ + uvc_status_put(dev); + usb_autopm_put_interface(dev->intf); +} + static int uvc_acquire_privileges(struct uvc_fh *handle); =20 static int uvc_control_add_xu_mapping(struct uvc_video_chain *chain, @@ -636,20 +657,13 @@ static int uvc_v4l2_open(struct file *file) stream =3D video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); =20 - ret =3D usb_autopm_get_interface(stream->dev->intf); - if (ret < 0) - return ret; - /* Create the device handle. */ handle =3D kzalloc(sizeof(*handle), GFP_KERNEL); - if (handle =3D=3D NULL) { - usb_autopm_put_interface(stream->dev->intf); + if (!handle) return -ENOMEM; - } =20 - ret =3D uvc_status_get(stream->dev); + ret =3D uvc_pm_get(stream->dev); if (ret) { - usb_autopm_put_interface(stream->dev->intf); kfree(handle); return ret; } @@ -684,9 +698,7 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); + uvc_pm_put(stream->dev); return 0; } =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index bc87e1f2c669..fbe3649c7cd6 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -763,6 +763,10 @@ void uvc_status_suspend(struct uvc_device *dev); int uvc_status_get(struct uvc_device *dev); void uvc_status_put(struct uvc_device *dev); =20 +/* PM */ +int uvc_pm_get(struct uvc_device *dev); +void uvc_pm_put(struct uvc_device *dev); + /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; =20 --=20 2.48.1.658.g4767266eb4-goog From nobody Fri Dec 19 03:45:32 2025 Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5954C2222AB for ; Wed, 26 Feb 2025 14:23:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579816; cv=none; b=VT2vPdVmP0AfbMuvNa+vwUDNB+OiNATeHVQGfR1xn8S2e0/FWmv3CktvTowuJwf/jQu29/ggJtjAxtXg3e23Q3IbHyZ5+9Mwcw7s7nl7tkqkNRFomoIp+OZJ4rg2yBm43qzPyv7I2VRaRu+iihZcWVe75/sWEw7w1vRumUGaXM0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579816; c=relaxed/simple; bh=rylK6f1QH5ynXpFEibP1x7WRxpQi7HVpYgi2w6TZTjg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hyYMlieKok9ax53e1aQPC5X5z4zP/b1plSlUt3R0tYb3sMcOx/phLD6AzebVs1pnhf0bChlv4etxBsU3EpVZhtRP5aHJZ5BYPFtRS91nBwgEi+4rXYIwzE7mpSt4FTFS+6K5TS0vthK42HJfxPBJEYBkxfYGhoMyDzxV8SzvPsY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=cVCGN5bi; arc=none smtp.client-ip=209.85.222.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="cVCGN5bi" Received: by mail-qk1-f177.google.com with SMTP id af79cd13be357-7c08fc20194so1140700585a.2 for ; Wed, 26 Feb 2025 06:23:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740579813; x=1741184613; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BnrHbOIeNyXFgC3ohSck6umf/PDQ1ndtYxjmn58DA5o=; b=cVCGN5biLc3Z6k+Ujn3n7oJEPeXrWGlSGj67YyL/nK/8ioJn575UKicejmg7+Z65Y+ HqzNeOnYQiqi05lAu/p4sqW8Jup3s2I15po1VjHPbnzUrY1Y387kRXcAXbiAD4f6Iepb pl44YiBGrsIfr/w1Xoyy1yiVT6pTvWnvw+ohU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740579813; x=1741184613; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BnrHbOIeNyXFgC3ohSck6umf/PDQ1ndtYxjmn58DA5o=; b=alCAGzCiZsabSKLzWiF0ahi8sFza2/MFgX62p1pgtKrj7fkat9dcDUpzYBWrTwRwKS xBrT+bUZ71cuHAw/CIM2FSuVmrv0mcVOVkWDEtIfvANKBlcbjiMChfMoI8VWgW0LL0NS ckTpbLAJujVLnXYsPX5GEfZWNGOvubBDOMuGgeP+XpAeaTtA1GM6jtlL4wqZinFWm9Xz WblLdoVBf1H/7dpresE9+3Ckn6lZ44Ui4gUdfokTk+zRVJv1TW4E24rOLAktyIKSxY2n JRNn23HLLt+VSz/lFAZnoaGismkYxaQkK1zGGiK7czqCAYqpAQ/f0OOaqd1bzbZ8KzM7 qjvA== X-Forwarded-Encrypted: i=1; AJvYcCUcMExZodENvfe2r9/2HFO4+vNLd57GdlOYTYtel0hsr/T6bzD8Kfqend6d1s3tjOfXfGnKltuC3eIbZk8=@vger.kernel.org X-Gm-Message-State: AOJu0YxBNQbH4oARGdydtWCv6atgJnBklCLfrwCbUzxtHQ2mJhYRI2H+ fgG7BH5oTbOVkrev//pejoiDy1DZvZwGdQjcFtEbVy/xgCJi2GxssX5FmAFgc+gzE+lBa0G7Pac = X-Gm-Gg: ASbGnctHe0NE6fcaEKP0+3fXIno321eb1es22wREwpHXGleXl1f4lwNwjvxvNfpAfNp ofm9mvBtaiNUfZQn8a0TM9DjKEqdrDucACjolosl8XF11yPsuI2bG9MkBCR4Z3RH8o/P/P9I10F qPaYKen7vanoJZ1FWe4yXXNQRZlYvA5bT5qzXmWGIeUUdf3Ha49nuLHtilYGfYScaHkRcYzztVh QKWOF2uivHr1SmkGw8/00ZE83XG5K2Z6JMCG3M23wbdbHA2HDvaVsfNlp92zghZ8fwsgIbYH3oc nj/HmuivIT6gFakOB9yVSxCWbiecJJkMktG/4shSOblJ+aDLvZRuG71SgJ3pCv/qwD10wO1o1dE rFCo= X-Google-Smtp-Source: AGHT+IF2fi7OhvOIfrZBpLucCECiFhFVL1Q4iddsUtPiahTbS8VKT8yERMFERI4M5Nb7Ay79RtvcaA== X-Received: by 2002:a05:620a:4106:b0:7c0:a28e:4970 with SMTP id af79cd13be357-7c23be24c00mr740057185a.29.1740579813351; Wed, 26 Feb 2025 06:23:33 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7c23c33cfb0sm246336085a.103.2025.02.26.06.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 06:23:32 -0800 (PST) From: Ricardo Ribalda Date: Wed, 26 Feb 2025 14:23:29 +0000 Subject: [PATCH v4 3/5] media: uvcvideo: Increase/decrease the PM counter per IOCTL Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250226-uvc-granpower-ng-v4-3-3ec9be906048@chromium.org> References: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> In-Reply-To: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Now we call uvc_pm_get/put from the device open/close. This low level of granularity might leave the camera powered on in situations where it is not needed. Increase the granularity by increasing and decreasing the Power Management counter per ioctl. There are two special cases where the power management outlives the ioctl: async controls and streamon. Handle those cases as well. In a future patch, we will remove the uvc_pm_get/put from open/close. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_ctrl.c | 13 +++++++++++-- drivers/media/usb/uvc/uvc_v4l2.c | 23 +++++++++++++++++++++-- drivers/media/usb/uvc/uvcvideo.h | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 4e58476d305e..47188c7f96c7 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1594,12 +1594,15 @@ static void uvc_ctrl_set_handle(struct uvc_fh *hand= le, struct uvc_control *ctrl, =20 if (ctrl->handle) { WARN_ON(!ctrl->handle->pending_async_ctrls); - if (ctrl->handle->pending_async_ctrls) + if (ctrl->handle->pending_async_ctrls) { ctrl->handle->pending_async_ctrls--; + uvc_pm_put(handle->chain->dev); + } } =20 ctrl->handle =3D new_handle; handle->pending_async_ctrls++; + uvc_pm_get(handle->chain->dev); return; } =20 @@ -1611,6 +1614,7 @@ static void uvc_ctrl_set_handle(struct uvc_fh *handle= , struct uvc_control *ctrl, if (WARN_ON(!handle->pending_async_ctrls)) return; handle->pending_async_ctrls--; + uvc_pm_put(handle->chain->dev); } =20 void uvc_ctrl_status_event(struct uvc_video_chain *chain, @@ -2815,6 +2819,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) { struct uvc_entity *entity; + int i; =20 guard(mutex)(&handle->chain->ctrl_mutex); =20 @@ -2829,7 +2834,11 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) } } =20 - WARN_ON(handle->pending_async_ctrls); + if (!WARN_ON(handle->pending_async_ctrls)) + return; + + for (i =3D 0; i < handle->pending_async_ctrls; i++) + uvc_pm_put(handle->stream->dev); } =20 /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index de1e105f7263..1c9ac72be58a 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -691,6 +691,9 @@ static int uvc_v4l2_release(struct file *file) if (uvc_has_privileges(handle)) uvc_queue_release(&stream->queue); =20 + if (handle->is_streaming) + uvc_pm_put(stream->dev); + /* Release the file handle. */ uvc_dismiss_privileges(handle); v4l2_fh_del(&handle->vfh); @@ -857,6 +860,7 @@ static int uvc_ioctl_streamon(struct file *file, void *= fh, return ret; =20 handle->is_streaming =3D true; + uvc_pm_get(stream->dev); =20 return 0; } @@ -873,7 +877,10 @@ static int uvc_ioctl_streamoff(struct file *file, void= *fh, guard(mutex)(&stream->mutex); =20 uvc_queue_streamoff(&stream->queue, type); - handle->is_streaming =3D false; + if (handle->is_streaming) { + handle->is_streaming =3D false; + uvc_pm_put(stream->dev); + } =20 return 0; } @@ -1410,6 +1417,8 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, void __user *up =3D compat_ptr(arg); long ret; =20 + guard(uvc_pm)(handle->stream->dev); + switch (cmd) { case UVCIOC_CTRL_MAP32: ret =3D uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1444,6 +1453,16 @@ static long uvc_v4l2_compat_ioctl32(struct file *fil= e, } #endif =20 +static long uvc_v4l2_video_ioctl2(struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct uvc_fh *handle =3D file->private_data; + + guard(uvc_pm)(handle->stream->dev); + + return video_ioctl2(file, cmd, arg); +} + static ssize_t uvc_v4l2_read(struct file *file, char __user *data, size_t count, loff_t *ppos) { @@ -1529,7 +1548,7 @@ const struct v4l2_file_operations uvc_fops =3D { .owner =3D THIS_MODULE, .open =3D uvc_v4l2_open, .release =3D uvc_v4l2_release, - .unlocked_ioctl =3D video_ioctl2, + .unlocked_ioctl =3D uvc_v4l2_video_ioctl2, #ifdef CONFIG_COMPAT .compat_ioctl32 =3D uvc_v4l2_compat_ioctl32, #endif diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index fbe3649c7cd6..eb8e374fa4c5 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -766,6 +766,7 @@ void uvc_status_put(struct uvc_device *dev); /* PM */ int uvc_pm_get(struct uvc_device *dev); void uvc_pm_put(struct uvc_device *dev); +DEFINE_GUARD(uvc_pm, struct uvc_device *, uvc_pm_get(_T), uvc_pm_put(_T)) =20 /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; --=20 2.48.1.658.g4767266eb4-goog From nobody Fri Dec 19 03:45:32 2025 Received: from mail-qk1-f176.google.com (mail-qk1-f176.google.com [209.85.222.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 823292288D2 for ; Wed, 26 Feb 2025 14:23:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579817; cv=none; b=CjQNX16w9C25pNU7mLMDjR+B0aHb+3dqu4R3q5trFho3cjQYYK1ek9GZnqVvKmzZ4rwg+SzXXNgbEOfdfWW2mq3lwnkPFyS0u59XYr8cFL8eul4Udpb6MsdJBw4dUwwlg1i5Nt6hbmxdTrI9I8v8T4dzmk8zIWxbx6X2N7hKtBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579817; c=relaxed/simple; bh=dw2qCpBVW0oF8+tSPBXZ2JZkiHmFw0P6jwMv0gbw+7c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Dgtc5T3+nAWH0nOutB5wHT/wrWkAJDQ7MzpMs0drqOPREpNvHuI+dNOgkC2EIzUnIbtJPQrxB+hrAt6l3NSWLtaMIg0TsPDzT/g44msVilS6a9gDk6TjRTdO0LMTkv5huqElcXGhPD1j1nvPXwp4GeX53bV421OqpXow6Zcn1pE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=fmhPMZj/; arc=none smtp.client-ip=209.85.222.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="fmhPMZj/" Received: by mail-qk1-f176.google.com with SMTP id af79cd13be357-7c0a4b030f2so884055485a.0 for ; Wed, 26 Feb 2025 06:23:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740579814; x=1741184614; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KYDs65iHnr/HrHNwFIq/xPxUuGa4QvYVvNxcsi3oCLs=; b=fmhPMZj/4voxDZ3TwZxuqRET5S+aTihXU8U326TydySd5BkZSu1Eu4sHVmBKNJ0uGy ZOTXD5LODMdyrDSBl1zpknffXr1qmdZ3CffcZi1bW35zv5LUGW4tnLSehYrSsw3epCAM oK2yjxf/FkAW6Ey6P08x9MMb09em6QKt1urls= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740579814; x=1741184614; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KYDs65iHnr/HrHNwFIq/xPxUuGa4QvYVvNxcsi3oCLs=; b=mo4A+kYB5lWRtZjvdYwmPSUCUT2KaOX9CZuWalBeJxz28XwRbKDYggj54v8KZoKpst jAYaGvLqmZ/zRi3/yEnNA2mi2T7sopkt1F/jGFrlyFTVyv/3tUQL0eOsm3vAFqDTjOcq oA3glrEVVO18Dr8YbcIw4+HXvr9Ezmt1++4sJ2Aj7hRO2P4/vlrCpSqErJ4YUGFsoKcF c2zVn63zBHmEn8q1yu9i17rTcbV1ShD2tGF4CMIHnadFCwQSrFQr9jqYtEzNQqhGHQJ2 HbDSA/vBUhnaWs+6dhlhDkjYyRoPPJv4Qv7/j22UlPXF4000V0Mf/J1bWMgyrulqHTeI La2Q== X-Forwarded-Encrypted: i=1; AJvYcCWGZDXNzvuoGHDgxHd7/QvfWFcObuXZ1jLPmKa8vXX6t/0MNvjhSIbgOdEw1N+r4SCQqe7vPtSZmVkxUIE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1z6nj0PtJYjrHNOFP9WIdHO6b+G1lGRCk5m8aueukmuckrl2Q CcdntIpn6zG+iCJgzQymNaV2Efar3+iwdDXLAE1mlk6I+7VX0agMPOIiWAhyXA== X-Gm-Gg: ASbGncvb4vXmhrKRz+UrDLJv9o7evQSDy9EasMJkwwc0/LMdVx2hmPbUyATJhl+oSgn tYTPoOvulOkEyQAsqIWIfJxra9EnXlcTY4mSf4btBFn9tGaWx/+JTg97IXrD74ME/i661BkDf8d EHgA3nKHdJ58SLx3Csmub0rKEZY3k+dUNnJ/EyuQ1LnNmlN8YYHKFL0s4MQwaZ8TUr5amT519tZ Wk0NA9LDQvYn4hs60+emhSPHEQVJOlpBo7wl40KeN3kuvwmJbAbzBaGSx6KpfU2OnUwqU/OBkhy K4NqL0THgfTYntynoPwH3Lgz7lK4o7oKh4gBRXyeSPixUnlOcdySzQYsVFgt+TePr6p63xVSmm0 Ek5A= X-Google-Smtp-Source: AGHT+IHuBFTmRowGPXy5shP9GSkIqBZ6nfFU0exVZOHDnxwl24falNaz1yGkMFwRvKIgYhyKtaXQxA== X-Received: by 2002:a05:620a:2a0f:b0:7c0:b76a:51d5 with SMTP id af79cd13be357-7c0cf7d816bmr2776159885a.0.1740579814399; Wed, 26 Feb 2025 06:23:34 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7c23c33cfb0sm246336085a.103.2025.02.26.06.23.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 06:23:33 -0800 (PST) From: Ricardo Ribalda Date: Wed, 26 Feb 2025 14:23:30 +0000 Subject: [PATCH v4 4/5] media: uvcvideo: Make power management granular Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250226-uvc-granpower-ng-v4-4-3ec9be906048@chromium.org> References: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> In-Reply-To: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 Now that every ioctl takes care of their power management we can remove the "global" power management. Despite its size, this is a relatively big change. We hope that there are no size effects of it. If there are some specific devices that miss-behave, we can add a small quirk for them. This patch introduces a behavioral change for the uvc "trigger" button. It will not work unless the camera is streaming. We consider that this the most common (if not the only) usecase and therefore we do not consider it a regression. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_v4l2.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 1c9ac72be58a..6af93e00b304 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -652,7 +652,6 @@ static int uvc_v4l2_open(struct file *file) { struct uvc_streaming *stream; struct uvc_fh *handle; - int ret =3D 0; =20 stream =3D video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); @@ -662,12 +661,6 @@ static int uvc_v4l2_open(struct file *file) if (!handle) return -ENOMEM; =20 - ret =3D uvc_pm_get(stream->dev); - if (ret) { - kfree(handle); - return ret; - } - v4l2_fh_init(&handle->vfh, &stream->vdev); v4l2_fh_add(&handle->vfh); handle->chain =3D stream->chain; @@ -701,7 +694,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data =3D NULL; =20 - uvc_pm_put(stream->dev); return 0; } =20 --=20 2.48.1.658.g4767266eb4-goog From nobody Fri Dec 19 03:45:32 2025 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC0EF229B30 for ; Wed, 26 Feb 2025 14:23:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579818; cv=none; b=D44L9UNy0dg7AsU0iXPJEIaQI7zUBCshTybPBsuVqWkrlxkS5PTMf19X/SHRTCnH3+GRhY8Pagiya7WmZ6/pKk6NoTm5z6ZjnXRvVcf3Lr+OewcyCN37Vdik6zlv1hVOMFmx/bn6F1jh3NOBqvsrI82tmCyRzXxmDcTKqH4UsKY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579818; c=relaxed/simple; bh=R9QrElg18QTPPLjHryDyJoCPAU+VfX0dGP/jT9Hqae0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OEyT2kW9zBqmiH1+vi+4JtOKQhLGH4SSjg8IZaR8Wg62Wz6zCGJfF9gzlEo/qWjRYU2fSk5ErFXfGB5bFAB+wkJOTIWehP4BFm9igqtLQ6rNKU4C1zj7piX1sj7jfjRmXVAS4wNgeZQawsMA9Rja7CxUf89hyYCowFFrRFxf9tY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=V3KwENbW; arc=none smtp.client-ip=209.85.222.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="V3KwENbW" Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-7c0b0ca6742so736223885a.0 for ; Wed, 26 Feb 2025 06:23:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740579816; x=1741184616; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9KEERa7N5D4CRNojIsTNdFIgtRBSnpqe9YJ9niy4368=; b=V3KwENbW4YPlMU9AqXfYm4P+ohsG9TPxKs7iobxygQiqcGWIFDclViut12mcBcLozV LqV64WuN4lu+7V0HB6yXPpL+0C50zLwMZnudWvKNrK2SeFNv7oluEmMkaragGqXhLTkZ KAUiGuWqeQA6EqvOYNC2lBK1PJ7YjULlpMVzY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740579816; x=1741184616; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9KEERa7N5D4CRNojIsTNdFIgtRBSnpqe9YJ9niy4368=; b=pn3E48H0t7kpRHugnoCRg0aWj2hLnh72QrMsNSKSmiUJeib++1TV0Oc6q+WL4lP3Qz TRFuqW3F9Q+bj7/RkRwKz0x2KvmF8N7AO/zwAWkUhUkdK/+JVBT/GPna149OHfYZ9X2P bTXaSyBf79lOQ3X8Bo0pLfrUtJz9OOH4WH6NbTMAKL6C06qV/EehgpUhx6JQB+k9bclB dgvUH7ecvv0MMv79nLBVmKWLMTIj4bVkcQ+HsnGfRZ/WifCxQYTlCcdU5slgIQdJZ+fp cz3FUxyYhumTAwNcvJaFBX2D2fiP7hoZB7I5jSVyLVFc1lPvys6AJoFfjA1aIbok8536 MXmA== X-Forwarded-Encrypted: i=1; AJvYcCXzln67hll54S+rGNzRBcY1Iv4SgJn8Ajl5xLmnlUDTRkpiZrfRGMMjw/M40oviJkd0sKrbpEe9wZKS438=@vger.kernel.org X-Gm-Message-State: AOJu0Yzw0XJu0Aam3gciZhyuvWPdFZ5pLts/whSWYoHGpfnyERBHJEaJ iPvRtWsO6pcI0Ib8jIJ5IxPNmfZIpMD4y+jNTY+qjSbmhIillFIcswtPz6ilLA== X-Gm-Gg: ASbGncuzHQKl5eSi0Lfcpntp7uTD4860HPjxmkYmCcV2RPEP9Oh2lztMwVFIWek4aVb 2r1n/X1KiItp7Ku8pTrEnae16QXSHgFkv3YW+Z7y2UJvFslV/cKueiYOa8OHZxhtwB6q087TTHn P3dzJJLbLmJBsr8LdBwCzXcwqwyxmQulT6Cg14XiB6s9uEF6OllJd8n1exVdZ3sMJ8gy2i+bKhn /scRpfoIAerBzjetF4aRQ4RLgLGqUvYgpAECRDq1P91UNmShxrG8cEKiagL8ucaMkbCRgRDygVO NpvBbp8OoMUhoteRN6hmNGEMv4s7wiW6MQzVrJTy5DKiL/0A4wd0qJ1OFQZXgydyCwrgUG84PZQ RhBc= X-Google-Smtp-Source: AGHT+IFYWattDD81UWH54aS/cRKfe95cQMADw1AlcxpsVhbtQXOtLPwSz7HYmPnEqiQEI4Klm2FKVg== X-Received: by 2002:a05:620a:19a8:b0:7c0:874f:c87 with SMTP id af79cd13be357-7c247fcb77cmr516463985a.35.1740579815835; Wed, 26 Feb 2025 06:23:35 -0800 (PST) Received: from denia.c.googlers.com (15.237.245.35.bc.googleusercontent.com. [35.245.237.15]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7c23c33cfb0sm246336085a.103.2025.02.26.06.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 06:23:35 -0800 (PST) From: Ricardo Ribalda Date: Wed, 26 Feb 2025 14:23:31 +0000 Subject: [PATCH v4 5/5] media: uvcvideo: Do not turn on the camera for some ioctls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250226-uvc-granpower-ng-v4-5-3ec9be906048@chromium.org> References: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> In-Reply-To: <20250226-uvc-granpower-ng-v4-0-3ec9be906048@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Guennadi Liakhovetski Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Ricardo Ribalda X-Mailer: b4 0.14.1 There are some ioctls that do not need to turn on the camera. Do not call uvc_pm_get in those cases. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_v4l2.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v= 4l2.c index 6af93e00b304..de8d26164996 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c @@ -1450,6 +1450,26 @@ static long uvc_v4l2_video_ioctl2(struct file *file, { struct uvc_fh *handle =3D file->private_data; =20 + /* The following IOCTLs do not need to turn on the camera. */ + switch (cmd) { + case VIDIOC_CREATE_BUFS: + case VIDIOC_DQBUF: + case VIDIOC_ENUM_FMT: + case VIDIOC_ENUM_FRAMEINTERVALS: + case VIDIOC_ENUM_FRAMESIZES: + case VIDIOC_ENUMINPUT: + case VIDIOC_EXPBUF: + case VIDIOC_G_FMT: + case VIDIOC_G_PARM: + case VIDIOC_G_SELECTION: + case VIDIOC_QBUF: + case VIDIOC_QUERYCAP: + case VIDIOC_REQBUFS: + case VIDIOC_SUBSCRIBE_EVENT: + case VIDIOC_UNSUBSCRIBE_EVENT: + return video_ioctl2(file, cmd, arg); + } + guard(uvc_pm)(handle->stream->dev); =20 return video_ioctl2(file, cmd, arg); --=20 2.48.1.658.g4767266eb4-goog