aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/devfreq/devfreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/devfreq/devfreq.c')
-rw-r--r--drivers/devfreq/devfreq.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 8e5938c9c7d6..ade279d29f1e 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -940,6 +940,9 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
940 if (df->governor == governor) { 940 if (df->governor == governor) {
941 ret = 0; 941 ret = 0;
942 goto out; 942 goto out;
943 } else if (df->governor->immutable || governor->immutable) {
944 ret = -EINVAL;
945 goto out;
943 } 946 }
944 947
945 if (df->governor) { 948 if (df->governor) {
@@ -969,13 +972,33 @@ static ssize_t available_governors_show(struct device *d,
969 struct device_attribute *attr, 972 struct device_attribute *attr,
970 char *buf) 973 char *buf)
971{ 974{
972 struct devfreq_governor *tmp_governor; 975 struct devfreq *df = to_devfreq(d);
973 ssize_t count = 0; 976 ssize_t count = 0;
974 977
975 mutex_lock(&devfreq_list_lock); 978 mutex_lock(&devfreq_list_lock);
976 list_for_each_entry(tmp_governor, &devfreq_governor_list, node) 979
977 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), 980 /*
978 "%s ", tmp_governor->name); 981 * The devfreq with immutable governor (e.g., passive) shows
982 * only own governor.
983 */
984 if (df->governor->immutable) {
985 count = scnprintf(&buf[count], DEVFREQ_NAME_LEN,
986 "%s ", df->governor_name);
987 /*
988 * The devfreq device shows the registered governor except for
989 * immutable governors such as passive governor .
990 */
991 } else {
992 struct devfreq_governor *governor;
993
994 list_for_each_entry(governor, &devfreq_governor_list, node) {
995 if (governor->immutable)
996 continue;
997 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
998 "%s ", governor->name);
999 }
1000 }
1001
979 mutex_unlock(&devfreq_list_lock); 1002 mutex_unlock(&devfreq_list_lock);
980 1003
981 /* Truncate the trailing space */ 1004 /* Truncate the trailing space */