cpufreq: Introduce macros for cpufreq_frequency_table iteration
Many cpufreq drivers need to iterate over the cpufreq_frequency_table for various tasks. This patch introduces two macros which can be used for iteration over cpufreq_frequency_table keeping a common coding style across drivers: - cpufreq_for_each_entry: iterate over each entry of the table - cpufreq_for_each_valid_entry: iterate over each entry that contains a valid frequency. It should have no functional changes. Signed-off-by: Stratos Karafotis <stratosk@semaphore.gr> Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
					parent
					
						
							
								d1db0eea85
							
						
					
				
			
			
				commit
				
					
						27e289dce2
					
				
			
		
					 3 changed files with 51 additions and 0 deletions
				
			
		|  | @ -228,3 +228,22 @@ is the corresponding frequency table helper for the ->target | |||
| stage. Just pass the values to this function, and the unsigned int | ||||
| index returns the number of the frequency table entry which contains | ||||
| the frequency the CPU shall be set to. | ||||
| 
 | ||||
| The following macros can be used as iterators over cpufreq_frequency_table: | ||||
| 
 | ||||
| cpufreq_for_each_entry(pos, table) - iterates over all entries of frequency | ||||
| table. | ||||
| 
 | ||||
| cpufreq-for_each_valid_entry(pos, table) - iterates over all entries, | ||||
| excluding CPUFREQ_ENTRY_INVALID frequencies. | ||||
| Use arguments "pos" - a cpufreq_frequency_table * as a loop cursor and | ||||
| "table" - the cpufreq_frequency_table * you want to iterate over. | ||||
| 
 | ||||
| For example: | ||||
| 
 | ||||
| 	struct cpufreq_frequency_table *pos, *driver_freq_table; | ||||
| 
 | ||||
| 	cpufreq_for_each_entry(pos, driver_freq_table) { | ||||
| 		/* Do something with pos */ | ||||
| 		pos->frequency = ... | ||||
| 	} | ||||
|  |  | |||
|  | @ -237,6 +237,17 @@ void cpufreq_cpu_put(struct cpufreq_policy *policy) | |||
| } | ||||
| EXPORT_SYMBOL_GPL(cpufreq_cpu_put); | ||||
| 
 | ||||
| bool cpufreq_next_valid(struct cpufreq_frequency_table **pos) | ||||
| { | ||||
| 	while ((*pos)->frequency != CPUFREQ_TABLE_END) | ||||
| 		if ((*pos)->frequency != CPUFREQ_ENTRY_INVALID) | ||||
| 			return true; | ||||
| 		else | ||||
| 			(*pos)++; | ||||
| 	return false; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(cpufreq_next_valid); | ||||
| 
 | ||||
| /*********************************************************************
 | ||||
|  *            EXTERNALLY AFFECTING FREQUENCY CHANGES                 * | ||||
|  *********************************************************************/ | ||||
|  |  | |||
|  | @ -468,6 +468,27 @@ struct cpufreq_frequency_table { | |||
| 				    * order */ | ||||
| }; | ||||
| 
 | ||||
| bool cpufreq_next_valid(struct cpufreq_frequency_table **pos); | ||||
| 
 | ||||
| /*
 | ||||
|  * cpufreq_for_each_entry -	iterate over a cpufreq_frequency_table | ||||
|  * @pos:	the cpufreq_frequency_table * to use as a loop cursor. | ||||
|  * @table:	the cpufreq_frequency_table * to iterate over. | ||||
|  */ | ||||
| 
 | ||||
| #define cpufreq_for_each_entry(pos, table)	\ | ||||
| 	for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++) | ||||
| 
 | ||||
| /*
 | ||||
|  * cpufreq_for_each_valid_entry -     iterate over a cpufreq_frequency_table | ||||
|  *	excluding CPUFREQ_ENTRY_INVALID frequencies. | ||||
|  * @pos:        the cpufreq_frequency_table * to use as a loop cursor. | ||||
|  * @table:      the cpufreq_frequency_table * to iterate over. | ||||
|  */ | ||||
| 
 | ||||
| #define cpufreq_for_each_valid_entry(pos, table)	\ | ||||
| 	for (pos = table; cpufreq_next_valid(&pos); pos++) | ||||
| 
 | ||||
| int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy, | ||||
| 				    struct cpufreq_frequency_table *table); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Stratos Karafotis
				Stratos Karafotis