Loading Documentation/cpu-freq/cpu-drivers.txt +19 −0 Original line number Diff line number Diff line Loading @@ -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 = ... } arch/arm/mach-davinci/da850.c +5 −4 Original line number Diff line number Diff line Loading @@ -1092,20 +1092,21 @@ int da850_register_cpufreq(char *async_clk) static int da850_round_armrate(struct clk *clk, unsigned long rate) { int i, ret = 0, diff; int ret = 0, diff; unsigned int best = (unsigned int) -1; struct cpufreq_frequency_table *table = cpufreq_info.freq_table; struct cpufreq_frequency_table *pos; rate /= 1000; /* convert to kHz */ for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) { diff = table[i].frequency - rate; cpufreq_for_each_entry(pos, table) { diff = pos->frequency - rate; if (diff < 0) diff = -diff; if (diff < best) { best = diff; ret = table[i].frequency; ret = pos->frequency; } } Loading arch/mips/loongson/lemote-2f/clock.c +5 −11 Original line number Diff line number Diff line Loading @@ -91,9 +91,9 @@ EXPORT_SYMBOL(clk_put); int clk_set_rate(struct clk *clk, unsigned long rate) { struct cpufreq_frequency_table *pos; int ret = 0; int regval; int i; if (likely(clk->ops && clk->ops->set_rate)) { unsigned long flags; Loading @@ -106,22 +106,16 @@ int clk_set_rate(struct clk *clk, unsigned long rate) if (unlikely(clk->flags & CLK_RATE_PROPAGATES)) propagate_rate(clk); for (i = 0; loongson2_clockmod_table[i].frequency != CPUFREQ_TABLE_END; i++) { if (loongson2_clockmod_table[i].frequency == CPUFREQ_ENTRY_INVALID) continue; if (rate == loongson2_clockmod_table[i].frequency) cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table) if (rate == pos->frequency) break; } if (rate != loongson2_clockmod_table[i].frequency) if (rate != pos->frequency) return -ENOTSUPP; clk->rate = rate; regval = LOONGSON_CHIPCFG0; regval = (regval & ~0x7) | (loongson2_clockmod_table[i].driver_data - 1); regval = (regval & ~0x7) | (pos->driver_data - 1); LOONGSON_CHIPCFG0 = regval; return ret; Loading drivers/cpufreq/acpi-cpufreq.c +4 −5 Original line number Diff line number Diff line Loading @@ -213,7 +213,7 @@ static unsigned extract_io(u32 value, struct acpi_cpufreq_data *data) static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) { int i; struct cpufreq_frequency_table *pos; struct acpi_processor_performance *perf; if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) Loading @@ -223,10 +223,9 @@ static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) perf = data->acpi_data; for (i = 0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { if (msr == perf->states[data->freq_table[i].driver_data].status) return data->freq_table[i].frequency; } cpufreq_for_each_entry(pos, data->freq_table) if (msr == perf->states[pos->driver_data].status) return pos->frequency; return data->freq_table[0].frequency; } Loading drivers/cpufreq/arm_big_little.c +8 −8 Original line number Diff line number Diff line Loading @@ -226,22 +226,22 @@ static inline u32 get_table_count(struct cpufreq_frequency_table *table) /* get the minimum frequency in the cpufreq_frequency_table */ static inline u32 get_table_min(struct cpufreq_frequency_table *table) { int i; struct cpufreq_frequency_table *pos; uint32_t min_freq = ~0; for (i = 0; (table[i].frequency != CPUFREQ_TABLE_END); i++) if (table[i].frequency < min_freq) min_freq = table[i].frequency; cpufreq_for_each_entry(pos, table) if (pos->frequency < min_freq) min_freq = pos->frequency; return min_freq; } /* get the maximum frequency in the cpufreq_frequency_table */ static inline u32 get_table_max(struct cpufreq_frequency_table *table) { int i; struct cpufreq_frequency_table *pos; uint32_t max_freq = 0; for (i = 0; (table[i].frequency != CPUFREQ_TABLE_END); i++) if (table[i].frequency > max_freq) max_freq = table[i].frequency; cpufreq_for_each_entry(pos, table) if (pos->frequency > max_freq) max_freq = pos->frequency; return max_freq; } Loading Loading
Documentation/cpu-freq/cpu-drivers.txt +19 −0 Original line number Diff line number Diff line Loading @@ -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 = ... }
arch/arm/mach-davinci/da850.c +5 −4 Original line number Diff line number Diff line Loading @@ -1092,20 +1092,21 @@ int da850_register_cpufreq(char *async_clk) static int da850_round_armrate(struct clk *clk, unsigned long rate) { int i, ret = 0, diff; int ret = 0, diff; unsigned int best = (unsigned int) -1; struct cpufreq_frequency_table *table = cpufreq_info.freq_table; struct cpufreq_frequency_table *pos; rate /= 1000; /* convert to kHz */ for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) { diff = table[i].frequency - rate; cpufreq_for_each_entry(pos, table) { diff = pos->frequency - rate; if (diff < 0) diff = -diff; if (diff < best) { best = diff; ret = table[i].frequency; ret = pos->frequency; } } Loading
arch/mips/loongson/lemote-2f/clock.c +5 −11 Original line number Diff line number Diff line Loading @@ -91,9 +91,9 @@ EXPORT_SYMBOL(clk_put); int clk_set_rate(struct clk *clk, unsigned long rate) { struct cpufreq_frequency_table *pos; int ret = 0; int regval; int i; if (likely(clk->ops && clk->ops->set_rate)) { unsigned long flags; Loading @@ -106,22 +106,16 @@ int clk_set_rate(struct clk *clk, unsigned long rate) if (unlikely(clk->flags & CLK_RATE_PROPAGATES)) propagate_rate(clk); for (i = 0; loongson2_clockmod_table[i].frequency != CPUFREQ_TABLE_END; i++) { if (loongson2_clockmod_table[i].frequency == CPUFREQ_ENTRY_INVALID) continue; if (rate == loongson2_clockmod_table[i].frequency) cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table) if (rate == pos->frequency) break; } if (rate != loongson2_clockmod_table[i].frequency) if (rate != pos->frequency) return -ENOTSUPP; clk->rate = rate; regval = LOONGSON_CHIPCFG0; regval = (regval & ~0x7) | (loongson2_clockmod_table[i].driver_data - 1); regval = (regval & ~0x7) | (pos->driver_data - 1); LOONGSON_CHIPCFG0 = regval; return ret; Loading
drivers/cpufreq/acpi-cpufreq.c +4 −5 Original line number Diff line number Diff line Loading @@ -213,7 +213,7 @@ static unsigned extract_io(u32 value, struct acpi_cpufreq_data *data) static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) { int i; struct cpufreq_frequency_table *pos; struct acpi_processor_performance *perf; if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) Loading @@ -223,10 +223,9 @@ static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) perf = data->acpi_data; for (i = 0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { if (msr == perf->states[data->freq_table[i].driver_data].status) return data->freq_table[i].frequency; } cpufreq_for_each_entry(pos, data->freq_table) if (msr == perf->states[pos->driver_data].status) return pos->frequency; return data->freq_table[0].frequency; } Loading
drivers/cpufreq/arm_big_little.c +8 −8 Original line number Diff line number Diff line Loading @@ -226,22 +226,22 @@ static inline u32 get_table_count(struct cpufreq_frequency_table *table) /* get the minimum frequency in the cpufreq_frequency_table */ static inline u32 get_table_min(struct cpufreq_frequency_table *table) { int i; struct cpufreq_frequency_table *pos; uint32_t min_freq = ~0; for (i = 0; (table[i].frequency != CPUFREQ_TABLE_END); i++) if (table[i].frequency < min_freq) min_freq = table[i].frequency; cpufreq_for_each_entry(pos, table) if (pos->frequency < min_freq) min_freq = pos->frequency; return min_freq; } /* get the maximum frequency in the cpufreq_frequency_table */ static inline u32 get_table_max(struct cpufreq_frequency_table *table) { int i; struct cpufreq_frequency_table *pos; uint32_t max_freq = 0; for (i = 0; (table[i].frequency != CPUFREQ_TABLE_END); i++) if (table[i].frequency > max_freq) max_freq = table[i].frequency; cpufreq_for_each_entry(pos, table) if (pos->frequency > max_freq) max_freq = pos->frequency; return max_freq; } Loading