diff options
| author | Hanumath Prasad <hpprasad@codeaurora.org> | 2015-11-12 19:50:24 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:04:42 -0700 |
| commit | 69d2c9fae6164500d2b46bf4edb9c8021e9db1ca (patch) | |
| tree | 4f51cb2360eaa7ee1c926d3f610f4368ee8de699 /drivers/devfreq/devfreq_simple_dev.c | |
| parent | 4b5b233f041f89e1cc82446288eaed28d66c1679 (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.c | 11 |
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) |
