Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/devfreq/governor_powersave.c
26378 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* linux/drivers/devfreq/governor_powersave.c
4
*
5
* Copyright (C) 2011 Samsung Electronics
6
* MyungJoo Ham <[email protected]>
7
*/
8
9
#include <linux/devfreq.h>
10
#include <linux/module.h>
11
#include "governor.h"
12
13
static int devfreq_powersave_func(struct devfreq *df,
14
unsigned long *freq)
15
{
16
/*
17
* target callback should be able to get ceiling value as
18
* said in devfreq.h
19
*/
20
*freq = DEVFREQ_MIN_FREQ;
21
return 0;
22
}
23
24
static int devfreq_powersave_handler(struct devfreq *devfreq,
25
unsigned int event, void *data)
26
{
27
int ret = 0;
28
29
if (event == DEVFREQ_GOV_START) {
30
mutex_lock(&devfreq->lock);
31
ret = update_devfreq(devfreq);
32
mutex_unlock(&devfreq->lock);
33
}
34
35
return ret;
36
}
37
38
static struct devfreq_governor devfreq_powersave = {
39
.name = DEVFREQ_GOV_POWERSAVE,
40
.get_target_freq = devfreq_powersave_func,
41
.event_handler = devfreq_powersave_handler,
42
};
43
44
static int __init devfreq_powersave_init(void)
45
{
46
return devfreq_add_governor(&devfreq_powersave);
47
}
48
subsys_initcall(devfreq_powersave_init);
49
50
static void __exit devfreq_powersave_exit(void)
51
{
52
int ret;
53
54
ret = devfreq_remove_governor(&devfreq_powersave);
55
if (ret)
56
pr_err("%s: failed remove governor %d\n", __func__, ret);
57
58
return;
59
}
60
module_exit(devfreq_powersave_exit);
61
MODULE_DESCRIPTION("DEVFREQ Powersave governor");
62
MODULE_LICENSE("GPL");
63
64