From: chenxing <chenxing@rock-chips.com> Date: Sat, 4 May 2013 09:07:05 +0000 (+0800) Subject: rk: dvfs fix round bug X-Git-Tag: firefly_0821_release~7170 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4e3c1f89023a09d0342531fe5ed3cb42ffbc1b9c;p=firefly-linux-kernel-4.4.55.git rk: dvfs fix round bug --- diff --git a/arch/arm/plat-rk/dvfs.c b/arch/arm/plat-rk/dvfs.c index e7c6d6953147..d8afde4b261d 100644 --- a/arch/arm/plat-rk/dvfs.c +++ b/arch/arm/plat-rk/dvfs.c @@ -27,7 +27,7 @@ #include <linux/io.h> #include <linux/hrtimer.h> - +#define MHz (1000 * 1000) static LIST_HEAD(rk_dvfs_tree); static DEFINE_MUTEX(mutex); static DEFINE_MUTEX(rk_dvfs_mutex); @@ -338,7 +338,7 @@ int dvfs_vd_clk_disable(struct clk *clk, int on) DVFS_WARNING("%s(%s),vd is no target callback\n", __func__, clk->name); return -1; } - DVFS_DBG("%s(%s(%lu)),is end\n", __func__, dvfs_info->name, DVFS_STR_ON(on)); + DVFS_DBG("%s(%s(%s)),is end\n", __func__, dvfs_info->name, DVFS_STR_DISABLE(on)); return ret; } @@ -348,7 +348,7 @@ EXPORT_SYMBOL(dvfs_vd_clk_disable); static void dvfs_table_round_clk_rate(struct clk_node *dvfs_clk) { int i; - long temp_rate; + unsigned long temp_rate; int rate; int flags; @@ -366,7 +366,12 @@ static void dvfs_table_round_clk_rate(struct clk_node *dvfs_clk) DVFS_WARNING("clk %s:round_clk_rate : is %d,but round <=0",dvfs_clk->name,dvfs_clk->dvfs_table[i].frequency); break; } - temp_rate=(temp_rate/1000)+flags; + + /* Set rate unit as MHZ */ + if (temp_rate % MHz != 0) + temp_rate = (temp_rate / MHz + 1) * MHz; + + temp_rate = (temp_rate / 1000) + flags; DVFS_DBG("clk %s round_clk_rate %d to %d\n", dvfs_clk->name,dvfs_clk->dvfs_table[i].frequency,(int)(temp_rate));