summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Langlais <philippe.langlais@linaro.org>2011-05-11 15:59:12 +0200
committerHenrik Aberg <henrik.aberg@stericsson.com>2011-05-18 09:40:17 +0200
commit2a765fda1bfa97cee2c00f3ec2df1563181c3f7e (patch)
tree6ac7a2b346904b235b58cb0463062dce0d46aff1
parent635aae9e6ba80fac36341055bef48a78d75d3329 (diff)
ux500: separate out cpufreq
Move the 8500-specific tables to a separate file so the the common code can be reused for 5500. ST-Ericsson Linux next: - ST-Ericsson ID: WP257121 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: I1ca8daef15b9b92a770fed3341f6984f6b88048f Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/22829 Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com> Reviewed-by: Martin PERSSON <martin.persson@stericsson.com> Reviewed-by: QATEST Conflicts: arch/arm/mach-ux500/pm/Makefile arch/arm/mach-ux500/pm/cpufreq.c
-rw-r--r--arch/arm/mach-ux500/pm/Makefile4
-rw-r--r--arch/arm/mach-ux500/pm/cpufreq-db8500.c53
-rw-r--r--arch/arm/mach-ux500/pm/cpufreq.c44
-rw-r--r--arch/arm/mach-ux500/pm/cpufreq.h12
4 files changed, 77 insertions, 36 deletions
diff --git a/arch/arm/mach-ux500/pm/Makefile b/arch/arm/mach-ux500/pm/Makefile
index 7f5f5930a0e..3d8d64bbc26 100644
--- a/arch/arm/mach-ux500/pm/Makefile
+++ b/arch/arm/mach-ux500/pm/Makefile
@@ -9,3 +9,7 @@ obj-$(CONFIG_UX500_CONTEXT) += context.o context_arm.o context-db8500.o contex
obj-$(CONFIG_U8500_CPUFREQ) += cpufreq.o
obj-$(CONFIG_UX500_SUSPEND) += suspend.o
obj-$(CONFIG_UX500_SUSPEND_DBG) += suspend_dbg.o
+
+ifeq ($(CONFIG_UX500_SOC_DB8500), y)
+obj-$(CONFIG_U8500_CPUFREQ) += cpufreq-db8500.o
+endif
diff --git a/arch/arm/mach-ux500/pm/cpufreq-db8500.c b/arch/arm/mach-ux500/pm/cpufreq-db8500.c
new file mode 100644
index 00000000000..c5f16a373ce
--- /dev/null
+++ b/arch/arm/mach-ux500/pm/cpufreq-db8500.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * License Terms: GNU General Public License v2
+ */
+
+#include <linux/kernel.h>
+#include <linux/cpufreq.h>
+
+#include <mach/prcmu-fw-api.h>
+
+#include "cpufreq.h"
+
+static struct cpufreq_frequency_table freq_table[] = {
+ [0] = {
+ .index = 0,
+ .frequency = 300000,
+ },
+ [1] = {
+ .index = 1,
+ .frequency = 600000,
+ },
+ [2] = {
+ /* Used for MAX_OPP, if available */
+ .index = 2,
+ .frequency = CPUFREQ_TABLE_END,
+ },
+ [3] = {
+ .index = 3,
+ .frequency = CPUFREQ_TABLE_END,
+ },
+};
+
+static enum arm_opp idx2opp[] = {
+ ARM_50_OPP,
+ ARM_100_OPP,
+ ARM_MAX_OPP
+};
+
+static int __init u8500_cpufreq_register(void)
+{
+ BUILD_BUG_ON(ARRAY_SIZE(idx2opp) + 1 != ARRAY_SIZE(freq_table));
+
+ if (cpu_is_u8500v2() && !prcmu_is_u8400()) {
+ freq_table[0].frequency = 400000;
+ freq_table[1].frequency = 800000;
+ if (prcmu_has_arm_maxopp())
+ freq_table[2].frequency = 1000000;
+ }
+
+ return ux500_cpufreq_register(freq_table, idx2opp);
+}
+device_initcall(u8500_cpufreq_register);
diff --git a/arch/arm/mach-ux500/pm/cpufreq.c b/arch/arm/mach-ux500/pm/cpufreq.c
index a4ec0653e32..407c59dc213 100644
--- a/arch/arm/mach-ux500/pm/cpufreq.c
+++ b/arch/arm/mach-ux500/pm/cpufreq.c
@@ -17,31 +17,8 @@
#include <mach/prcmu-fw-api.h>
#include <mach/prcmu-regs.h>
-static struct cpufreq_frequency_table freq_table[] = {
- [0] = {
- .index = 0,
- .frequency = 300000,
- },
- [1] = {
- .index = 1,
- .frequency = 600000,
- },
- [2] = {
- /* Used for MAX_OPP, if available */
- .index = 2,
- .frequency = CPUFREQ_TABLE_END,
- },
- [3] = {
- .index = 3,
- .frequency = CPUFREQ_TABLE_END,
- },
-};
-
-static enum arm_opp idx2opp[] = {
- ARM_50_OPP,
- ARM_100_OPP,
- ARM_MAX_OPP
-};
+static struct cpufreq_frequency_table *freq_table;
+static enum arm_opp *idx2opp;
static struct freq_attr *u8500_cpufreq_attr[] = {
&cpufreq_freq_attr_scaling_available_freqs,
@@ -108,15 +85,6 @@ static int __cpuinit u8500_cpufreq_init(struct cpufreq_policy *policy)
int res;
int i;
- BUILD_BUG_ON(ARRAY_SIZE(idx2opp) + 1 != ARRAY_SIZE(freq_table));
-
- if (cpu_is_u8500v2() && !prcmu_is_u8400()) {
- freq_table[0].frequency = 400000;
- freq_table[1].frequency = 800000;
- if (prcmu_has_arm_maxopp())
- freq_table[2].frequency = 1000000;
- }
-
/* get policy fields based on the table */
res = cpufreq_frequency_table_cpuinfo(policy, freq_table);
if (!res)
@@ -160,12 +128,16 @@ static struct cpufreq_driver u8500_cpufreq_driver = {
.attr = u8500_cpufreq_attr,
};
-static int __init u8500_cpufreq_register(void)
+int __init
+ux500_cpufreq_register(struct cpufreq_frequency_table *table,
+ enum arm_opp *idx2opplist)
{
+ freq_table = table;
+ idx2opp = idx2opplist;
+
if (cpu_is_u8500v1() || ux500_is_svp())
return -ENODEV;
pr_info("cpufreq for u8500 started\n");
return cpufreq_register_driver(&u8500_cpufreq_driver);
}
-device_initcall(u8500_cpufreq_register);
diff --git a/arch/arm/mach-ux500/pm/cpufreq.h b/arch/arm/mach-ux500/pm/cpufreq.h
new file mode 100644
index 00000000000..dc8744078f5
--- /dev/null
+++ b/arch/arm/mach-ux500/pm/cpufreq.h
@@ -0,0 +1,12 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2011
+ *
+ * License Terms: GNU General Public License v2
+ */
+#ifndef __UX500_PM_CPUFREQ_H
+#define __UX500_PM_CPUFREQ_H
+
+extern int ux500_cpufreq_register(struct cpufreq_frequency_table *freq_table,
+ enum arm_opp *idx2opp);
+
+#endif