diff options
author | Linaro CI <ci_notify@linaro.org> | 2018-07-18 16:55:08 +0000 |
---|---|---|
committer | Linaro CI <ci_notify@linaro.org> | 2018-07-18 16:55:08 +0000 |
commit | 8a4ed9b791f957b0668c6d750b1b7317c789ddb0 (patch) | |
tree | 271d1543ec5e02f02a33039ea05f6fa1e5716c12 /drivers/i2c/busses/i2c-qup.c | |
parent | d271b02057624dbe5543f104ff359412203410ea (diff) | |
parent | d050a0c7a3a0d1e4ee534488ffea62d0fb04ca8a (diff) |
Merge remote-tracking branch 'bus-scaling-consumers/bus-scaling-consumers' into integration-linux-qcomltintegration-linux-qcomlt-20180718-175357-v4.18-rc5-217-g8a4ed9b791f9
Diffstat (limited to 'drivers/i2c/busses/i2c-qup.c')
-rw-r--r-- | drivers/i2c/busses/i2c-qup.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c index c86c3ae1318f..01478dbc43ac 100644 --- a/drivers/i2c/busses/i2c-qup.c +++ b/drivers/i2c/busses/i2c-qup.c @@ -14,6 +14,7 @@ #include <linux/dma-mapping.h> #include <linux/err.h> #include <linux/i2c.h> +#include <linux/interconnect.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/module.h> @@ -280,6 +281,9 @@ struct qup_i2c_dev { void (*read_rx_fifo)(struct qup_i2c_dev *qup); /* function to write tags in tx fifo for i2c read transfer */ void (*write_rx_tags)(struct qup_i2c_dev *qup); + + /* The interconnect path */ + struct icc_path *path; }; static irqreturn_t qup_i2c_interrupt(int irq, void *dev) @@ -1775,6 +1779,10 @@ nodma: return qup->irq; } + qup->path = of_icc_get(qup->dev, "ddr"); + if (IS_ERR(qup->path)) + return PTR_ERR(qup->path); + if (has_acpi_companion(qup->dev)) { ret = device_property_read_u32(qup->dev, "src-clock-hz", &src_clk_freq); @@ -1940,15 +1948,19 @@ static int qup_i2c_pm_suspend_runtime(struct device *device) dev_dbg(device, "pm_runtime: suspending...\n"); qup_i2c_disable_clocks(qup); + icc_set(qup->path, 0, 0); return 0; } static int qup_i2c_pm_resume_runtime(struct device *device) { struct qup_i2c_dev *qup = dev_get_drvdata(device); + u32 freq; dev_dbg(device, "pm_runtime: resuming...\n"); qup_i2c_enable_clocks(qup); + freq = clk_get_rate(qup->clk); + icc_set(qup->path, 0, freq * 8); return 0; } #endif |