summaryrefslogtreecommitdiff
path: root/drivers/devfreq/devfreq.c
diff options
context:
space:
mode:
authorRajagopal Venkat <rajagopal.venkat@linaro.org>2013-06-11 16:42:27 -0600
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:03:37 -0700
commit4c5ca5ed5ba274cd1de8f17dc7881529d108b274 (patch)
tree69df9f0531adb0d5a4fe045eadf04104481d1e9c /drivers/devfreq/devfreq.c
parentde6ff179a853f894bf46f171f24344f385cb82ab (diff)
FROMLIST: PM / devfreq: set min/max freq limit from freq table
Set devfreq device min and max frequency limits when device is added to devfreq, provided frequency table is supplied. This helps governors to suggest target frequency with in limits. Change-Id: Iab24aef59bfeffcfb3c3118c12ba58e25cd9d479 Signed-off-by: Rajagopal Venkat <rajagopal.venkat@linaro.org> Patch-mainline: linux-pm @ 01/08/13, 05:50 Signed-off-by: Vladimir Razgulin <vrazguli@codeaurora.org>
Diffstat (limited to 'drivers/devfreq/devfreq.c')
-rw-r--r--drivers/devfreq/devfreq.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 00bcdd9540b5..9a857f8c039e 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -69,6 +69,29 @@ static struct devfreq *find_device_devfreq(struct device *dev)
}
/**
+ * devfreq_set_freq_limits() - Set min and max frequency from freq_table
+ * @devfreq: the devfreq instance
+ */
+static void devfreq_set_freq_limits(struct devfreq *devfreq)
+{
+ int idx;
+ unsigned long min = ~0, max = 0;
+
+ if (!devfreq->profile->freq_table)
+ return;
+
+ for (idx = 0; idx < devfreq->profile->max_state; idx++) {
+ if (min > devfreq->profile->freq_table[idx])
+ min = devfreq->profile->freq_table[idx];
+ if (max < devfreq->profile->freq_table[idx])
+ max = devfreq->profile->freq_table[idx];
+ }
+
+ devfreq->min_freq = min;
+ devfreq->max_freq = max;
+}
+
+/**
* devfreq_get_freq_level() - Lookup freq_table for the frequency
* @devfreq: the devfreq instance
* @freq: the target frequency
@@ -487,6 +510,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
devfreq->profile->max_state,
GFP_KERNEL);
devfreq->last_stat_updated = jiffies;
+ devfreq_set_freq_limits(devfreq);
dev_set_name(&devfreq->dev, "%s", dev_name(dev));
err = device_register(&devfreq->dev);