From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCE18361DA6 for ; Tue, 21 Jul 2026 13:21:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784640078; cv=none; b=sj4qcIRr6nc0FbPMA8sIG2PKvpZI2roKF0ilkGORMD4gUpMw+vz6NL2/TtuaD06OfUFNSYtbLdERX/oLN6AQEpSZDqsjO6u0Sh8y1xnk/7PVjSc+BGmPncckbPUNYyosi+rbj2vmVZMvbePDsHYYlD0qYafZbLfL1Ojib+bHeR4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784640078; c=relaxed/simple; bh=3hTRvGqDf8rSeCVyeZpAh08rSXRH25yL/6K24MeAhGA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DkZzopxvt4pxTeCu0d0dUpg5IMTDTxLtSpr1ssOYDO24JSmYfBSCICbZmyZsIaIv1ojTRoGa15VrqXVky/cMLdxme/4l0//Rte5vuJXKdWCk5tMCgjZrzDiHBsopViMmnm22K871w/lFfMMRXyTgw58wqFgEqXhCFMJNrXmqNTM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=REP+9LRH; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZNVjrstk; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="REP+9LRH"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZNVjrstk" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66LAR2tW2502820 for ; Tue, 21 Jul 2026 13:21:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 6+9IMhfgU2+XhfVP6NO09mWvG091m8PU8yYOknpFkUs=; b=REP+9LRHLdNTJVtP OgaCPPBtnPA9+HqYd0rTE1XHfhkzu5+DmDTrhKL+tsTtK8+u17pLPIRqaVrrdMez WSbWAWHMPi6fcxfS0iU+NfZUnEuKkgp9+x3s+UO1zvyzBsQGI5pZfN6QKjpKtZDM glWdU0YPwERSN1a2sHwcGZnjk+8+uSeoeCAegKgI8aMu+cSxZsNH1AaLIMOoFo+5 JI7tNkvNY5b0kLj/Xn4DjkxSvs2LLZKzJAAu029vfdgIzsaxIGrjJAzkMZH7WQfo +sIhXdaM3Ey7DV3VCjjeVI3nFWiHvJSGmjUZ2/EzFWvRrF4LFkr8ZZPDTBCkrWeu PWMn9g== Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fj6nsrxqj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 21 Jul 2026 13:21:14 +0000 (GMT) Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-8e9489f62bfso249948686d6.2 for ; Tue, 21 Jul 2026 06:21:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784640074; x=1785244874; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6+9IMhfgU2+XhfVP6NO09mWvG091m8PU8yYOknpFkUs=; b=ZNVjrstkT9zcsQbGFoE/V/H/F7yLLnuH+DCHsHASmnoJKtNVvrmPfa/bjKVi+MLYya Bm/j0AUctcDGigni25XzCizJWp2nx/IAjmi9oT9zO6Qs4Wb27cSSXDHDTJkWrjgNU2g2 iwyW3KbR+WGxUCKxfwMY6Hdsg4ijNVIUkvm94plPjvIrxzecjVA2Qcq9E2U5s7cRBLRo mnNYvKQd8dSb2hdHIxLNVHCZy/N9qno5EAflqqoW1UUxSKu1grVwU0ay89SUDh4qj+BI fywbrTpA+FCR4orfanFavomHdK3CbZ45U4/n+FcFVxsnJDhqY598qDyETfvPC1XuHa/t uteA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784640074; x=1785244874; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6+9IMhfgU2+XhfVP6NO09mWvG091m8PU8yYOknpFkUs=; b=D1W9SDdzfWeYeQTYb4CkmPLoBbPO7jkpVfgezUASjKbVeMbLouVoiOqv8Z+BFQ+p1m M46KPLFvhOtiOAE2HiYQh9WKBwV3gFBctbicm3Amax3C0Xq4QD+fXkZc9m0R30LYSAxm JsP8uUujzZjmg6GX0msNcs1e7NWKqY9YsjFvSiKb7dgM8gRL3bPaQ0aHRNLj7AU7NsHH Q7/3TM/T/dZeKiszIFneEFcH/WYqdxux8mhQZTThcB6gCGSxnp+NiqwdsOIZUNOvVhVJ IionNj5L9YPHZ4wyXSJDI1ldXbRQhmRuuQGHaAc3nl0ZL02UbcFKbl3ul9NGJgCtVuE0 3QAQ== X-Forwarded-Encrypted: i=1; AHgh+RqAUyTRiks5TsBIoUhTRVLTYuFZ/llimeij8J2t0iJ6GEmw93P6d1bTc8RAXr0RI/iyR0KvqhClOVniY9s=@vger.kernel.org X-Gm-Message-State: AOJu0YwPb0OVn6EMUwBkLV7NoPe3EIwnPIoyiupzr/s5OrvKauSG0JMN 1CR/BZ/eNf3Ifcizp+Xl04cVIuROYjwIyVDPQI64BK4T1oj7tbMc6GeDA7sPlslKx4uEydyz5wg x2Vy+rxEQgFIThyreMlWbZKfAG5cRtHsoqbbhAeBbTz8/ARCLG8iJvQCMlSK2EG8qZ9s= X-Gm-Gg: AfdE7cnV+XiLtgi4cDwFJZYdHEJBOP4Gr19ZZ8RSyq0VjK6NRH9tUmAKyeW70eLEUrO vT0sh+DYCXxQwPPAP9Mq0Vk4/dKvkj2Gs6AjxUspCrxYM4W402R+33om6WCzIXPQc8mmcf87I34 06yQKAUAz6mQow5rcqhdZfVMhuvMCNMStAtyaWYHV1e9V81NiA8wDSgnzZ4I8kHyhjRMnVHUY25 jkNaSY8eztvYbC+2e+9yC0nL4C4aqFaiVQbWsTKPEP5pkRPdgFFDjVUPluiAjL4IJAf1YepPlcu vow7ZoclVrBJBVOPoyCK6K7ASS6Zv04MOvD9Gqj0GbB+FAIKrVoStgXZZD7EUwrhSgKXCim/mcy DiuRxlT0ml36Rp/Jl2feZVcH2Kf2jUBcp8ntqmcTyrllbKLLnPnwouZosvvxCAEKCKFb2RfS/Kn U+9mLi+vuto55lbcxKeQFF+EKDy3fxcvWy5BfqBa+dnAy4mQxHEH4= X-Received: by 2002:a05:622a:4ccf:b0:516:e0eb:d7d with SMTP id d75a77b69052e-5213c2028b8mr182201001cf.27.1784640073351; Tue, 21 Jul 2026 06:21:13 -0700 (PDT) X-Received: by 2002:a05:622a:4ccf:b0:516:e0eb:d7d with SMTP id d75a77b69052e-5213c2028b8mr182200281cf.27.1784640072594; Tue, 21 Jul 2026 06:21:12 -0700 (PDT) Received: from QCOM-eG0v1AUPpu.na.qualcomm.com ([2a01:e0a:830:450:751c:d61c:c91:60dd]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1712a5f8c5sm598326066b.34.2026.07.21.06.21.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 06:21:11 -0700 (PDT) From: Loic Poulain Date: Tue, 21 Jul 2026 15:21:08 +0200 Subject: [PATCH v2 1/4] media: qcom: camss: Add PM clock support and integrate with runtime PM 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: 7bit Message-Id: <20260721-camss-version-v2-1-b2440d99085a@oss.qualcomm.com> References: <20260721-camss-version-v2-0-b2440d99085a@oss.qualcomm.com> In-Reply-To: <20260721-camss-version-v2-0-b2440d99085a@oss.qualcomm.com> To: Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Loic Poulain X-Mailer: b4 0.14.2 X-Proofpoint-GUID: JVED6Ke3PiGmeoHa4vJGz-_PEAVEodjt X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE0MSBTYWx0ZWRfX47sKwTdCxTDh rejRb2sLCECm0qmr0Y0pWbqjRq6kE0r+VoeyNrmY1AaWb3PhLZ8qLNBmumseT6/3v3ek39KzEDE 76vQSwHBIhyWUHNwsZwKxBw7DeHw4DM= X-Authority-Analysis: v=2.4 cv=ZJjnX37b c=1 sm=1 tr=0 ts=6a5f724a cx=c_pps a=wEM5vcRIz55oU/E2lInRtA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=BAJ2-saCjKdBVCgQpPYA:9 a=QEXdDO2ut3YA:10 a=OIgjcC2v60KrkQgK7BGD:22 X-Proofpoint-ORIG-GUID: JVED6Ke3PiGmeoHa4vJGz-_PEAVEodjt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE0MSBTYWx0ZWRfX9bRKweOUxO2+ ggpwaUnPZBGNkDS6s92sYc6wcZZMQRBjSFuwmc29lS81WhKwmr4La2ciim9JcMxC62TdmDpwYRw h1AuQVfabZqkgCyhG3RGA/gUAabCrqPUsayt7xTPIqN6zktLbE1gtbp0r2x5GGmNldLc57al/6J Ry14XtRO8tdwjcKSAHk9RumUwLvu3I8oN2R6dq4+elqCEYKGIVpJ8LkFOc69arxPHbYcN4fvpdL MqdFF1fiHnWF81MhDsgwl4SZMmQMqg8jpz7+SLlcw5tMXbNs/I6MzxM9TlkNrFNSNl3QQMU0ccc WrLKbVWFrk4olo6xmrDhTEIjldZjC6ixuxkeFBYtdaaTXOiefyqSYxluEw3+Lk2prOHAHLZIT5m wvEYgpW3r7InCirGdWUjnn3riZJiD+wBNMoisOOfa7PFUODJkbJk006ISQ3iB5bRfLmshBYPquG 7l6qK8h36+wDg6lNxcQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-21_01,2026-07-20_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 priorityscore=1501 suspectscore=0 impostorscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607210141 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 | 42 ++++++++++++++++++++++++++++++- drivers/media/platform/qcom/camss/camss.h | 1 + 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c index 2123f6388e3d7eafe669efd6b033e22d8eb5cf79..01a9d4f780fbe130554601481bed50eac5978bed 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,37 @@ 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_err(dev, "failed to add pm_clk %s: %d\n", + camss->res->pm_clks[i], ret); + return ret; + } + } + + return 0; +} + /* * camss_probe - Probe CAMSS platform device * @pdev: Pointer to CAMSS platform device @@ -5434,6 +5466,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 +5811,7 @@ static int __maybe_unused camss_runtime_suspend(struct device *dev) return ret; } - return 0; + return pm_clk_suspend(dev); } static int __maybe_unused camss_runtime_resume(struct device *dev) @@ -5785,6 +5821,10 @@ static int __maybe_unused camss_runtime_resume(struct device *dev) int i; int ret; + ret = pm_clk_resume(dev); + if (ret) + return ret; + for (i = 0; i < camss->res->icc_path_num; i++) { ret = icc_set_bw(camss->icc_path[i], icc_res[i].icc_bw_tbl.avg, diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h index 93d691c8ac63b2a47dbb234856b627d8911a1851..fe5fe25d5f18d8a3ce35b48077a975f1453c341f 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -107,6 +107,7 @@ enum icc_count { struct camss_resources { enum camss_version version; const char *pd_name; + const char *pm_clks[CAMSS_RES_MAX]; const struct camss_subdev_resources *csiphy_res; const struct camss_subdev_resources *tpg_res; const struct camss_subdev_resources *csid_res; -- 2.34.1