diff options
author | Lukasz Majewski <l.majewski@samsung.com> | 2014-02-10 15:42:51 +0100 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-11-18 11:46:56 +0900 |
commit | 5591f492596a308fcdd83f9bb68c4ad2e128e445 (patch) | |
tree | 59cff520de9addb63852abce9d234069036625e5 /drivers | |
parent | 860d0f2b9d4aaeb3d608a43b86f598e923cb677d (diff) | |
download | linux-3.10-5591f492596a308fcdd83f9bb68c4ad2e128e445.tar.gz linux-3.10-5591f492596a308fcdd83f9bb68c4ad2e128e445.tar.bz2 linux-3.10-5591f492596a308fcdd83f9bb68c4ad2e128e445.zip |
cpufreq: boost: Provide support for BOOST on linux-3.10-tizen
This code reads from device tree the boost_freq attribute and properly
modify the cpufreq table to support BOOST framework.
This attribute is only read when CONFIG_CPU_FREQ_BOOST_SW flag is set.
Change-Id: I16fcba69b16c29434e3ec1a8a0ef1bc8bdebc0ca
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/cpufreq/exynos-cpufreq.c | 38 | ||||
-rw-r--r-- | drivers/cpufreq/exynos-cpufreq.h | 2 | ||||
-rw-r--r-- | drivers/cpufreq/exynos4x12-cpufreq.c | 4 |
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; |