From patchwork Wed Feb 26 14:23:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 868794 Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) (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 DC9AD22173F for ; Wed, 26 Feb 2025 14:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579814; cv=none; b=W/kKvXA4+vK9SUy0gtB7ZDM4Cw76qj4b//WpvSVGrWrWYqA0ZyGdl2qA+4ISRV/eJ/TQ3Mufb9ADVYKsfMj6+gmSt87gbdFdrgbHOB9JYXMlEFoI+AMBCj3WBLxkH3b8uqo74+tHOwH0OrSvJ+wuJJQWHpLWCENl4age4XHXYHc= 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.175 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-f175.google.com with SMTP id af79cd13be357-7c0a4b030f2so884049185a.0 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=neE0dg/XkwkxAlE8O7vqlaBO8IFPmwtx8xo0+CM/W5pY4GskwNvpLZYDD74ouM4McL z2yPtjXEJF59cgQHBQSDbUHkoeZndS08wYWodnf//M3raYS7aoACgYLWnnlnt+I+/CPU RZfbaS+KUxrZ2BnHBLoIXS3MMwReSvNR23GE9G0aZkUtJmwLN+DNoUubXtYddlwJe1vm sb1xz7EbwpvKsLB2OphRYTGzfl0gc7ZepFhH0Ec8r0VJKlqfagpygipTr7lO2GHBxKZF VLA8GrbWIHIBVX83oG9RgBbrKT1YsJv2hbCvSi8Uy3BKfdZkdB+vs173y19iZznaG9mz 1t2Q== X-Gm-Message-State: AOJu0Yx/ZRrwEQICeDuiBiBq/hh/VxjBecf+k+wW+pus5YPLkLPQdBLM aSh/1V1wa4tY5629rYkDrq1Ytob1HOEDl7yKEmrh/cEn1rhJFhq1Qd/Q3u6vz6lZEF4qFe9gXAs = X-Gm-Gg: ASbGnctBBDor/iZNp3IbCtiRtkwUQlDGx8Ju3Co++qBn37lPPiTkcCV4LZThoQ/Vwy/ Ql77DA9+Pi7YiatOJf5s6x4b9LDGiI2s0mBoyTI2QsnwFQ/ZFhoWRLKYX8kjBW4EkusVcNx/KBu QGK9ADnogLwlliu/OBrZf1807AKYkXv11biPqveyiTmlmVFZ2SoEi+eMai+PUn9NBj025AkWsE9 jUlulKU7TMEL2wG7neUv5g+qEO1SRmiO4ghIUKlUbKD0clzuBeiVbpIW9nprS4vMOpjo0791W2H rjOf/VjukdFM8FP2Khjd38IfElvphtcsNqzqIyyhvQG5sOkGH5F9ew3CuuD6BP+m/eeUQysymmX kNyI= 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 --- 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 Wed Feb 26 14:23:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Ribalda X-Patchwork-Id: 868793 Received: from mail-qk1-f179.google.com (mail-qk1-f179.google.com [209.85.222.179]) (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 7746E2288C0 for ; Wed, 26 Feb 2025 14:23:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740579817; cv=none; b=HzapJSjAI/oMqOpW95rbhgXvTFR+qZ5T66l8iQ9a828x8W1M36gQbbW7+zbUhXa4deDTA+kPbkhRXb8K+sfUR7NNGdkWDz/0NNEKosfnSX/e5zGfvgGRjP+iIdZcFqwIftf5TTiedAzYAgi+I7LFGwwDLTGo9k9IZq1egQieMxM= 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.179 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-f179.google.com with SMTP id af79cd13be357-7c0818add57so692148885a.3 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=Uqv/Htwvdf1OsWS/SsTdMH8X+DwRWD5mkY7ALLGPcbmScYn24cfnyHS5wASeBsUsvm iaDdJKPejuu/XE7wo/zEYc0TFeT3sxkKbBnzUFzS3H1GaDoBWOeGXlGACO1nWQLowjWD X0VINudC8xjUBBLi4YlKikiAJ/U6cLUha9v9SGMCU1mbMGhSXxMNd3CJ3u35sI3oqHrJ zj7MQqJYUH/b+TBw0jpdEBrBQgSEA5dy3KNUK4Xrvatg0fqyLMpcIl6ouXSNcYlxp3ZB AumZ+Hp6s1uT071uPT1oUi+KblUD+ii779ifiZM6BfMBgouT6Vrhk1RFEODYBZnZVftq luJQ== X-Gm-Message-State: AOJu0YwbivBkIbggpAUinpaRJz5Xf2A0r/O0zq3La8RPYeXW257RqeSU v5OKxfW793vSSWBfN+ALW99indFHiTnHdIXUNDns1775KTHI4gTbdN8bbCcr1SR00eXlN6RKFSY = X-Gm-Gg: ASbGnctXVicP/PEaokCnJHTtBrNjKv/9xHJHYlDB/r5v90xDXlesKWJAzQwNQE3zheE STNXcQcl3TA6RtPba4ks2OkO6KG6AhM+7oCfxypwI3H+zE9J2vTH8jqggvBclOki484ODKOIvKi TqCCvFF8qErr7A+ESEHniZfga27ObZEc5GSoyMA8AdQ3fIXnuPTDCzkzwGAFDsrbDLKmGvCg8/F gXKhGKZ+DaKsVeTpPP8bHYabj8D04F4d14xfGDDXDe2teH+UH15jiwkLiuN9rs0ntv1s2sRjeTT nv2FdlsoV4pf6MPbsgxVxI0vZZF27no0J126yixtIXOSq1ae2BPOOv4ABGG6K0lLwLAMFbndoZW GOM0= 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-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 --- 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; }