From 69d2c9fae6164500d2b46bf4edb9c8021e9db1ca Mon Sep 17 00:00:00 2001 From: Hanumath Prasad Date: Thu, 12 Nov 2015 19:50:24 +0530 Subject: [PATCH] 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 --- drivers/devfreq/devfreq_simple_dev.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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)