[PATCH 6/7] i2c: qcom-geni: Use common GENI resource initialization helper
Praveen Talari <[email protected]> Wed, 05 Aug 2026 01:27:44 +0530
| Newsgroups | gmane.linux.drivers.i2c,gmane.linux.ports.arm.kernel,gmane.linux.power-management.general,gmane.linux.kernel,gmane.linux.ports.arm.msm,gmane.linux.serial,gmane.linux.kernel.spi.devel |
|---|---|
| Message-ID | <20260805-derive_clk_perf_tbl_from_perf_domain_opp_table-v1-6-61171ab1cdce@oss.qualcomm.com> |
The driver implements a custom resources_init() callback for clock frequency validation and bandwidth vote programming. Neither operation is required for resource initialization itself. Move clock frequency validation to probe and program the ICC bandwidth vote from qcom_geni_i2c_conf(), where the bus frequency is configured. This allows the driver to use geni_se_resources_init() directly and removes the I2C-specific resource initialization wrapper. Signed-off-by: Praveen Talari <[email protected]> --- drivers/i2c/busses/i2c-qcom-geni.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index 658636c1ee0e..a23554d101fd 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -228,10 +228,13 @@ static int qcom_geni_i2c_conf(struct geni_se *se, unsigned long freq) val |= itr->t_low_cnt << LOW_COUNTER_SHFT; val |= itr->t_cycle_cnt; writel_relaxed(val, gi2c->se.base + SE_I2C_SCL_COUNTERS); + trace_geni_i2c_bus_setup(gi2c->se.dev, gi2c->clk_freq_out, itr->clk_div, itr->t_high_cnt, itr->t_low_cnt, itr->t_cycle_cnt); - return 0; + + return geni_icc_set_bw_ab(&gi2c->se, GENI_DEFAULT_BW, GENI_DEFAULT_BW, + Bps_to_icc(gi2c->clk_freq_out)); } static void geni_i2c_err_misc(struct geni_i2c_dev *gi2c) @@ -1100,24 +1103,6 @@ static int geni_i2c_init(struct geni_i2c_dev *gi2c) return ret; } -static int geni_i2c_resources_init(struct geni_se *se) -{ - struct geni_i2c_dev *gi2c = dev_get_drvdata(se->dev); - 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; @@ -1188,6 +1173,11 @@ static int geni_i2c_probe(struct platform_device *pdev) if (ret < 0) 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); + ret = i2c_add_adapter(&gi2c->adap); if (ret) return dev_err_probe(dev, ret, "Error adding i2c adapter\n"); @@ -1281,7 +1271,7 @@ static const struct dev_pm_ops geni_i2c_pm_ops = { }; static const struct geni_i2c_desc geni_i2c = { - .resources_init = geni_i2c_resources_init, + .resources_init = geni_se_resources_init, .set_rate = qcom_geni_i2c_conf, .power_on = geni_se_resources_activate, .power_off = geni_se_resources_deactivate, @@ -1290,7 +1280,7 @@ static const struct geni_i2c_desc geni_i2c = { static const struct geni_i2c_desc i2c_master_hub = { .no_dma_support = true, .tx_fifo_depth = 16, - .resources_init = geni_i2c_resources_init, + .resources_init = geni_se_resources_init, .set_rate = qcom_geni_i2c_conf, .power_on = geni_se_resources_activate, .power_off = geni_se_resources_deactivate, -- 2.34.1