struct cpufreq_interactive_cpuinfo *pcpu =
&per_cpu(cpuinfo, smp_processor_id());
+ if (!pcpu->governor_enabled)
+ return;
+
pcpu->idling = 0;
smp_wmb();
.name = "interactive",
};
+static int cpufreq_interactive_idle_notifier(struct notifier_block *nb,
+ unsigned long val,
+ void *data)
+{
+ switch (val) {
+ case IDLE_START:
+ cpufreq_interactive_idle_start();
+ break;
+ case IDLE_END:
+ cpufreq_interactive_idle_end();
+ break;
+ }
+
+ return 0;
+}
+
+static struct notifier_block cpufreq_interactive_idle_nb = {
+ .notifier_call = cpufreq_interactive_idle_notifier,
+};
+
static int cpufreq_governor_interactive(struct cpufreq_policy *policy,
unsigned int event)
{
pr_warn("%s: failed to register input handler\n",
__func__);
+ idle_notifier_register(&cpufreq_interactive_idle_nb);
break;
case CPUFREQ_GOV_STOP:
if (atomic_dec_return(&active_count) > 0)
return 0;
+ idle_notifier_unregister(&cpufreq_interactive_idle_nb);
input_unregister_handler(&cpufreq_interactive_input_handler);
sysfs_remove_group(cpufreq_global_kobject,
&interactive_attr_group);
return 0;
}
-static int cpufreq_interactive_idle_notifier(struct notifier_block *nb,
- unsigned long val,
- void *data)
-{
- switch (val) {
- case IDLE_START:
- cpufreq_interactive_idle_start();
- break;
- case IDLE_END:
- cpufreq_interactive_idle_end();
- break;
- }
-
- return 0;
-}
-
-static struct notifier_block cpufreq_interactive_idle_nb = {
- .notifier_call = cpufreq_interactive_idle_notifier,
-};
-
static int __init cpufreq_interactive_init(void)
{
unsigned int i;
spin_lock_init(&down_cpumask_lock);
mutex_init(&set_speed_lock);
- idle_notifier_register(&cpufreq_interactive_idle_nb);
INIT_WORK(&inputopen.inputopen_work, cpufreq_interactive_input_open);
return cpufreq_register_governor(&cpufreq_gov_interactive);