#include <linux/mfd/abx500/ab8500.h>
 #include <linux/regulator/db8500-prcmu.h>
 #include <linux/regulator/machine.h>
-#include <linux/cpufreq.h>
 #include <linux/platform_data/ux500_wdt.h>
 #include <linux/platform_data/db8500_thermal.h>
 #include "dbx500-prcmu-regs.h"
        return rounded_rate;
 }
 
-/* CPU FREQ table, may be changed due to if MAX_OPP is supported. */
-static struct cpufreq_frequency_table db8500_cpufreq_table[] = {
-       { .frequency = 200000, .driver_data = ARM_EXTCLK,},
-       { .frequency = 400000, .driver_data = ARM_50_OPP,},
-       { .frequency = 800000, .driver_data = ARM_100_OPP,},
-       { .frequency = CPUFREQ_TABLE_END,}, /* To be used for MAX_OPP. */
-       { .frequency = CPUFREQ_TABLE_END,},
+static const unsigned long armss_freqs[] = {
+       200000000,
+       400000000,
+       800000000,
+       998400000
 };
 
 static long round_armss_rate(unsigned long rate)
 {
-       struct cpufreq_frequency_table *pos;
-       long freq = 0;
-
-       /* cpufreq table frequencies is in KHz. */
-       rate = rate / 1000;
+       unsigned long freq = 0;
+       int i;
 
        /* Find the corresponding arm opp from the cpufreq table. */
-       cpufreq_for_each_entry(pos, db8500_cpufreq_table) {
-               freq = pos->frequency;
-               if (freq == rate)
+       for (i = 0; i < ARRAY_SIZE(armss_freqs); i++) {
+               freq = armss_freqs[i];
+               if (rate <= freq)
                        break;
        }
 
        /* Return the last valid value, even if a match was not found. */
-       return freq * 1000;
+       return freq;
 }
 
 #define MIN_PLL_VCO_RATE 600000000ULL
 
 static int set_armss_rate(unsigned long rate)
 {
-       struct cpufreq_frequency_table *pos;
-
-       /* cpufreq table frequencies is in KHz. */
-       rate = rate / 1000;
+       unsigned long freq;
+       u8 opps[] = { ARM_EXTCLK, ARM_50_OPP, ARM_100_OPP, ARM_MAX_OPP };
+       int i;
 
        /* Find the corresponding arm opp from the cpufreq table. */
-       cpufreq_for_each_entry(pos, db8500_cpufreq_table)
-               if (pos->frequency == rate)
+       for (i = 0; i < ARRAY_SIZE(armss_freqs); i++) {
+               freq = armss_freqs[i];
+               if (rate == freq)
                        break;
+       }
 
-       if (pos->frequency != rate)
+       if (rate != freq)
                return -EINVAL;
 
        /* Set the new arm opp. */
-       return db8500_prcmu_set_arm_opp(pos->driver_data);
+       pr_debug("SET ARM OPP 0x%02x\n", opps[i]);
+       return db8500_prcmu_set_arm_opp(opps[i]);
 }
 
 static int set_plldsi_rate(unsigned long rate)
                .platform_data = &db8500_regulators,
                .pdata_size = sizeof(db8500_regulators),
        },
-       {
-               .name = "cpufreq-ux500",
-               .of_compatible = "stericsson,cpufreq-ux500",
-               .platform_data = &db8500_cpufreq_table,
-               .pdata_size = sizeof(db8500_cpufreq_table),
-       },
        {
                .name = "cpuidle-dbx500",
                .of_compatible = "stericsson,cpuidle-dbx500",
        },
 };
 
-static void db8500_prcmu_update_cpufreq(void)
-{
-       if (prcmu_has_arm_maxopp()) {
-               db8500_cpufreq_table[3].frequency = 1000000;
-               db8500_cpufreq_table[3].driver_data = ARM_MAX_OPP;
-       }
-}
-
 static int db8500_prcmu_register_ab8500(struct device *parent)
 {
        struct device_node *np;
 
        prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
 
-       db8500_prcmu_update_cpufreq();
-
        err = mfd_add_devices(&pdev->dev, 0, common_prcmu_devs,
                              ARRAY_SIZE(common_prcmu_devs), NULL, 0, db8500_irq_domain);
        if (err) {