The following patch changes setopp to use bus throughput as its input instead
of the OPP number. The bus throughput to OPP mapping table is part of the
vdd2_opp resource, which makes it difficult to do this mapping on a higher
level. Comments on other/better approaches welcome !
Cheers,
Peter.
Signed-off-by: Peter 'p2' De Schrijver <[EMAIL PROTECTED]>
---
arch/arm/mach-omap2/resource34xx.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-omap2/resource34xx.c
b/arch/arm/mach-omap2/resource34xx.c
index 6364818..857cb14 100644
--- a/arch/arm/mach-omap2/resource34xx.c
+++ b/arch/arm/mach-omap2/resource34xx.c
@@ -164,6 +164,7 @@ int set_opp(struct shared_resource *resp, u32 target_level)
unsigned long mpu_freq, mpu_old_freq, l3_freq, t_opp;
int ind;
struct cpufreq_freqs freqs_notify;
+ struct bus_throughput_db *tput;
if (resp->curr_level == target_level)
return 0;
@@ -199,15 +200,23 @@ int set_opp(struct shared_resource *resp, u32
target_level)
cpufreq_notify_transition(&freqs_notify, CPUFREQ_POSTCHANGE);
#endif
} else if (strcmp(resp->name, "vdd2_opp") == 0) {
+ int target_opp;
+
+ tput = (struct bus_throughput_db *)(resp->resource_data);
+ for(target_opp=0; target_opp < MAX_VDD2_OPP; target_opp++) {
+ if (tput->throughput[target_opp] >= target_level)
+ break;
+ }
+
l3_freq = get_freq(l3_opps + MAX_VDD2_OPP,
- target_level);
+ target_opp);
t_opp = ID_VDD(PRCM_VDD2) |
- ID_OPP_NO(l3_opps[target_level].opp_id);
- if (resp->curr_level > target_level) {
+ ID_OPP_NO(l3_opps[target_opp].opp_id);
+ if (resp->curr_level > target_opp) {
/* Scale Frequency and then voltage */
clk_set_rate(vdd2_clk, l3_freq);
sr_voltagescale_vcbypass(t_opp,
- l3_opps[target_level].vsel);
+ l3_opps[target_opp].vsel);
} else {
/* Scale Voltage and then frequency */
sr_voltagescale_vcbypass(t_opp,
--
1.5.6.3
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html