Merge branch 'cpufreq-fixes' of git://git.linaro.org/people/vireshk/linux into pm-cpufreq
Pull ARM cpufreq fixes from Viresh Kumar. * 'cpufreq-fixes' of git://git.linaro.org/people/vireshk/linux: cpufreq: fix EXYNOS drivers selection cpufreq: exynos5440: Fix to skip when new frequency same as current
This commit is contained in:
commit
361c2cb54a
4 changed files with 48 additions and 13 deletions
|
@ -17,37 +17,47 @@ config ARM_DT_BL_CPUFREQ
|
|||
big.LITTLE platform. This gets frequency tables from DT.
|
||||
|
||||
config ARM_EXYNOS_CPUFREQ
|
||||
bool "SAMSUNG EXYNOS SoCs"
|
||||
depends on ARCH_EXYNOS
|
||||
bool
|
||||
select CPU_FREQ_TABLE
|
||||
default y
|
||||
help
|
||||
This adds the CPUFreq driver common part for Samsung
|
||||
EXYNOS SoCs.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ARM_EXYNOS4210_CPUFREQ
|
||||
def_bool CPU_EXYNOS4210
|
||||
bool "SAMSUNG EXYNOS4210"
|
||||
depends on CPU_EXYNOS4210
|
||||
default y
|
||||
select ARM_EXYNOS_CPUFREQ
|
||||
help
|
||||
This adds the CPUFreq driver for Samsung EXYNOS4210
|
||||
SoC (S5PV310 or S5PC210).
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ARM_EXYNOS4X12_CPUFREQ
|
||||
def_bool (SOC_EXYNOS4212 || SOC_EXYNOS4412)
|
||||
bool "SAMSUNG EXYNOS4x12"
|
||||
depends on (SOC_EXYNOS4212 || SOC_EXYNOS4412)
|
||||
default y
|
||||
select ARM_EXYNOS_CPUFREQ
|
||||
help
|
||||
This adds the CPUFreq driver for Samsung EXYNOS4X12
|
||||
SoC (EXYNOS4212 or EXYNOS4412).
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ARM_EXYNOS5250_CPUFREQ
|
||||
def_bool SOC_EXYNOS5250
|
||||
bool "SAMSUNG EXYNOS5250"
|
||||
depends on SOC_EXYNOS5250
|
||||
default y
|
||||
select ARM_EXYNOS_CPUFREQ
|
||||
help
|
||||
This adds the CPUFreq driver for Samsung EXYNOS5250
|
||||
SoC.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ARM_EXYNOS5440_CPUFREQ
|
||||
def_bool SOC_EXYNOS5440
|
||||
bool "SAMSUNG EXYNOS5440"
|
||||
depends on SOC_EXYNOS5440
|
||||
depends on HAVE_CLK && PM_OPP && OF
|
||||
default y
|
||||
select CPU_FREQ_TABLE
|
||||
help
|
||||
This adds the CPUFreq driver for Samsung EXYNOS5440
|
||||
|
@ -55,6 +65,8 @@ config ARM_EXYNOS5440_CPUFREQ
|
|||
different than previous exynos controllers so not using
|
||||
the common exynos framework.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ARM_HIGHBANK_CPUFREQ
|
||||
tristate "Calxeda Highbank-based"
|
||||
depends on ARCH_HIGHBANK
|
||||
|
|
|
@ -332,7 +332,6 @@ static int __init exynos_cpufreq_init(void)
|
|||
regulator_put(arm_regulator);
|
||||
err_vdd_arm:
|
||||
kfree(exynos_info);
|
||||
pr_debug("%s: failed initialization\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
late_initcall(exynos_cpufreq_init);
|
||||
|
|
|
@ -43,6 +43,27 @@ struct exynos_dvfs_info {
|
|||
bool (*need_apll_change)(unsigned int, unsigned int);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ARM_EXYNOS4210_CPUFREQ
|
||||
extern int exynos4210_cpufreq_init(struct exynos_dvfs_info *);
|
||||
#else
|
||||
static inline int exynos4210_cpufreq_init(struct exynos_dvfs_info *info)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_ARM_EXYNOS4X12_CPUFREQ
|
||||
extern int exynos4x12_cpufreq_init(struct exynos_dvfs_info *);
|
||||
#else
|
||||
static inline int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_ARM_EXYNOS5250_CPUFREQ
|
||||
extern int exynos5250_cpufreq_init(struct exynos_dvfs_info *);
|
||||
#else
|
||||
static inline int exynos5250_cpufreq_init(struct exynos_dvfs_info *info)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -238,6 +238,9 @@ static int exynos_target(struct cpufreq_policy *policy,
|
|||
freqs.old = dvfs_info->cur_frequency;
|
||||
freqs.new = freq_table[index].frequency;
|
||||
|
||||
if (freqs.old == freqs.new)
|
||||
goto out;
|
||||
|
||||
cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
|
||||
|
||||
/* Set the target frequency in all C0_3_PSTATE register */
|
||||
|
|
Loading…
Reference in a new issue