From: Ziggy Date: Tue, 11 Jun 2013 13:32:50 +0000 (-0400) Subject: Add earlysuspend to ondemand X-Git-Url: https://ziggy471.com/git/gitweb.cgi?p=ziggy471-sgs4-jb.git;a=commitdiff;h=7391935dca85fafb135ce4961ad3b744349051ad Add earlysuspend to ondemand Signed-off-by: Ziggy --- --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c @@ -25,6 +25,9 @@ #include #include #include +#ifdef CONFIG_EARLYSUSPEND +#include +#endif /* * dbs is used in this file as a shortform for demandbased switching @@ -82,6 +85,10 @@ history_load hist_load[SUP_CORE_NUM] = { #define MIN_SAMPLING_RATE_RATIO (2) static unsigned int min_sampling_rate; +#ifdef CONFIG_EARLYSUSPEND +bool screen_is_on = true; +static unsigned long stored_sampling_rate; +#endif #define LATENCY_MULTIPLIER (1000) #define MIN_LATENCY_MULTIPLIER (100) @@ -171,7 +178,7 @@ static struct dbs_tuners { .powersave_bias = 0, .sync_freq = 0, .optimal_freq = 0, - .enable_turbo_mode = 1, + .enable_turbo_mode = 0, }; static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall) @@ -1342,6 +1349,31 @@ static int cpufreq_governor_dbs(struct c return 0; } +#ifdef CONFIG_EARLYSUSPEND +static void cpufreq_ondemand_early_suspend(struct early_suspend *h) +{ + mutex_lock(&dbs_mutex); + screen_is_on = false; + stored_sampling_rate = min_sampling_rate; + min_sampling_rate = MICRO_FREQUENCY_MIN_SAMPLE_RATE * 6; + mutex_unlock(&dbs_mutex); +} + +static void cpufreq_ondemand_late_resume(struct early_suspend *h) +{ + mutex_lock(&dbs_mutex); + min_sampling_rate = stored_sampling_rate; + screen_is_on = true; + mutex_unlock(&dbs_mutex); +} + +static struct early_suspend cpufreq_ondemand_early_suspend_info = { + .suspend = cpufreq_ondemand_early_suspend, + .resume = cpufreq_ondemand_late_resume, + .level = EARLY_SUSPEND_LEVEL_DISABLE_FB, +}; +#endif + static int __init cpufreq_gov_dbs_init(void) { u64 idle_time; @@ -1379,12 +1411,18 @@ static int __init cpufreq_gov_dbs_init(v INIT_WORK(&per_cpu(dbs_refresh_work, i), dbs_refresh_callback); } +#ifdef CONFIG_EARLYSUSPEND + register_early_suspend(&cpufreq_ondemand_early_suspend_info); +#endif return cpufreq_register_governor(&cpufreq_gov_ondemand); } static void __exit cpufreq_gov_dbs_exit(void) { cpufreq_unregister_governor(&cpufreq_gov_ondemand); +#ifdef CONFIG_EARLYSUSPEND + unregister_early_suspend(&cpufreq_ondemand_early_suspend_info); +#endif destroy_workqueue(input_wq); }