@@ -1042,30 +1042,36 @@ static unsigned long omap3_clkoutx2_recalc(struct clk *clk)
#if defined(CONFIG_ARCH_OMAP3)
#ifdef CONFIG_CPU_FREQ
-static struct cpufreq_frequency_table freq_table[MAX_VDD1_OPP+1];
+
+static struct cpufreq_frequency_table *freq_table;
void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table)
{
- struct omap_opp *prcm;
int i = 0;
+ u8 opp_num;
+ struct omap_opp *opp = NULL;
+ unsigned long freq = ULONG_MAX;
- if (!mpu_opps)
+ if (!mpu_opps || opp_get_opp_count(&opp_num, mpu_opps)) {
+ pr_warning("%s: failed to initialize frequency"
+ "table\n", __func__);
return;
-
- prcm = mpu_opps + MAX_VDD1_OPP;
- for (; prcm->rate; prcm--) {
- freq_table[i].index = i;
- freq_table[i].frequency = prcm->rate / 1000;
- i++;
}
- if (i == 0) {
- printk(KERN_WARNING "%s: failed to initialize frequency \
- table\n",
- __func__);
+ freq_table = kmalloc(sizeof(struct cpufreq_frequency_table) *
+ (opp_num + 1), GFP_KERNEL);
+ if (!freq_table) {
+ pr_warning("%s: failed to allocate frequency"
+ "table\n", __func__);
return;
}
+ while (!opp_get_lower_opp(&opp, &freq, mpu_opps)) {
+ freq_table[i].index = i;
+ freq_table[i].frequency = freq / 1000;
+ i++;
+ }
+
freq_table[i].index = i;
freq_table[i].frequency = CPUFREQ_TABLE_END;