From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (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 A512F3D333C for ; Thu, 30 Jul 2026 08:39:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785400745; cv=none; b=FtFVVWearAvEVcNIOkOa6LLKUfedKghwg846I/plHphtQW7D/JLV+ftlgf51SG165UG94PtQ8WPnkOX8sQlRhLJhVSHGAfOv7pu2m7Rk6pcjE4yoId61o5siBxIqnjGASQiVrpWAvLEdVGZ1yL5GsM9Ow4sd+/10AJzIqvQp8+A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785400745; c=relaxed/simple; bh=bnoklQTVbTeNGwqtd87yLfBvVJfKM3Ux5RhP73hG3Dg=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=ZBIRsTOJ8HMdyYP8COIofAE8jZDITnHKjzvFaHFhlp0Iyv2Of2ggFLu2CthmbkL+fgVk6C//fYTouyPiJI3ZI3s+Y5W5XT66PxlQ/Nv3J+TpXC+2l2lUIrFzicxQysxrY/F645vh/0dQqkty//LK4jpCY0/zVfLVo4f2KDvTeF8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=x0CHts/7; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="x0CHts/7" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-c12614b81c9so334118666b.3 for ; Thu, 30 Jul 2026 01:39:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785400740; x=1786005540; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:content-language :from:references:cc:to:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to:content-type; bh=7FkYK6dd5edwcDAVNaFfBC6T7A7KyI3+YEgz2sgH0OM=; b=x0CHts/7Waqq+8s+MChmXEifypKYd+RlaKjKb9wnD9jfMg8aR0Tjz3RecFwF8YoTL8 8lmG0MZ2n/37XckqGFu300vJ6WfsEjA299wMeLOLxZdD5t5N1MlvwpN8CiCZYIPR2NPt zaoN6HqClQV8U3q125HhEQGTAPmQRGAw4OKj4Di9sq7R0fe+2LClafKAmY1n0a+TLfXa 7e1dtu3EKj2yxULXF7Lw97HEASt+zbMOf0gwif0ofmTS4o3bqU1b04aFXa83aOG2X9KN jTtD12DGKFt1Lyu/cyHFpE9PdNA7wVwwIb+vdWq8aHxSZDh4i0j2pu9k84qjWGKFb3Rt svZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785400740; x=1786005540; h=content-transfer-encoding:content-type:in-reply-to:content-language :from:references:cc:to:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7FkYK6dd5edwcDAVNaFfBC6T7A7KyI3+YEgz2sgH0OM=; b=ai6bdYaivOK1ykF2lHKSF7TWvvp9vto+ViQnNF+s2jq8jy2glnFPGOmH8U2yzWjYNc poFz4RP1uKzTy/oiCGigTnDZSxaUJchg9q48Gb6EdaqHcC2aHMBMFkGZ2VKd2CGg+YxK aRXZjaMHTU8SdxXqgRMjIQUxzVgg9oj5CBPURpR3pXnEt9cKKXX8SYrX2FVCRcBNyTWX Urg2yyifObHjGz0JsCrn4WP4NryxNJTkJbh0YfP52cK1Z625HUHRD5n7OzZ1CnbRG115 07Wbo0GbdJ9PJLOUhsdumBaePW74ePzqecgjio3J5YlZS0CkGwK1YMGJlp1Wc9mgXx9n d8MA== X-Forwarded-Encrypted: i=1; AHgh+RrAf8JywtFrgDJh91TjcNEz9GM5aAbGyJiooF8ZmSg4TsyGh/tJ0Ng1Z0zmcL5G9l3Ur5IP46nNAqiQTuw=@vger.kernel.org X-Gm-Message-State: AOJu0YznOQFTHV1f8KGmOJAALsjTBzDNblGINCSCxO2iHdM1ArmJsywv yJJPTvvjPxSC1pCbb5TUYIA5zT3LmlsPRstvpbsyExj6UzRez/I+j3n1xjDJYi9ELwE= X-Gm-Gg: AR+sD114YZzI5HyDNJ57GEmr0nvneIROXXt2MnadcHXO+GoKBgTrr9sq2KNaZVv/7Ge hQ/dBrathT3iCCrKgZm5OvZ6GShjT2+KGJYCIdQqy0pP1A6UatwrNwwKmc+PEkeXgfm+67JykGu okgTvtMXfkYxGd/o/Hgv/6HzVjaYe2ZYI09RqW9PTFL1VB+NSB2VC2FhQxlJa/dibJ5ijvsimf7 jwFEP2C+ARWdN6cbT9TBU/M+BWZJldyeLu43rrwnr3o1cwzRRocB2viOHsxpbXTd8kcT8ZS6k9M vCWeY0Zt6goQhkhjE+QEmlOpmTFSmtOA5a8uR8Kpyg6pjG6p8w4zs/sEI6CP+U5bduHRDtYJWI+ hKWn0Sh8NOE8eJYf1MEg3QZzUaw10bWF+c9uOZhv5G5g++kCLBdOQankqUFpxRJMUuGa2h24dV6 VTAdoF1Bge7ejTxpAns5cqsOhvrm/Qt/MNpQk088TMsZpcniOat1i+pzdkUPfLFjlJa/OZI3yv X-Received: by 2002:a17:907:d10:b0:c12:959a:1477 with SMTP id a640c23a62f3a-c1fa57076cemr85304566b.40.1785400739622; Thu, 30 Jul 2026 01:38:59 -0700 (PDT) Received: from [192.168.0.101] ([109.77.38.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a07c7682bfsm337996a12.1.2026.07.30.01.38.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 30 Jul 2026 01:38:59 -0700 (PDT) Message-ID: Date: Thu, 30 Jul 2026 09:38:58 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/4] media: qcom: camss: Add PM clock support and integrate with runtime PM To: Loic Poulain , Vladimir Zapolskiy , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260717-camss-version-v1-0-7ed71fea95e8@oss.qualcomm.com> <20260717-camss-version-v1-1-7ed71fea95e8@oss.qualcomm.com> From: Bryan O'Donoghue Content-Language: en-GB In-Reply-To: <20260717-camss-version-v1-1-7ed71fea95e8@oss.qualcomm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 17/07/2026 15:20, Loic Poulain wrote: > Add optional PM clock support to the CAMSS driver using the PM clock > framework. This allows CAMSS clocks to be registered once and > automatically managed during runtime suspend and resume. > > This is especially useful for global CAMSS clocks that are shared across > multiple CAMSS subblocks. > > This avoids the need for each subblock to reference and manage the > shared clocks individually. A typical example is the set of clocks in > the top_group, which may be used by CSID, PHY, CCI, and other CAMSS > blocks. > > Introduce a small PM clock descriptor table in the CAMSS resources > structure to describe clocks and their optional rates. Initialize > these clocks at probe time and delegate clock ownership to the PM > core. > > Hook PM clock handling into the runtime PM callbacks to ensure clocks > are properly suspended and resumed alongside power domains and ICC > paths. > > Signed-off-by: Loic Poulain > --- > drivers/media/platform/qcom/camss/camss.c | 40 ++++++++++++++++++++++++++++++- > drivers/media/platform/qcom/camss/camss.h | 1 + > 2 files changed, 40 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c > index 2123f6388e3d7eafe669efd6b033e22d8eb5cf79..6a2bf3373e8755805c8cd0f8fe5037b788d68fa2 100644 > --- a/drivers/media/platform/qcom/camss/camss.c > +++ b/drivers/media/platform/qcom/camss/camss.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -5346,6 +5347,35 @@ static void camss_genpd_cleanup(struct camss *camss) > dev_pm_domain_detach(camss->genpd, true); > } > > +/* > + * camss_init_pm_clks - register shared CAMSS clocks with the PM clock framework > + * > + * Clocks listed in res->pm_clks are shared across all CAMSS sub-devices (e.g. > + * top_ahb, axi). They are managed automatically by the PM framework. > + */ > +static int camss_init_pm_clks(struct camss *camss) > +{ > + struct device *dev = camss->dev; > + unsigned int i; > + int ret; > + > + if (!camss->res->pm_clks[0]) > + return 0; > + > + ret = devm_pm_clk_create(dev); > + if (ret) > + return ret; > + > + for (i = 0; i < CAMSS_RES_MAX && camss->res->pm_clks[i]; i++) { > + ret = pm_clk_add(dev, camss->res->pm_clks[i]); > + if (ret) > + dev_warn(dev, "failed to add pm_clk %s: %d\n", > + camss->res->pm_clks[i], ret); > + } > + > + return 0; > +} > + > /* > * camss_probe - Probe CAMSS platform device > * @pdev: Pointer to CAMSS platform device > @@ -5434,6 +5464,10 @@ static int camss_probe(struct platform_device *pdev) > > pm_runtime_enable(dev); > > + ret = camss_init_pm_clks(camss); > + if (ret) > + goto err_v4l2_device_unregister; > + > ret = camss_parse_ports(camss); > if (ret < 0) > goto err_v4l2_device_unregister; > @@ -5775,7 +5809,7 @@ static int __maybe_unused camss_runtime_suspend(struct device *dev) > return ret; > } > > - return 0; > + return pm_clk_suspend(dev); CC drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_dbgfs.o CC drivers/media/platform/mediatek/mdp3/mtk-mdp3-vpu.o AR drivers/staging/media/ipu7/built-in.a In file included from ./include/uapi/linux/posix_types.h:5, from ./include/uapi/linux/types.h:14, from ./include/linux/types.h:5, from ./include/linux/kasan-checks.h:5, from ./include/asm-generic/rwonce.h:26, from ./arch/x86/include/generated/asm/rwonce.h:1, from ./include/linux/compiler.h:369, from ./include/linux/err.h:5, from ./include/linux/clk.h:12, from drivers/media/platform/qcom/camss/camss.c:10: drivers/media/platform/qcom/camss/camss.c: In function ‘camss_runtime_suspend’: ./include/linux/stddef.h:8:14: error: called object is not a function or function pointer 8 | #define NULL ((void *)0) | ^ ./include/linux/pm_clock.h:77:25: note: in expansion of macro ‘NULL’ 77 | #define pm_clk_suspend NULL | ^~~~ drivers/media/platform/qcom/camss/camss.c:5841:16: note: in expansion of macro ‘pm_clk_suspend’ 5841 | return pm_clk_suspend(dev); | ^~~~~~~~~~~~~~ drivers/media/platform/qcom/camss/camss.c: In function ‘camss_runtime_resume’: ./include/linux/stddef.h:8:14: error: called object is not a function or function pointer 8 | #define NULL ((void *)0) | ^ ./include/linux/pm_clock.h:78:25: note: in expansion of macro ‘NULL’ 78 | #define pm_clk_resume NULL | ^~~~ drivers/media/platform/qcom/camss/camss.c:5851:15: note: in expansion of macro ‘pm_clk_resume’ 5851 | ret = pm_clk_resume(dev); | ^~~~~~~~~~~~~ make[7]: *** [scripts/Makefile.build:289: drivers/media/platform/qcom/camss/camss.o] Error 1 make[7]: *** Waiting for unfinished jobs.... CC drivers/media/usb/pwc/pwc-misc.o Please fix. --- bod