[PATCH v3 8/8] i2c: qcom-geni: Use geni_se_set_rate() for setting source clock frequency
Praveen Talari
praveen.talari at oss.qualcomm.com
Thu Oct 15 05:58:28 PDT 2026
GENI resource management may be handled either through the Linux clock
framework or a firmware-managed performance domain. Source clock
programming currently depends on platform-specific callbacks.
Use geni_se_set_rate() for source clock programming and perform the
source clock configuration from qcom_geni_i2c_conf(), allowing the GENI
core to abstract the underlying resource-management mechanism from the
I2C driver. This removes the need for platform-specific rate-setting
callbacks and enables a common code path across all GENI I2C platforms.
Reviewed-by: Mukesh Kumar Savaliya <mukesh.savaliya at oss.qualcomm.com>
Signed-off-by: Praveen Talari <praveen.talari at oss.qualcomm.com>
---
drivers/i2c/busses/i2c-qcom-geni.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index dbe344719b86..4879170a1257 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -16,7 +16,6 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
-#include <linux/pm_opp.h>
#include <linux/pm_runtime.h>
#include <linux/soc/qcom/geni-se.h>
#include <linux/spinlock.h>
@@ -252,14 +251,14 @@ static int geni_i2c_clk_map_idx(struct geni_i2c_dev *gi2c)
return -EINVAL;
}
-static int qcom_geni_i2c_conf(struct geni_se *se, unsigned long freq)
+static int qcom_geni_i2c_conf(struct geni_se *se)
{
struct geni_i2c_dev *gi2c = dev_get_drvdata(se->dev);
const struct geni_i2c_clk_fld *itr = gi2c->clk_fld;
u32 val;
int ret;
- ret = dev_pm_opp_set_rate(se->dev, gi2c->src_freq);
+ ret = geni_se_set_rate(&gi2c->se, gi2c->src_freq);
if (ret)
return ret;
@@ -1042,7 +1041,7 @@ static int geni_i2c_xfer(struct i2c_adapter *adap,
return ret;
}
- ret = gi2c->dev_data->set_rate(&gi2c->se, gi2c->clk_freq_out);
+ ret = qcom_geni_i2c_conf(&gi2c->se);
if (ret)
goto out_pm;
@@ -1284,7 +1283,7 @@ static int geni_i2c_runtime_suspend(struct device *dev)
}
}
- return dev_pm_opp_set_rate(dev, 0);
+ return geni_se_set_rate(&gi2c->se, 0);
}
static int geni_i2c_runtime_resume(struct device *dev)
@@ -1299,7 +1298,7 @@ static int geni_i2c_runtime_resume(struct device *dev)
}
if (gi2c->src_freq) {
- ret = dev_pm_opp_set_rate(dev, gi2c->src_freq);
+ ret = geni_se_set_rate(&gi2c->se, gi2c->src_freq);
if (ret)
return ret;
}
@@ -1345,7 +1344,6 @@ static const struct dev_pm_ops geni_i2c_pm_ops = {
static const struct geni_i2c_desc geni_i2c = {
.resources_init = geni_se_resources_init,
- .set_rate = qcom_geni_i2c_conf,
.power_on = geni_se_resources_activate,
.power_off = geni_se_resources_deactivate,
};
@@ -1354,14 +1352,12 @@ static const struct geni_i2c_desc i2c_master_hub = {
.no_dma_support = true,
.tx_fifo_depth = 16,
.resources_init = geni_se_resources_init,
- .set_rate = qcom_geni_i2c_conf,
.power_on = geni_se_resources_activate,
.power_off = geni_se_resources_deactivate,
};
static const struct geni_i2c_desc sa8255p_geni_i2c = {
.resources_init = geni_se_domain_attach,
- .set_rate = geni_se_set_perf_opp,
};
#ifdef CONFIG_ACPI
--
2.34.1
More information about the linux-arm-kernel
mailing list