summaryrefslogtreecommitdiff
path: root/drivers/devfreq/devfreq_simple_dev.c
diff options
context:
space:
mode:
authorHanumath Prasad <hpprasad@codeaurora.org>2015-11-12 19:50:24 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:04:42 -0700
commit69d2c9fae6164500d2b46bf4edb9c8021e9db1ca (patch)
tree4f51cb2360eaa7ee1c926d3f610f4368ee8de699 /drivers/devfreq/devfreq_simple_dev.c
parent4b5b233f041f89e1cc82446288eaed28d66c1679 (diff)
devfreq: devfreq_simple_dev: call clk_round_rate in dev_target
clk_set_rate is failing for some of the frequencies due to higher precision introduced in clock driver. Hence call the clk_round_rate again in dev_target to make sure we send the correct frequency to clk_set_rate. Change-Id: I3e40690bf794d99debbcecdcaf05aaac3363caa8 Signed-off-by: Hanumath Prasad <hpprasad@codeaurora.org>
Diffstat (limited to 'drivers/devfreq/devfreq_simple_dev.c')
-rw-r--r--drivers/devfreq/devfreq_simple_dev.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/devfreq/devfreq_simple_dev.c b/drivers/devfreq/devfreq_simple_dev.c
index b354bcb2aba2..ba562bdcd787 100644
--- a/drivers/devfreq/devfreq_simple_dev.c
+++ b/drivers/devfreq/devfreq_simple_dev.c
@@ -61,9 +61,18 @@ static void find_freq(struct devfreq_dev_profile *p, unsigned long *freq,
static int dev_target(struct device *dev, unsigned long *freq, u32 flags)
{
struct dev_data *d = dev_get_drvdata(dev);
+ unsigned long rfreq;
find_freq(&d->profile, freq, flags);
- return clk_set_rate(d->clk, *freq * 1000);
+
+ rfreq = clk_round_rate(d->clk, *freq * 1000);
+ if (IS_ERR_VALUE(rfreq)) {
+ dev_err(dev, "devfreq: Cannot find matching frequency for %lu\n",
+ *freq);
+ return rfreq;
+ }
+
+ return clk_set_rate(d->clk, rfreq);
}
static int dev_get_cur_freq(struct device *dev, unsigned long *freq)