[PATCH 1/4] cpufreq: allow driver-specific flags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Exactly like the cpuidle subsystem separates core cpuidle flags from
driver-specific cpuidle flags, this commit extends the cpufreq
subsystem with the same idea: the cpufreq_driver->flags field contain
the existing core cpufreq flags in the low 16 bits, and
driver-specific flags in the high 16 bits.

A new function called cpufreq_get_driver_flags() is added to allow a
cpufreq driver to retrieve those flags, since they are typically
needed from a cpufreq_policy->init() callback, which does not have
access to the cpufreq_driver structure. This function call is similar
to the existing cpufreq_get_current_driver() function call.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx>
---
 drivers/cpufreq/cpufreq.c | 15 +++++++++++++++
 include/linux/cpufreq.h   |  5 ++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index d9fdedd..e41b971 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1728,6 +1728,21 @@ const char *cpufreq_get_current_driver(void)
 }
 EXPORT_SYMBOL_GPL(cpufreq_get_current_driver);
 
+/**
+ *	cpufreq_get_driver_flags - return current driver's flags
+ *
+ *	Return the flags of the currently loaded cpufreq driver, or 0
+ *	if none.
+ */
+unsigned int cpufreq_get_driver_flags(void)
+{
+	if (cpufreq_driver)
+		return cpufreq_driver->flags & CPUFREQ_DRIVER_FLAGS_MASK;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(cpufreq_get_driver_flags);
+
 /*********************************************************************
  *                     NOTIFIER LISTS INTERFACE                      *
  *********************************************************************/
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 138336b..fa35601 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -218,7 +218,7 @@ __ATTR(_name, 0644, show_##_name, store_##_name)
 
 struct cpufreq_driver {
 	char			name[CPUFREQ_NAME_LEN];
-	u8			flags;
+	unsigned int		flags;
 
 	/* needed by all drivers */
 	int	(*init)		(struct cpufreq_policy *policy);
@@ -308,10 +308,13 @@ struct cpufreq_driver {
  */
 #define CPUFREQ_NEED_INITIAL_FREQ_CHECK	(1 << 5)
 
+#define CPUFREQ_DRIVER_FLAGS_MASK (0xFFFF0000)
+
 int cpufreq_register_driver(struct cpufreq_driver *driver_data);
 int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
 
 const char *cpufreq_get_current_driver(void);
+unsigned int cpufreq_get_driver_flags(void);
 
 static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
 		unsigned int min, unsigned int max)
-- 
2.0.0

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux