[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <9a1a48ac-2d33-4c86-92ef-28724221adc3@oss.qualcomm.com>
Date: Wed, 21 Jan 2026 14:27:22 +0530
From: Viken Dadhaniya <viken.dadhaniya@....qualcomm.com>
To: Praveen Talari <praveen.talari@....qualcomm.com>,
Andi Shyti <andi.shyti@...nel.org>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley
<conor+dt@...nel.org>,
Mukesh Kumar Savaliya <mukesh.savaliya@....qualcomm.com>,
Bjorn Andersson <andersson@...nel.org>,
Konrad Dybcio <konradybcio@...nel.org>, linux-arm-msm@...r.kernel.org,
linux-i2c@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, bryan.odonoghue@...aro.org,
dmitry.baryshkov@....qualcomm.com, bjorn.andersson@....qualcomm.com
Cc: prasad.sodagudi@....qualcomm.com, quic_vtanuku@...cinc.com,
aniket.randive@....qualcomm.com, chandana.chiluveru@....qualcomm.com
Subject: Re: [PATCH v3 09/12] i2c: qcom-geni: Move resource initialization to
separate function
Acked-by: Viken Dadhaniya <viken.dadhaniya@....qualcomm.com>
On 1/12/2026 4:17 PM, Praveen Talari wrote:
> Refactor the resource initialization in geni_i2c_probe() by introducing
> a new geni_i2c_resources_init() function and utilizing the common
> geni_se_resources_init() framework and clock frequency mapping, making the
> probe function cleaner.
>
> Signed-off-by: Praveen Talari <praveen.talari@....qualcomm.com>
> ---
> v1->v2:
> - Updated commit text.
> ---
> drivers/i2c/busses/i2c-qcom-geni.c | 53 ++++++++++++------------------
> 1 file changed, 21 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
> index 58c32ffbd150..a4b13022e508 100644
> --- a/drivers/i2c/busses/i2c-qcom-geni.c
> +++ b/drivers/i2c/busses/i2c-qcom-geni.c
> @@ -1042,6 +1042,23 @@ static int geni_i2c_init(struct geni_i2c_dev *gi2c)
> return ret;
> }
>
> +static int geni_i2c_resources_init(struct geni_i2c_dev *gi2c)
> +{
> + int ret;
> +
> + ret = geni_se_resources_init(&gi2c->se);
> + if (ret)
> + return ret;
> +
> + ret = geni_i2c_clk_map_idx(gi2c);
> + if (ret)
> + return dev_err_probe(gi2c->se.dev, ret, "Invalid clk frequency %d Hz\n",
> + gi2c->clk_freq_out);
> +
> + return geni_icc_set_bw_ab(&gi2c->se, GENI_DEFAULT_BW, GENI_DEFAULT_BW,
> + Bps_to_icc(gi2c->clk_freq_out));
> +}
> +
> static int geni_i2c_probe(struct platform_device *pdev)
> {
> struct geni_i2c_dev *gi2c;
> @@ -1061,16 +1078,6 @@ static int geni_i2c_probe(struct platform_device *pdev)
>
> desc = device_get_match_data(&pdev->dev);
>
> - if (desc && desc->has_core_clk) {
> - gi2c->core_clk = devm_clk_get(dev, "core");
> - if (IS_ERR(gi2c->core_clk))
> - return PTR_ERR(gi2c->core_clk);
> - }
> -
> - gi2c->se.clk = devm_clk_get(dev, "se");
> - if (IS_ERR(gi2c->se.clk) && !has_acpi_companion(dev))
> - return PTR_ERR(gi2c->se.clk);
> -
> ret = device_property_read_u32(dev, "clock-frequency",
> &gi2c->clk_freq_out);
> if (ret) {
> @@ -1085,16 +1092,15 @@ static int geni_i2c_probe(struct platform_device *pdev)
> if (gi2c->irq < 0)
> return gi2c->irq;
>
> - ret = geni_i2c_clk_map_idx(gi2c);
> - if (ret)
> - return dev_err_probe(dev, ret, "Invalid clk frequency %d Hz\n",
> - gi2c->clk_freq_out);
> -
> gi2c->adap.algo = &geni_i2c_algo;
> init_completion(&gi2c->done);
> spin_lock_init(&gi2c->lock);
> platform_set_drvdata(pdev, gi2c);
>
> + ret = geni_i2c_resources_init(gi2c);
> + if (ret)
> + return ret;
> +
> /* Keep interrupts disabled initially to allow for low-power modes */
> ret = devm_request_irq(dev, gi2c->irq, geni_i2c_irq, IRQF_NO_AUTOEN,
> dev_name(dev), gi2c);
> @@ -1107,23 +1113,6 @@ static int geni_i2c_probe(struct platform_device *pdev)
> gi2c->adap.dev.of_node = dev->of_node;
> strscpy(gi2c->adap.name, "Geni-I2C", sizeof(gi2c->adap.name));
>
> - ret = geni_icc_get(&gi2c->se, desc ? desc->icc_ddr : "qup-memory");
> - if (ret)
> - return ret;
> - /*
> - * Set the bus quota for core and cpu to a reasonable value for
> - * register access.
> - * Set quota for DDR based on bus speed.
> - */
> - gi2c->se.icc_paths[GENI_TO_CORE].avg_bw = GENI_DEFAULT_BW;
> - gi2c->se.icc_paths[CPU_TO_GENI].avg_bw = GENI_DEFAULT_BW;
> - if (!desc || desc->icc_ddr)
> - gi2c->se.icc_paths[GENI_TO_DDR].avg_bw = Bps_to_icc(gi2c->clk_freq_out);
> -
> - ret = geni_icc_set_bw(&gi2c->se);
> - if (ret)
> - return ret;
> -
> gi2c->suspended = 1;
> pm_runtime_set_suspended(gi2c->se.dev);
> pm_runtime_set_autosuspend_delay(gi2c->se.dev, I2C_AUTO_SUSPEND_DELAY);
Powered by blists - more mailing lists