[PATCH v2 9/9] i2c: qcom-geni: Use geni_se_set_rate() for setting source clock frequency
Praveen Talari <[email protected]>
| Newsgroups | gmane.linux.serial,gmane.linux.ports.arm.kernel,gmane.linux.power-management.general,gmane.linux.kernel,gmane.linux.ports.arm.msm,gmane.linux.kernel.spi.devel,gmane.linux.drivers.i2c |
|---|---|
| Message-ID | <20260827-derive_clk_perf_tbl_from_perf_domain_opp_table-v2-9-091697dbeb02@oss.qualcomm.com> |
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. Signed-off-by: Praveen Talari <[email protected]> --- 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 0b178701e1d1..deb0d822290c 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> @@ -219,14 +218,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, itr->src_clk_freq); + ret = geni_se_set_rate(&gi2c->se, itr->src_clk_freq); if (ret) return ret; @@ -985,7 +984,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) return ret; @@ -1228,7 +1227,7 @@ static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev) } } - dev_pm_opp_set_rate(dev, 0); + geni_se_set_rate(&gi2c->se, 0); return 0; } @@ -1239,7 +1238,7 @@ static int __maybe_unused geni_i2c_runtime_resume(struct device *dev) struct geni_i2c_dev *gi2c = dev_get_drvdata(dev); if (gi2c->clk_fld && gi2c->clk_fld->src_clk_freq) { - ret = dev_pm_opp_set_rate(dev, gi2c->clk_fld->src_clk_freq); + ret = geni_se_set_rate(&gi2c->se, gi2c->clk_fld->src_clk_freq); if (ret) return ret; } @@ -1290,7 +1289,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, }; @@ -1299,14 +1297,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