PM / devfreq: improve devfreq->data support
This field is treated as governer specific data for
a devfreq instance. But there's currently no way to
set the correct data when switching governors through
sysfs. Add support for optionally passing a set of
name / data pairs in struct devfreq_dev_profile,
representing the data for each governor.
Change-Id: I5523ce94f8b0045974f0635fb734cb1282512f91
Signed-off-by: Jeremy Gebben <jgebben@codeaurora.org>
Signed-off-by: Vladimir Razgulin <vrazguli@codeaurora.org>
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
index 235248c..9c74fbb 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -53,6 +53,20 @@
#define DEVFREQ_FLAG_LEAST_UPPER_BOUND 0x1
/**
+ * struct devfreq_governor_data - mapping to per device governor data
+ * @name: The name of the governor.
+ * @data: Private data for the governor.
+ *
+ * Devices may pass in an array of this structure to allow governors
+ * to get the correct data pointer when they are enabled after
+ * the devfreq_add_device() call.
+ */
+struct devfreq_governor_data {
+ const char *name;
+ void *data;
+};
+
+/**
* struct devfreq_dev_profile - Devfreq's user device profile
* @initial_freq: The operating frequency when devfreq_add_device() is
* called.
@@ -75,6 +89,11 @@
* this is the time to unregister it.
* @freq_table: Optional list of frequencies to support statistics.
* @max_state: The size of freq_table.
+ * @governor_data: Optional array of private data for governors.
+ * This is used to set devfreq->data correctly
+ * when a governor is enabled via sysfs or other
+ * mechanisms after the devfreq_add_device() call.
+ * @num_governor_data: Number of elements in governor_data.
*/
struct devfreq_dev_profile {
unsigned long initial_freq;
@@ -88,6 +107,8 @@
unsigned int *freq_table;
unsigned int max_state;
+ const struct devfreq_governor_data *governor_data;
+ unsigned int num_governor_data;
};
/**