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.

Signed-off-by: Rajagopal Venkat <rajagopal.ven...@linaro.org>
---
 drivers/devfreq/devfreq.c |   24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index a8f0173..5782c9b 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
@@ -476,6 +499,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, dev_name(dev));
        err = device_register(&devfreq->dev);
-- 
1.7.10.4


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to