aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/freq_table.c20
-rw-r--r--include/linux/cpufreq.h8
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
index b9336edb9bd6..3458d27f63b4 100644
--- a/drivers/cpufreq/freq_table.c
+++ b/drivers/cpufreq/freq_table.c
@@ -86,6 +86,20 @@ int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
86} 86}
87EXPORT_SYMBOL_GPL(cpufreq_frequency_table_verify); 87EXPORT_SYMBOL_GPL(cpufreq_frequency_table_verify);
88 88
89/*
90 * Generic routine to verify policy & frequency table, requires driver to call
91 * cpufreq_frequency_table_get_attr() prior to it.
92 */
93int cpufreq_generic_frequency_table_verify(struct cpufreq_policy *policy)
94{
95 struct cpufreq_frequency_table *table =
96 cpufreq_frequency_get_table(policy->cpu);
97 if (!table)
98 return -ENODEV;
99
100 return cpufreq_frequency_table_verify(policy, table);
101}
102EXPORT_SYMBOL_GPL(cpufreq_generic_frequency_table_verify);
89 103
90int cpufreq_frequency_table_target(struct cpufreq_policy *policy, 104int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
91 struct cpufreq_frequency_table *table, 105 struct cpufreq_frequency_table *table,
@@ -199,6 +213,12 @@ struct freq_attr cpufreq_freq_attr_scaling_available_freqs = {
199}; 213};
200EXPORT_SYMBOL_GPL(cpufreq_freq_attr_scaling_available_freqs); 214EXPORT_SYMBOL_GPL(cpufreq_freq_attr_scaling_available_freqs);
201 215
216struct freq_attr *cpufreq_generic_attr[] = {
217 &cpufreq_freq_attr_scaling_available_freqs,
218 NULL,
219};
220EXPORT_SYMBOL_GPL(cpufreq_generic_attr);
221
202/* 222/*
203 * if you use these, you must assure that the frequency table is valid 223 * if you use these, you must assure that the frequency table is valid
204 * all the time between get_attr and put_attr! 224 * all the time between get_attr and put_attr!
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index c7495915932d..36ccd0bf1304 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -401,6 +401,7 @@ int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
401 401
402int cpufreq_frequency_table_verify(struct cpufreq_policy *policy, 402int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
403 struct cpufreq_frequency_table *table); 403 struct cpufreq_frequency_table *table);
404int cpufreq_generic_frequency_table_verify(struct cpufreq_policy *policy);
404 405
405int cpufreq_frequency_table_target(struct cpufreq_policy *policy, 406int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
406 struct cpufreq_frequency_table *table, 407 struct cpufreq_frequency_table *table,
@@ -416,10 +417,17 @@ struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);
416 417
417/* the following are really really optional */ 418/* the following are really really optional */
418extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs; 419extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
420extern struct freq_attr *cpufreq_generic_attr[];
419void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, 421void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table,
420 unsigned int cpu); 422 unsigned int cpu);
421void cpufreq_frequency_table_put_attr(unsigned int cpu); 423void cpufreq_frequency_table_put_attr(unsigned int cpu);
422int cpufreq_table_validate_and_show(struct cpufreq_policy *policy, 424int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
423 struct cpufreq_frequency_table *table); 425 struct cpufreq_frequency_table *table);
424 426
427static inline int cpufreq_generic_exit(struct cpufreq_policy *policy)
428{
429 cpufreq_frequency_table_put_attr(policy->cpu);
430 return 0;
431}
432
425#endif /* _LINUX_CPUFREQ_H */ 433#endif /* _LINUX_CPUFREQ_H */