Skip to content

Commit bf225ed

Browse files
Akash Asthanaandersson
authored andcommitted
i2c: i2c-qcom-geni: Add interconnect support
Get the interconnect paths for I2C based Serial Engine device and vote according to the bus speed of the driver. Signed-off-by: Akash Asthana <[email protected]> Reviewed-by: Matthias Kaehlcke <[email protected]> Acked-by: Wolfram Sang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Bjorn Andersson <[email protected]>
1 parent 048eb90 commit bf225ed

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

drivers/i2c/busses/i2c-qcom-geni.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,22 @@ static int geni_i2c_probe(struct platform_device *pdev)
557557
gi2c->adap.dev.of_node = dev->of_node;
558558
strlcpy(gi2c->adap.name, "Geni-I2C", sizeof(gi2c->adap.name));
559559

560+
ret = geni_icc_get(&gi2c->se, "qup-memory");
561+
if (ret)
562+
return ret;
563+
/*
564+
* Set the bus quota for core and cpu to a reasonable value for
565+
* register access.
566+
* Set quota for DDR based on bus speed.
567+
*/
568+
gi2c->se.icc_paths[GENI_TO_CORE].avg_bw = GENI_DEFAULT_BW;
569+
gi2c->se.icc_paths[CPU_TO_GENI].avg_bw = GENI_DEFAULT_BW;
570+
gi2c->se.icc_paths[GENI_TO_DDR].avg_bw = Bps_to_icc(gi2c->clk_freq_out);
571+
572+
ret = geni_icc_set_bw(&gi2c->se);
573+
if (ret)
574+
return ret;
575+
560576
ret = geni_se_resources_on(&gi2c->se);
561577
if (ret) {
562578
dev_err(dev, "Error turning on resources %d\n", ret);
@@ -579,6 +595,10 @@ static int geni_i2c_probe(struct platform_device *pdev)
579595
return ret;
580596
}
581597

598+
ret = geni_icc_disable(&gi2c->se);
599+
if (ret)
600+
return ret;
601+
582602
dev_dbg(dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth);
583603

584604
gi2c->suspended = 1;
@@ -623,14 +643,18 @@ static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev)
623643
gi2c->suspended = 1;
624644
}
625645

626-
return 0;
646+
return geni_icc_disable(&gi2c->se);
627647
}
628648

629649
static int __maybe_unused geni_i2c_runtime_resume(struct device *dev)
630650
{
631651
int ret;
632652
struct geni_i2c_dev *gi2c = dev_get_drvdata(dev);
633653

654+
ret = geni_icc_enable(&gi2c->se);
655+
if (ret)
656+
return ret;
657+
634658
ret = geni_se_resources_on(&gi2c->se);
635659
if (ret)
636660
return ret;

0 commit comments

Comments
 (0)