[PATCH 2/2] PM: Devfreq: Add frequency get function in profile

From: Xiaoguang Chen
Date: Wed Jun 13 2012 - 00:43:19 EST


when devfreq set one frequency, the final frequency may not
the same as the requested frequency. Add get function in profile
to let devfreq driver return the final frequency.

Signed-off-by: Xiaoguang Chen <chenxg@xxxxxxxxxxx>
---
drivers/devfreq/devfreq.c | 12 +++++++++++-
include/linux/devfreq.h | 2 ++
2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 2144200..50a4fc0 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -72,6 +72,16 @@ static struct devfreq *find_device_devfreq(struct device *dev)
return ERR_PTR(-ENODEV);
}

+static unsigned long __devfreq_get(struct device *dev)
+{
+ struct devfreq *devfreq = to_devfreq(dev);
+ unsigned long ret_freq = devfreq->previous_freq;
+ if (!devfreq->profile->get)
+ return ret_freq;
+ ret_freq = devfreq->profile->get(devfreq->dev.parent);
+ return ret_freq;
+}
+
/**
* update_devfreq() - Reevaluate the device and configure frequency.
* @devfreq: the devfreq instance.
@@ -116,7 +126,7 @@ int update_devfreq(struct devfreq *devfreq)
if (err)
return err;

- devfreq->previous_freq = freq;
+ devfreq->previous_freq = __devfreq_get(&devfreq->dev);
return err;
}

diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
index e5e4036..f789314 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -65,6 +65,7 @@ struct devfreq_frequency_table {
* @initial_freq The operating frequency when devfreq_add_device() is
* called.
* @polling_ms The polling interval in ms. 0 disables polling.
+ * @get Get the devices's actual frequency
* @target The device should set its operating frequency at
* freq or lowest-upper-than-freq value. If freq is
* higher than any operable frequency, set maximum.
@@ -84,6 +85,7 @@ struct devfreq_dev_profile {
unsigned long initial_freq;
unsigned int polling_ms;

+ unsigned long (*get)(struct device *dev);
int (*target)(struct device *dev, unsigned long *freq, u32 flags);
int (*get_dev_status)(struct device *dev,
struct devfreq_dev_status *stat);
--
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/