From patchwork Mon Mar 3 19:13:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 870000 Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) (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 25EFC230BC2 for ; Mon, 3 Mar 2025 19:13:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029225; cv=none; b=hPuGiAldtzzCWrveUQ512A0qvY5dWV/S3ilt9R0Ua0Rn+0Yjt/MeV8BZ9l3+Suorao75MbfmB5Tpk4C9wWcpOtPdl5scJ1K53nHwDPr7jqPgK7BcP1mkbVjoaODy4YpKQA+drLaQ/2hsBXFieICGkD9lYyo4xxlLUZHq/krOVt0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029225; c=relaxed/simple; bh=qj9XlT1WiKm4AO6hkKE1By7lypenS+uznQVD6sIZ6Fw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QFz42dJboNMBZPg+Jsig21HIpi1UAysBljNYZAYdy6KohNmVm1WuhiMYsTs3VGxnQPaAqgVM07ZgHyOx93kr/zd/rANv1S2NFgxNWM6xx0no9p75+WojeQsHgH+xnHUecEEIwFJ0QYjguMBZSbdiVL00fRSj2oHFosEGr2uismk= 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=UKGaCHCI; arc=none smtp.client-ip=209.85.160.169 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="UKGaCHCI" Received: by mail-qt1-f169.google.com with SMTP id d75a77b69052e-471fabc5bf5so22318201cf.3 for ; Mon, 03 Mar 2025 11:13:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029223; x=1741634023; 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=6MnG0EicLIQ9fYl+R5jdVwfngFFSuuPxJwnjFoj+2kg=; b=UKGaCHCIxdhRTo+gWPJCqO+HG1UY50P+q/gh8jSpXK0yWzP1589Kch8BP3uPUMq391 h9OcKARkjtjRKTqfUI5QQuaKQAZx/odHhz05HtNuAx/Z5USHIyMzJ48Ti2y5QPCix+qc zxngfCf19ednZZCf/SHkA89rQRHzy1mw5C5/k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029223; x=1741634023; 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=6MnG0EicLIQ9fYl+R5jdVwfngFFSuuPxJwnjFoj+2kg=; b=MfOlACEejtJJa65k9HW2NwUT81lqUgDVbY5W6+D9Fiylj5WscZGsjWh8ozRhCpXvF0 rU4IYP1tRK2HUrkBoQWFWcIyZQZ971W/71qmgUP0SayGBACsNd/+ZjFJfhTPfg9lQ7k8 42N0v0kR+0e2Lsvu03+O+1+bhSWEHgEsE/h7EcghtJskpQ9/YWktN+vvclVlCrKM+dgl EifAwUT+3js6oAM5Ld0zF46QiX8A/b8sb6acb96SaPClMn5Dj9cV31/It7Jcr/xYXeJu T/r+qIH5Pv6XXmTZhVKAdhIsRwuO+Vnd3nnBrTiPrZLlgiO8haKL1fDCjq5KzEAUR0k8 iDFA== X-Gm-Message-State: AOJu0YzOzRGfD8U2rETTVGUD4NjcQU3qWmm0hv153p+eXl0ucL9iqsE1 kj7luDqRryZvX1i6Dul6RY6k1Fhh2bHhliNvbipT04hPmqm9f8L8Qb3CmBy5UA== X-Gm-Gg: ASbGncvF6LIPDD0WTRJG7eRmmAT0qLvrMViHOglqNubcpk2YaFPE5M4Kcnpwaq2omlq co8QYXMpzEYY00dTGiRUu6IKIiAM14VuSfAJhsUT0IUl+5hupstmA8DLmVEaH3Z8BCT0H9aHBE5 KCs2ZmEqbZ83HyHf1u5UFiaW1S3xZtScLGwx+d5CD1/W6iZDhIDGq74RbBSrvU3KkUugrb1Jxu7 GPYKEwEBmGmcn6eTymTimo3LXdiNijUZpScGnSKjcDg8QukXspWP0A9E7jGUBhv9UzhBEmVHOac JtvGpM69FcvaHc2JhGD28+srli1wjsVljQqqxD6aqcWVGxnbAvvLnwoloHPT1g4wcBCISvLPFy1 dwXkNC2ix1L0RzkZ87Z9UJQ== X-Google-Smtp-Source: AGHT+IEQGZ29VcDcFbL/MqUTzdoYNbg1Fi5VRhzqMJ4olgsaszoAZ6iyTyqbDbVixb0BJPPsVpFm0A== X-Received: by 2002:ac8:5a95:0:b0:472:28d:62b0 with SMTP id d75a77b69052e-474bc0f4bcdmr250554011cf.41.1741029223076; Mon, 03 Mar 2025 11:13:43 -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 d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:42 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:38 +0000 Subject: [PATCH v5 1/5] media: uvcvideo: Keep streaming state in the file handle Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250303-uvc-granpower-ng-v5-1-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@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 Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- 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_v4l2.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; - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + + if (handle->is_streaming) + return 0; + ret = uvc_queue_streamon(&stream->queue, type); - mutex_unlock(&stream->mutex); + if (ret) + return ret; - return ret; + handle->is_streaming = true; + + return 0; } 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; - mutex_lock(&stream->mutex); + guard(mutex)(&stream->mutex); + uvc_queue_streamoff(&stream->queue, type); - mutex_unlock(&stream->mutex); + handle->is_streaming = false; return 0; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.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; }; struct uvc_driver { From patchwork Mon Mar 3 19:13:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 870317 Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) (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 67B72233D72 for ; Mon, 3 Mar 2025 19:13:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029227; cv=none; b=pRyj2scZRMfLKM/R/B4Br+hZ0TGLW38Vyp5LHI1bXwdYDfA7guaduigkH9WdJjve8wDa0rnLKelV+GEYF/DDPvVrYR2M5ONRfjJ9XtNmuT5pHxmaP0xj9mXAtkEd0peZ93oZX6pbTvOe9MsZlYk/KaYdWrbIiUikvk2SyAHKY8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029227; c=relaxed/simple; bh=oZxC6dyJCosOIF+mgQG382FfCTLvK7fHEuNpSTlA6/A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CVLOett3/gNaHm+VBS3vx+jbZqs2GeaqqDm/mWF8F/P5tT5JDhk7NhxBxgrvXMGu4g/4xz4O+NZJWvcrk4sn8+G5Czla00AZGfBjajWav/iIx66SB0QQnvKLG0o+TgnFMHQDLGY9gHCsQRhHgXs1R6ix6P73OGFf02F6bS6Ogqk= 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=EWTopqml; arc=none smtp.client-ip=209.85.219.44 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="EWTopqml" Received: by mail-qv1-f44.google.com with SMTP id 6a1803df08f44-6e8955479c9so41700916d6.3 for ; Mon, 03 Mar 2025 11:13:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029224; x=1741634024; 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=lRCIFV1ZgaG5znhFrv01vJjvvWfbVwJPIuxC5a3io7I=; b=EWTopqmlbY9FaKgfpik1ZkCDucRQHrO5KF4yyGERUbhLr3nYCTscIB7JoYL87jL95F 9SsGzrgsudO9rW4sqEXdWEkJ5ue+hUb+LB1+NhymPvBw8psYfyTXBBeKt0cEqWzsUJm8 3WB9GiXVEZXFT8rlK7LXH8kXOgKRpq4NaOPwI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029224; x=1741634024; 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=lRCIFV1ZgaG5znhFrv01vJjvvWfbVwJPIuxC5a3io7I=; b=tsMvVSsBuzq3YPWRU8+7yJFuW/0hd8swguCBJHStyDRgXZxk777v1Z5PJbT0cdd5G+ 55cnjYc+EvEaEttP2wCi00LsaemWHLkcs+qkALzyM4XK9mt0SnZGOSJ5NJ4DUS0kdnNr SLxI2M3WJknmE09avDIXVl9JVWo4EJfUO1+C4yY1trxgIXtY5a1VEO1WtU6eATmO6ME8 gsnvfisSgpLVt/6h92Q6fuPbOZWGLH77pfmuiyusyKkQQbepJY77TSGrDyE57pzFbHI8 oqyDSJlQUcIIeiIoNTMQ/yM2QySJS305Z1eBg+1T79uubClR10/JQqnkmJRWrsqTh9RS e99A== X-Gm-Message-State: AOJu0YzSRktkETACZz20tYo+R9s7CdlLu8qwwvwJrUXdXfHQ8ILQOlax qBBr6JWKB/vqXgxKF1rBXxMxieV9WADBjjRJkDPmzu+Y8AygggjZMP9zbgBSVQ== X-Gm-Gg: ASbGnctlnXpH6rqlEUrtHRlZ0E07OzL08VRylu5bpdrrWuMm/r7i86HybjctQti+SO5 cXcO5X0kIHnio8pKd8C4qj4viWYIpIDBXEZBVaxlFqoCX/BMeV+6rCbmcive25mUZQGI7V7Yd+d xaph0buFmQlKsQbgLoDOCtmECPxbzYoTmZLt3yj9HVxJhggnR5gLG8azEV5Cjy2jsxW451cWWVB RBIlHIPKlE1A42t/hq3jOhVD9VIfG6De3LTXaEpbOkofHiaJbf1hXxolcf8mIy7YW8c0fT3kYyD R4W8Ulii3Qwlr0FufPJ15A9EuJsqHxqdTI9ZEekgQ1HftQcwBdHT47o/XhPIzN2X4Trwmd7zmls GBxQhCIC90Rxz3dPK6l24Dw== X-Google-Smtp-Source: AGHT+IGgAMhBvpb4nsGeXahyeU7QvHudr2zB0sMWGj7GvAH27b8oGyIO1P2rU2HrJVT6CCDwg9nu2g== X-Received: by 2002:a05:6214:1c0c:b0:6e8:96aa:6034 with SMTP id 6a1803df08f44-6e8a0c888d7mr226692286d6.3.1741029224267; Mon, 03 Mar 2025 11:13:44 -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 d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:43 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:39 +0000 Subject: [PATCH v5 2/5] media: uvcvideo: Create uvc_pm_(get|put) functions Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250303-uvc-granpower-ng-v5-2-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@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. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- 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_v4l2.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 @@ #include "uvcvideo.h" +int uvc_pm_get(struct uvc_device *dev) +{ + int ret; + + ret = usb_autopm_get_interface(dev->intf); + if (ret) + return ret; + + ret = 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); 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 = video_drvdata(file); uvc_dbg(stream->dev, CALLS, "%s\n", __func__); - ret = usb_autopm_get_interface(stream->dev->intf); - if (ret < 0) - return ret; - /* Create the device handle. */ handle = kzalloc(sizeof(*handle), GFP_KERNEL); - if (handle == NULL) { - usb_autopm_put_interface(stream->dev->intf); + if (!handle) return -ENOMEM; - } - ret = uvc_status_get(stream->dev); + ret = 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 = NULL; - uvc_status_put(stream->dev); - - usb_autopm_put_interface(stream->dev->intf); + uvc_pm_put(stream->dev); return 0; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.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); +/* 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; From patchwork Mon Mar 3 19:13:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 869999 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) (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 C65A8235345 for ; Mon, 3 Mar 2025 19:13:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029228; cv=none; b=VTAwTyVqG3m7vQTS1BdIU5Dq+oGpyZkcn2qF5PnsJJhKnvjX4kHguV4KnZn5wfUAXmWcXefPLpQHwovX7nQcQ6u2AlhwMFxqq2KKVhfsVMuiRUuwJvp2DbkHefQyyaapKDHvsKcE1vxbHaTn7miOSBME8QGhDCTJGznal8NWP7Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029228; c=relaxed/simple; bh=PPWla/2kebrucLkJRseQ3ggOogZO4AGyTq5pphOr1VE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XjR8owa9+mhoZKqFaFz3vZ4uGApKhrPIju7dvPGH2d9tnCMvfnRfO0Uw3d4na3Esr4oIr1eCVDQjUbWUW2sSBUWcPyO3vxpvBwdlpgrKjYj54XDHwY9eftJMWpXPUmqOaKndnVVKAIKKh9keGwXFZ1mv7hFkc0BdfnQu13O4aYY= 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=blSqxnsD; arc=none smtp.client-ip=209.85.160.178 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="blSqxnsD" Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-474f15a2087so5024361cf.1 for ; Mon, 03 Mar 2025 11:13:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029226; x=1741634026; 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=o7P1QXq27JNB3kApamJPl6/Zqox7TOiVvRdkffBjGTI=; b=blSqxnsDTBPoxPm+EF3xgFH/IMedaruRmlbUbKgvDT3VejAnIWA/FZ3cU0RQWBT7jf xHlQSvJGyOd1Os20s8/tnvSTidTConl0tqUGmtkXD8Fba/kU8Cp7pCxZGpxZ6KuGiD4F tuAjAo/c4AmDkCqMk3txQuDAWd9D+tPjboirA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029226; x=1741634026; 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=o7P1QXq27JNB3kApamJPl6/Zqox7TOiVvRdkffBjGTI=; b=eTYS3PcNzCYNZNOXU+w2UkYsEJYHJDeCv8KTScD2u5krkWPSoSO8YVhVEGcPabc6k8 LDx0/c/4Bqz5DUfVGQ77VvDfPXL6zV+Xb40b1owppAYS2k3C4kh3dRFVrSgHQczxrfYc wPllxcBKA5tw7jPgNZ3hj4Rx6HPPnMsbee9PMzTv0Uon8sc8V6TX5+hVn6Rdk6uueyMa S7lsnmJnDIM9IPj4Qm1Asjie+73d0k9aJR+4h37k0HQ3F6JtAqez30Zh8tKUens6mnQu b3rEJM+/qcxBaslx/oeYjzM7XXGmPrzBQEwgN4yRBNjRCz4zn7KWHpc18atMhAspB7JK DBIw== X-Gm-Message-State: AOJu0YzAsoCpB3g3Rv/jFEPdJkkGKUGvl9V9IzzE5B1EHAkC+MjZsnUC lUxax7SnytNkw7T+n8oJ4MR7D0NgxX5Oy/ygUpOL+L074MoHqby5sct8veXxyg== X-Gm-Gg: ASbGncu+MdMtJgdP1Uz6JeQcEOM+pzBVqG4ElQR6syy4ZUYkWidely7VakyC2K4C/HB jnFQNWXDLRqA96OuZtMOek7OLGfZmShycIw0ZoaVxmERJRMPYRhNGZt1kVYwrkEH+5n3z56DPGP dad4HF2LZf6TQ7WA14JH8861gXd3FDREIr8BziZ6z+cCwPsMQG0mHx3vz2uY24hyXDZrgE21ehB lOzsa0ZcVYiBIM4QOOmx/OtTHt9QNYefMlfl7cKG0HloE2pYoOJssAcVS9Eu5JZzSwx8PVn9ezj xpEInel7fjxLU641ZczzLZvkoTpbA13WhUpNZMOMJi/ckQnQbpYJvbPhfxjWdDINDCzYzQkcFjR YSGUa4bP2dmjRUV5HJajX0w== X-Google-Smtp-Source: AGHT+IEpNw4RsO+LZoW3IoxCforKe9aJtgSY48ThTpTugK/BWGpZU9TY/rkkvX28MUKTMjrfrVMrTw== X-Received: by 2002:ac8:5852:0:b0:471:fee7:9610 with SMTP id d75a77b69052e-474bc080335mr164587941cf.12.1741029225763; Mon, 03 Mar 2025 11:13:45 -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 d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:45 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:40 +0000 Subject: [PATCH v5 3/5] media: uvcvideo: Increase/decrease the PM counter per IOCTL Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250303-uvc-granpower-ng-v5-3-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@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. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- 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_ctrl.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 *handle, struct uvc_control *ctrl, 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); + } } ctrl->handle = new_handle; handle->pending_async_ctrls++; + uvc_pm_get(handle->chain->dev); return; } @@ -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); } 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; guard(mutex)(&handle->chain->ctrl_mutex); @@ -2829,7 +2834,11 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) } } - WARN_ON(handle->pending_async_ctrls); + if (!WARN_ON(handle->pending_async_ctrls)) + return; + + for (i = 0; i < handle->pending_async_ctrls; i++) + uvc_pm_put(handle->stream->dev); } /* diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.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); + 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; handle->is_streaming = true; + uvc_pm_get(stream->dev); return 0; } @@ -873,7 +877,10 @@ static int uvc_ioctl_streamoff(struct file *file, void *fh, guard(mutex)(&stream->mutex); uvc_queue_streamoff(&stream->queue, type); - handle->is_streaming = false; + if (handle->is_streaming) { + handle->is_streaming = false; + uvc_pm_put(stream->dev); + } return 0; } @@ -1410,6 +1417,8 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, void __user *up = compat_ptr(arg); long ret; + guard(uvc_pm)(handle->stream->dev); + switch (cmd) { case UVCIOC_CTRL_MAP32: ret = uvc_v4l2_get_xu_mapping(&karg.xmap, up); @@ -1444,6 +1453,16 @@ static long uvc_v4l2_compat_ioctl32(struct file *file, } #endif +static long uvc_v4l2_video_ioctl2(struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct uvc_fh *handle = 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 = { .owner = THIS_MODULE, .open = uvc_v4l2_open, .release = uvc_v4l2_release, - .unlocked_ioctl = video_ioctl2, + .unlocked_ioctl = uvc_v4l2_video_ioctl2, #ifdef CONFIG_COMPAT .compat_ioctl32 = uvc_v4l2_compat_ioctl32, #endif diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.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)) /* Controls */ extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; From patchwork Mon Mar 3 19:13:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 870316 Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.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 5641923F296 for ; Mon, 3 Mar 2025 19:13:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029230; cv=none; b=KCmYrk3sE0zxaw7XFgBVdQao2mOnu16ttqLcWNFiCiDaLQ3jMrHJ0IRjyM5B7je/vYkNih6+13hE86+WMFBKyS4EX0EUe50NkTJB9/uLBa9OpcZhlwDrB3jNPi49FZSwmHNwXB312gklkYPtAxAYd8QaJ+r7KsJrSL/3dSILPBk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029230; c=relaxed/simple; bh=lPK79adRklZww3Mk0PpdCX4VtxZROHYG8wz1+NxPpgs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l474vsCThNkwdd+kEdbliVLtci0XSacdYkYxLPX/V+he0awGkNGg8u6CjLI77/3fp1gE/g7e39Vts/OGCDIQYt0zeYTaf+kwH+0tVsfVPx6QUO1u1Ir4sCL3Gf8i/zF8DXqnrAphqLRi/THtxivLUwtV27/t7h499zPkvs4G6Mo= 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=n7kUDY+4; arc=none smtp.client-ip=209.85.160.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="n7kUDY+4" Received: by mail-qt1-f177.google.com with SMTP id d75a77b69052e-471f7261f65so47223491cf.0 for ; Mon, 03 Mar 2025 11:13:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029227; x=1741634027; 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=Ikl6DD5slE5XP2vR++WylhZuHcrlQkez/ZWPWDZyaCY=; b=n7kUDY+4yxo4abB6YEk0kxuWQbtWzhcuZvJeRIQ0cHAIG1kiHz0pTEk9e2/bF3dGtA kDrSV2qa3Pe1F2Bn/X/Ss36s+g+1yfoBkIooZU23YFhNii/MJaU1oDoM9JIYMzFd1MXg BwyPHpCHs9ihnri1i0mucx7SZWxWlF63FgU1U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029227; x=1741634027; 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=Ikl6DD5slE5XP2vR++WylhZuHcrlQkez/ZWPWDZyaCY=; b=KJpUlBQr5DqJIVCgQgsJXQhN/WrLv6mHf7BNKuXHVptRqmDXc34fhOeLK/OhKJLn2U Kgr8ChJc8pqFiyGW5zGt8O0BGX4aW5yZrUFVAl0jUB/AVmhgU1gabWJ9x6wHvqsYnAKk a+nFxcRMV1N/gEM4JvO/48EJ9rMJSHB/rWhVk4oeexLzD9K+hmHOeQPv4EAmWGTrBW+o c5QyIsxZKBJz8+sc4Ot1Qjo/RvVVcLloTG59UNp9WDOlunqf6gNTIxB30jltxJGL7la8 J22WnV8UE4HIj0Mn6VryQTsg9Ochv+Vwqs8ZzJLZNPQ+5Yi+F+YJ4+xV41qMhXRnDJbH DyRA== X-Gm-Message-State: AOJu0YxxHcp74piTtmF44DFL0JBTd9RxJUNwOWftGPD9fRMHb7WMpbDK t5BkxQ4UWCF78S2aTadsqR+tdrZZhU3UJ7U9pfDpUGNN4RHTyYGo8ZfoJdDtPg== X-Gm-Gg: ASbGncs/SdIzmagyYiSA1iKXv1kKMCn7Q4BaXH6IgLm+IGE0nkxLnqSf8QBs5l+9vyE JoW/LLvDLUwXC1lcA9ibGuZuB3MslfpqShh/3cA2Qamr7JaSinyoXNf2fEYt/VwkZIQyH0BznQm XtCKUAotv1xSa7Ph9KJbBAFprfEPZKJZnNmajdQsFdaRqkX9E3rCX63snbXSArqtycSAVDv9Tbj GqgM8qhihmryvmV84Xq+RtQOfsBoHLEZtEcAxmq0/JSM2Heb+lQ+ilEA8IOJ/nYWVFfWe89+Ppk U7rSXjHTn8Ejd1s08hFhlhHYvTp2pFrY1swAfSEbmRbw/oyPHFATXDYDbvi/RpFkIDMHFJWIgI1 zL6LqwltLrbP8+68ROutAyg== X-Google-Smtp-Source: AGHT+IFHbTUMUMAOtYe4aIC70aHDkZKC+eDmzTxeiVMALjYKfsCeCsempFPzl8+QoqwoKasS5kDgvQ== X-Received: by 2002:ac8:5d8c:0:b0:474:fbb4:8f7c with SMTP id d75a77b69052e-474fbcc549bmr6415241cf.11.1741029227080; Mon, 03 Mar 2025 11:13:47 -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 d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:46 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:41 +0000 Subject: [PATCH v5 4/5] media: uvcvideo: Make power management granular Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250303-uvc-granpower-ng-v5-4-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@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. Before the "trigger" button would work as long as userspace has opened /dev/videoX. Now it only works when the camera is actually streaming. We consider that this the most common (if not the only) usecase and therefore we do not think of this as a regression. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- 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_v4l2.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 = 0; stream = 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; - ret = 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 = stream->chain; @@ -701,7 +694,6 @@ static int uvc_v4l2_release(struct file *file) kfree(handle); file->private_data = NULL; - uvc_pm_put(stream->dev); return 0; } From patchwork Mon Mar 3 19:13:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 869998 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) (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 075742356B7 for ; Mon, 3 Mar 2025 19:13:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029231; cv=none; b=M+BLLuHbxuqn5P/JMQIKirzMpwlECml0Fw2yVkGZpgzwtgNCgVYp6UObz6Yh25I5PfnoP/4A+xRP9xlqhXRijHStXsSO9Kmhn1EI9x8fLZd9W+gT67rNuZOhij4H8ooAqn3nuHx+zEWiSorojrxdk2BYt2DsGmJEVBF3hkD7MV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741029231; c=relaxed/simple; bh=HpW9eV+pa9FArjj97V5rJZ74WC3ZIrPxYtpcWzZb9cE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z0+YEIvytHoGvP8fKIc8pJuELdbYNT6I2BbHO3i+r+gcxdLdpYnPE2YQTRb2mYl4jrhQe6bfLUnOOOP/MZj9FyfYmaQdUKx8DBS/mThaV6dHoXSNietEC1DCuBAwrX8Z+oCkTsTwMeWmP8Svc4HKj/QWB5nSGGfyJWekGq2sxcU= 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=mMYFchE8; arc=none smtp.client-ip=209.85.160.178 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="mMYFchE8" Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-471f4909650so43731571cf.2 for ; Mon, 03 Mar 2025 11:13:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741029229; x=1741634029; 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=90N1gDxhZVWniJnCXj40uTmKdZp7+inJI9RZU73Ve9c=; b=mMYFchE8oRivk/EdkOgYNQW5ZQVaZe+9/F7vCDtPSCScQPUL4DY4ZXzpVk3g9p0nsz FdHlsxP1PHrchLPfqWVcAdLJ28+/gw2fEeJSmoiN2PH6/UHN/SwmcScMUurmy8pySk5i HYMkF2ZFBpIpWlqsD70ycMycpyVYtz5KR3DAI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741029229; x=1741634029; 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=90N1gDxhZVWniJnCXj40uTmKdZp7+inJI9RZU73Ve9c=; b=I2f1+cwviRuZuf6FuwZXSge07cmOrw4hjk0giABh2Wn6ANkx1DV0qVoj0m45TkyYre ctmknEyNEFe5RxMQHmxdqg3AyrtPCoLDDW5/JuDtRz51MfETW8JQhCo+k547JbqaAqWf 85Fgh+KO0pX2V30qfCv0Wn8HCtW72p5Jqaj/hIk6tdr8CsYmp7CiqfM2hz1WhqBbU++d ip/EP7JIDr5YzOQDPE37lCdE5st8Lb3BNlrottvveEo5zOI+n3zKTLY+5dau7x6BeXsf jCvTb05M8IvxDrZCYRUiLkBA915juOp8Vp2E8vQf/JhpkBnDPMlT4X1GFEqRPWVNDD+a 85xg== X-Gm-Message-State: AOJu0YwQb7wRRSWpVx5rHaJR4JFyaZC+7ce03MwxifnE46EHnXTCFqlq oCOXgWjso6O1KdZwJq42mjgHA0x2JqsP1V6oTUpqpsAEbH16EsinInnbN4LZtQ== X-Gm-Gg: ASbGncsTIzo+RaOIsBI6J8XiURsBpG4SdLijKQYzLOwIJVcxTakJjhdsKF0IAUvd+lF tbVDUajzCiVBY4eU5VQm5B81STYHXk0mfOQOFS5T4MApC8l6f++a6oestL/ADs1Q2ApfGP3YYl8 STLy7X7pDcZ0nLYFvwIqB7EbN2mGlBwLrsRoNSsl+LY7vk7z4Ue5hm5GVBYUqgkq7HqFjLGOjTV XSo1gDqMbSfjAocTKyGxP1nernoHtHt1jvCsReXT8zKRy5QPl0PKtdyqbAR874pqY69RbXC2+Xa v7TUAiddeByqZ9QJr27BbbOaED38iM5gB6cz3OTsLpfqD0hOMLZxmORtvrVpJKgc+8/TA8BfcQn akM4DeIFHgItZwNFvfQcUPg== X-Google-Smtp-Source: AGHT+IGnGCMPktiCa57p8eXL0WJuUBj1Dg8JEm5nxeKyFL9/82NaQ4hsJTD+GyZW0TE5wsRVB5/k0A== X-Received: by 2002:ac8:5754:0:b0:474:e756:fd14 with SMTP id d75a77b69052e-474e756fd8fmr65875571cf.42.1741029228978; Mon, 03 Mar 2025 11:13:48 -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 d75a77b69052e-474e0f1e0c1sm19745661cf.47.2025.03.03.11.13.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Mar 2025 11:13:48 -0800 (PST) From: Ricardo Ribalda Date: Mon, 03 Mar 2025 19:13:42 +0000 Subject: [PATCH v5 5/5] media: uvcvideo: Do not turn on the camera for some ioctls Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250303-uvc-granpower-ng-v5-5-a3dfbe29fe91@chromium.org> References: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@chromium.org> In-Reply-To: <20250303-uvc-granpower-ng-v5-0-a3dfbe29fe91@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. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- 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_v4l2.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 = file->private_data; + /* 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); return video_ioctl2(file, cmd, arg);