From nobody Thu Apr 2 08:03:36 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 E8E8B2D94B0 for ; Fri, 27 Feb 2026 06:17:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772173050; cv=none; b=mBTD1OboKaUJYkqdWz1P60hzsWJav+7UL/WfwJE7PLpHE6hNeEeqb2hPFDr2gs+idrHGciGsLu+/S/5M4K3B6XGsBCmY80GMCpoMxnMCFyONEKIdTYKsAej1tqOmC3HfdofA8xAConHXAFD2dO6fkGF5nNArJy04rjK5Ns0DnmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772173050; c=relaxed/simple; bh=HwTb7t2o4sy7CjKDpJPoenPA/396v0ONnPQOFRFUIQs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZrfZwGAuNCZBMcXq9NfCgud4sNuuzXJlzii4s49Qli+RlHQm77pcMoebEbCl0YRFcku5NVrQe+Ha3zQz6BXUyspHshilWkFPHiuFgXsfi2vh4addpGDjDz9riQhCvBqaEDN6xV9LGLKl/T0spSAh8b5fmpqVQtxkxS3duC+/88M= 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=ZhYlO7eW; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=i1uk+XFM; arc=none smtp.client-ip=205.220.180.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="ZhYlO7eW"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="i1uk+XFM" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R2Jxk81619659 for ; Fri, 27 Feb 2026 06:17:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=2KqnelgaDr6 6ONe8WdkRoolRj2Ly4YpoaydtcSK3HUg=; b=ZhYlO7eWvF3y/w/B81nfjzXYiGX dafpzNphiiaCPfnvGLZ0pSd462gjpcbBqNg6ZW2E24b8rP2VvXfg3SIQRhYT3ltj Zi4rWL4od5NnA/MfpZ3i6uRmCHZThIYLmbCqRcdr0Et7yjGYI2TGkldexrioxLTQ JJ2EjEyZZ/ulzckUEOmHzWId0knMDy0N/GSLwBF2Hqn3VcAzAtXs57kDoGBlqwvH Y8IQZG4fhAbn9scmRNUMQmM/dovJaZz/+27ecOr1Tk2wdJY43tMP8dOO/nXlR9zI GmkFATxKaY7OapEhrFrF67rcry6opiVIQ174STV2lXq77/IGny1CdivmaKw== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cjn0x3eq6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 06:17:27 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2adb1bdf778so17079395ad.3 for ; Thu, 26 Feb 2026 22:17:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772173047; x=1772777847; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2KqnelgaDr66ONe8WdkRoolRj2Ly4YpoaydtcSK3HUg=; b=i1uk+XFMtyYYQRm8btNCbnEUC64bYT4V6BLkUvVscM57A9Jn3LQz3TMDgkm9FiipxD tT5IaAIbSGa/7mTuwMw0n9EX/UBJLZv1GL83wpGXUb2wa3xXP2rLKKQ6QbqnmbHSaSDa yI7t8UlJF/sD0AZ4FXM9eAFnseNAlyKD2gvo50OqRiahKPx2bcQbNfNi3os5kQQHUNlL mSzOR9p6ZBV127ulITGmhCOsQ/obb50pLIN3fFR5SHMu+zgAw8QZfEQ28g7hQHXaFAhg 9+34todKgu1HUPZ1U+Va+KHUXGRZO0QwFnR2pgG5o7bcjoXp8PqS6+V5C7UfHbXzhg04 x/8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772173047; x=1772777847; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2KqnelgaDr66ONe8WdkRoolRj2Ly4YpoaydtcSK3HUg=; b=QqZQIJmtm77N2vmwMWNCqpFfwyxkVyWRxh2VoMhgyMFTdNQBuODE8NWNuHzIajFEBN +pqluek18sEKlaaXNZDHeoXPZ5OopImnblExCtYzr21W1fYyPi6R99viPsOTXdAgkAGl GmvZQLD1KYpZOcrUlZj35Ity2Wp1OiO0/NWaDn/pDrxzKCNq87A6sX60o/EOOvcB15tN tLckmmXg1BP7hsEsqWC8zwqzZ67rwXgMgYJ93aYpPlpeYgnBKVq1b5+aRv16VrdykxVu +FD5amjezWr2pGHvv3r87zSgOqb4UNwAVbqRSG8fr5M3jOJegvkPTS8fF/9ZvZvKUBGJ 3Djg== X-Forwarded-Encrypted: i=1; AJvYcCWqiF1IbqIHWDvPSickKQxMf7cmzta4fG+H0pX7M39W4ZPMiVgsvlghWAl3CU13WSbO1S/d/lD3/+CcwQo=@vger.kernel.org X-Gm-Message-State: AOJu0Yzloo2dSMjlCDY5CMnpxpj0Ak2UwpC9IGddz3Ye+VgvanE60WFn lTMuVp0DMgckbPlwETjB0hLylgiU/TMFB1PNYhZ/mXPWfFUhgYMl6VLmyr/rXeyLD7oubn9O1Ab Amq7PT5wu8PA9SYvMuU2jVuljpEjY4pB4opWRRY7ZBIjUQvrZzZxImgcVcIt77FlmmME= X-Gm-Gg: ATEYQzxk5An98TnET/FgGwlwM1eDEwXd6OIaXnsyLulo1daSrne0Xug7fr2Y1IlLmg4 1t6cH7BD66blCvioDORV8567fj8rKxtRX0uXm4y/GX25ivQe9SRdaLPd0z6F12C+wiEeXjbXH5P sMu1MY6C1rPbaXhTHq1kqGpkQojPu7zLCviiQv/LFdV4YWQEtS3vS4YyzzWKPmBkMqvPfhfeQWJ kYPUBiqtGnDRdOei1d0GUgQ2rifORjf+jURHoZzc0QpzpawmBNxh6Xl4gTKw1BlHq72GcUeQkQk oG8j4Jnrjrk/Nz9fJFMoW1pRcUeT8mBOmrE41OoxrflOtBHpRsSPU3OSkQfCinERgqjaRJWxrUw GdoxyvjImk0H+uOqfMWHzrGAAJcES5o2UBfvxSwgwtq4AnoIpr/DNR3c= X-Received: by 2002:a17:902:ecc5:b0:2ad:6e0c:620f with SMTP id d9443c01a7336-2ae2e4bceaamr16289505ad.43.1772173046952; Thu, 26 Feb 2026 22:17:26 -0800 (PST) X-Received: by 2002:a17:902:ecc5:b0:2ad:6e0c:620f with SMTP id d9443c01a7336-2ae2e4bceaamr16289195ad.43.1772173046411; Thu, 26 Feb 2026 22:17:26 -0800 (PST) Received: from hu-ptalari-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2adfb6a043dsm64813025ad.54.2026.02.26.22.17.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 22:17:26 -0800 (PST) From: Praveen Talari To: Andi Shyti , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mukesh Kumar Savaliya , Viken Dadhaniya , Bjorn Andersson , Konrad Dybcio , Praveen Talari , linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, bjorn.andersson@oss.qualcomm.com, dmitry.baryshkov@oss.qualcomm.com, konrad.dybcio@oss.qualcomm.com Cc: prasad.sodagudi@oss.qualcomm.com, aniket.randive@oss.qualcomm.com, chandana.chiluveru@oss.qualcomm.com, jyothi.seerapu@oss.qualcomm.com, chiluka.harish@oss.qualcomm.com Subject: [PATCH v6 13/13] i2c: qcom-geni: Enable I2C on SA8255p Qualcomm platforms Date: Fri, 27 Feb 2026 11:45:44 +0530 Message-Id: <20260227061544.1785978-14-praveen.talari@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260227061544.1785978-1-praveen.talari@oss.qualcomm.com> References: <20260227061544.1785978-1-praveen.talari@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: jFNMQ440AjbSJBhKjscnzDyixVGY4gfz X-Authority-Analysis: v=2.4 cv=I9Johdgg c=1 sm=1 tr=0 ts=69a136f7 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=zgZzUwpPmSg69XYvEVoA:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDA1MCBTYWx0ZWRfX1yD7f5GrT3j3 w79TwC0X9o24fqlvDA1k+3xut5us9synZpH4tsXo8zznipxi+WglMB5ilsLDsatmy9m32LjleI/ UdNlJWV5CQu8UrXkly+svH1MZOI02rU/j9MRnQHqzHkAX758Rhnm58cK95tLsJKg9z4nogFC9Va nizd5w4ehSgvNgXRnSbCHjHLMX7YrIbRGm65JcgIRS4ddNmMcBQ7Y+xS85cmTfB9aKHtsVlnhrM bIoievMmjb8nFHN4VXxg2fPwECzjIPvjE9VhWhujjdjLcti7MsRzQOuOFyeKKh16nyFQbpbdRdO QIJnN4aWZGwkhvrCbRMpenW81mfNZW5FGuq5H+/SHRWUiugF89U+ERuijBnKl2XCT+3KjtTIV8a hQ9mZzgsludYonExbPondO2xdZxX0U7jVAbY7BVHkfWzzqOnHfhAVXuyevLF66Gq0GmcrbWBozL uk/eGkFL69g6GajEQzQ== X-Proofpoint-ORIG-GUID: jFNMQ440AjbSJBhKjscnzDyixVGY4gfz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-27_01,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 bulkscore=0 malwarescore=0 phishscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270050 Content-Type: text/plain; charset="utf-8" The Qualcomm automotive SA8255p SoC relies on firmware to configure platform resources, including clocks, interconnects and TLMM. The driver requests resources operations over SCMI using power and performance protocols. The SCMI power protocol enables or disables resources like clocks, interconnect paths, and TLMM (GPIOs) using runtime PM framework APIs, such as resume/suspend, to control power on/off. The SCMI performance protocol manages I2C frequency, with each frequency rate represented by a performance level. The driver uses geni_se_set_perf_opp() API to request the desired frequency rate.. As part of geni_se_set_perf_opp(), the OPP for the requested frequency is obtained using dev_pm_opp_find_freq_floor() and the performance level is set using dev_pm_opp_set_opp(). Acked-by: Viken Dadhaniya Signed-off-by: Praveen Talari Reviewed-by: Konrad Dybcio --- v3->v4: - Added Acked-by tag. V1->v2: From kernel test robot: - Initialized ret to "0" in resume/suspend callbacks. Bjorn: - Used seperate APIs for the resouces enable/disable. --- drivers/i2c/busses/i2c-qcom-geni.c | 56 ++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index f2508038c64c..556bad79d606 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -80,6 +80,10 @@ enum geni_i2c_err_code { struct geni_i2c_desc { bool no_dma_support; unsigned int tx_fifo_depth; + int (*resources_init)(struct geni_se *se); + int (*set_rate)(struct geni_se *se, unsigned long freq); + int (*power_on)(struct geni_se *se); + int (*power_off)(struct geni_se *se); }; =20 #define QCOM_I2C_MIN_NUM_OF_MSGS_MULTI_DESC 2 @@ -201,8 +205,9 @@ static int geni_i2c_clk_map_idx(struct geni_i2c_dev *gi= 2c) return -EINVAL; } =20 -static void qcom_geni_i2c_conf(struct geni_i2c_dev *gi2c) +static int qcom_geni_i2c_conf(struct geni_se *se, unsigned long freq) { + struct geni_i2c_dev *gi2c =3D dev_get_drvdata(se->dev); const struct geni_i2c_clk_fld *itr =3D gi2c->clk_fld; u32 val; =20 @@ -215,6 +220,7 @@ static void qcom_geni_i2c_conf(struct geni_i2c_dev *gi2= c) val |=3D itr->t_low_cnt << LOW_COUNTER_SHFT; val |=3D itr->t_cycle_cnt; writel_relaxed(val, gi2c->se.base + SE_I2C_SCL_COUNTERS); + return 0; } =20 static void geni_i2c_err_misc(struct geni_i2c_dev *gi2c) @@ -906,7 +912,9 @@ static int geni_i2c_xfer(struct i2c_adapter *adap, return ret; } =20 - qcom_geni_i2c_conf(gi2c); + ret =3D gi2c->dev_data->set_rate(&gi2c->se, gi2c->clk_freq_out); + if (ret) + return ret; =20 if (gi2c->gpi_mode) ret =3D geni_i2c_gpi_xfer(gi2c, msgs, num); @@ -1032,8 +1040,9 @@ static int geni_i2c_init(struct geni_i2c_dev *gi2c) return ret; } =20 -static int geni_i2c_resources_init(struct geni_i2c_dev *gi2c) +static int geni_i2c_resources_init(struct geni_se *se) { + struct geni_i2c_dev *gi2c =3D dev_get_drvdata(se->dev); int ret; =20 ret =3D geni_se_resources_init(&gi2c->se); @@ -1088,7 +1097,7 @@ static int geni_i2c_probe(struct platform_device *pde= v) spin_lock_init(&gi2c->lock); platform_set_drvdata(pdev, gi2c); =20 - ret =3D geni_i2c_resources_init(gi2c); + ret =3D gi2c->dev_data->resources_init(&gi2c->se); if (ret) return ret; =20 @@ -1147,15 +1156,17 @@ static void geni_i2c_shutdown(struct platform_devic= e *pdev) =20 static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev) { - int ret; + int ret =3D 0; struct geni_i2c_dev *gi2c =3D dev_get_drvdata(dev); =20 disable_irq(gi2c->irq); =20 - ret =3D geni_se_resources_deactivate(&gi2c->se); - if (ret) { - enable_irq(gi2c->irq); - return ret; + if (gi2c->dev_data->power_off) { + ret =3D gi2c->dev_data->power_off(&gi2c->se); + if (ret) { + enable_irq(gi2c->irq); + return ret; + } } =20 gi2c->suspended =3D 1; @@ -1164,12 +1175,14 @@ static int __maybe_unused geni_i2c_runtime_suspend(= struct device *dev) =20 static int __maybe_unused geni_i2c_runtime_resume(struct device *dev) { - int ret; + int ret =3D 0; struct geni_i2c_dev *gi2c =3D dev_get_drvdata(dev); =20 - ret =3D geni_se_resources_activate(&gi2c->se); - if (ret) - return ret; + if (gi2c->dev_data->power_on) { + ret =3D gi2c->dev_data->power_on(&gi2c->se); + if (ret) + return ret; + } =20 enable_irq(gi2c->irq); gi2c->suspended =3D 0; @@ -1206,11 +1219,25 @@ static const struct dev_pm_ops geni_i2c_pm_ops =3D { NULL) }; =20 -static const struct geni_i2c_desc geni_i2c =3D {}; +static const struct geni_i2c_desc geni_i2c =3D { + .resources_init =3D geni_i2c_resources_init, + .set_rate =3D qcom_geni_i2c_conf, + .power_on =3D geni_se_resources_activate, + .power_off =3D geni_se_resources_deactivate, +}; =20 static const struct geni_i2c_desc i2c_master_hub =3D { .no_dma_support =3D true, .tx_fifo_depth =3D 16, + .resources_init =3D geni_i2c_resources_init, + .set_rate =3D qcom_geni_i2c_conf, + .power_on =3D geni_se_resources_activate, + .power_off =3D geni_se_resources_deactivate, +}; + +static const struct geni_i2c_desc sa8255p_geni_i2c =3D { + .resources_init =3D geni_se_domain_attach, + .set_rate =3D geni_se_set_perf_opp, }; =20 #ifdef CONFIG_ACPI @@ -1225,6 +1252,7 @@ MODULE_DEVICE_TABLE(acpi, geni_i2c_acpi_match); static const struct of_device_id geni_i2c_dt_match[] =3D { { .compatible =3D "qcom,geni-i2c", .data =3D &geni_i2c }, { .compatible =3D "qcom,geni-i2c-master-hub", .data =3D &i2c_master_hub }, + { .compatible =3D "qcom,sa8255p-geni-i2c", .data =3D &sa8255p_geni_i2c }, {} }; MODULE_DEVICE_TABLE(of, geni_i2c_dt_match); --=20 2.34.1