summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cpufreq/exynos-cpufreq.c38
-rw-r--r--drivers/cpufreq/exynos-cpufreq.h2
-rw-r--r--drivers/cpufreq/exynos4x12-cpufreq.c4
3 files changed, 42 insertions, 2 deletions
diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c
index 249d19b7488..0ecb7c918ce 100644
--- a/drivers/cpufreq/exynos-cpufreq.c
+++ b/drivers/cpufreq/exynos-cpufreq.c
@@ -288,6 +288,36 @@ static struct cpufreq_driver exynos_driver = {
/* Device Tree Support for CPU freq */
+int exynos_of_parse_boost(struct exynos_dvfs_info *info,
+ const char *property_name)
+{
+ struct cpufreq_frequency_table *ft = info->freq_table;
+ struct device_node *node = info->dev->of_node;
+ unsigned int boost_freq;
+
+ if (of_property_read_u32(node, property_name, &boost_freq)) {
+ pr_err("%s: Property: %s not found\n", __func__,
+ property_name);
+ return -ENODEV;
+ }
+
+ /*
+ * Adjust the BOOST setting code to the current cpufreq code
+ * Now we have static table definitions for frequencies, dividers
+ * and PLL parameters (like P M S)
+ *
+ * In the current cpufreq code base only the change of one entry at
+ * frequency table is required.
+ */
+
+ ft[0].index = CPUFREQ_BOOST_FREQ;
+ ft[0].frequency = boost_freq;
+
+ pr_debug("%s: BOOST frequency: %d\n", __func__, ft[0].frequency);
+
+ return 0;
+}
+
struct cpufreq_frequency_table *exynos_of_parse_freq_table(
struct exynos_dvfs_info *info, const char *property_name)
{
@@ -326,8 +356,12 @@ struct cpufreq_frequency_table *exynos_of_parse_freq_table(
goto err_of_f_tab;
}
- /* Here + 2 is required for CPUFREQ_ENTRY_INVALID and
- CPUFREQ_TABLE_END */
+ /*
+ * Here + 2 is required for CPUFREQ_ENTRY_INVALID and
+ * CPUFREQ_TABLE_END
+ *
+ * Number of those entries must correspond to the apll_freq_4412 table
+ */
ft = kzalloc(sizeof(struct cpufreq_frequency_table) * (num + 2),
GFP_KERNEL);
if (!ft) {
diff --git a/drivers/cpufreq/exynos-cpufreq.h b/drivers/cpufreq/exynos-cpufreq.h
index 12b2b66b8b4..cb08d2850d6 100644
--- a/drivers/cpufreq/exynos-cpufreq.h
+++ b/drivers/cpufreq/exynos-cpufreq.h
@@ -51,3 +51,5 @@ struct cpufreq_frequency_table *exynos_of_parse_freq_table(
struct exynos_dvfs_info *info, const char *property_name);
unsigned int *exynos_of_parse_volt_table(struct exynos_dvfs_info *info,
const char *property_name);
+int exynos_of_parse_boost(struct exynos_dvfs_info *info,
+ const char *property_name);
diff --git a/drivers/cpufreq/exynos4x12-cpufreq.c b/drivers/cpufreq/exynos4x12-cpufreq.c
index 410d087eff4..e92d19be2c8 100644
--- a/drivers/cpufreq/exynos4x12-cpufreq.c
+++ b/drivers/cpufreq/exynos4x12-cpufreq.c
@@ -203,6 +203,10 @@ int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info)
info->freq_table = exynos_of_parse_freq_table(info, "freq_table");
if (!info->freq_table)
info->freq_table = exynos4x12_freq_table;
+#ifdef CONFIG_CPU_FREQ_BOOST_SW
+ else
+ exynos_of_parse_boost(info, "boost_freq");
+#endif
info->set_freq = exynos4x12_set_frequency;