void get_run_idle(u32 *run, u32 *idle)
{
- if(gcvPOWER_IDLE==lastState)
+ if(gcvPOWER_ON!=lastState)
{
do_gettimeofday(&tv_on);
usec_idle += (1000000*(tv_on.tv_sec-tv_idle.tv_sec)+(tv_on.tv_usec-tv_idle.tv_usec));
{
int freq = 0;
- if(gcvPOWER_IDLE==lastState && gcvPOWER_ON==State) //gcvPOWER_IDLE->gcvPOWER_ON
+ if(gcvPOWER_ON!=lastState && gcvPOWER_ON==State) //NotON -> ON
{
do_gettimeofday(&tv_on);
usec_idle += (1000000*(tv_on.tv_sec-tv_idle.tv_sec)+(tv_on.tv_usec-tv_idle.tv_usec));
- }
- if(gcvPOWER_ON==lastState && gcvPOWER_IDLE==State) //gcvPOWER_ON->gcvPOWER_IDLE
+ }
+ else if(gcvPOWER_ON==lastState && gcvPOWER_ON!=State) //ON -> NotON
{
do_gettimeofday(&tv_idle);
usec_run += (1000000*(tv_idle.tv_sec-tv_on.tv_sec)+(tv_idle.tv_usec-tv_on.tv_usec));
freq = nextfreq;
nextfreq = 0;
if(freq) {
+ if(freq<24) freq = 24;
+ if(freq>600) freq = 600;
clk_gpu = clk_get(NULL, "gpu");
- clk_set_parent(clk_gpu, clk_get(NULL, "general_pll"));
- clk_set_rate(clk_get(NULL, "codec_pll"), freq*1000000);
clk_set_rate(clk_gpu, freq*1000000);
- clk_set_parent(clk_gpu, clk_get(NULL, "codec_pll"));
- //printk(" == > gpu change freq to %d \n", freq);
+ printk(" == > gpu change freq to %d \n", freq);
}
}
u32 run, idle;
int precent, freq, diff;
- mod_timer(&gpu_timer, jiffies + HZ/10);
+ mod_timer(&gpu_timer, jiffies + HZ/4);
get_run_idle(&run, &idle);
precent = (int)((run*100)/(run+idle));
last_freq = freq;
//set_nextfreq(freq);
}
-
- printk("%8d /%8d = %3d %%, needfreq = %dM (%d)\n", (int)run, (int)(run+idle), precent, freq, power_cnt);
+
+ printk("gpu load : %3d %%\n", precent);
+ //printk("%8d /%8d = %3d %%, needfreq = %dM (%d)\n", (int)run, (int)(run+idle), precent, freq, power_cnt);
}
#elif(2==gcdENABLE_AUTO_FREQ)
#include <linux/timer.h>