cpufreq: fix EXYNOS drivers selection
authorBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Fri, 9 Aug 2013 12:04:55 +0000 (14:04 +0200)
committerViresh Kumar <viresh.kumar@linaro.org>
Mon, 12 Aug 2013 06:30:21 +0000 (12:00 +0530)
* remove superfluous pr_debug() call from exynos_cpufreq_init()
  (init errors are always logged anyway)
* add dummy per-SoC type init functions to exynos-cpufreq.h
* make per-SoC type cpufreq config options selectable
* make CONFIG_ARM_EXYNOS_CPUFREQ config option invisible to user and
  automatically enable it when needed

This patch fixes following issues:
* EXYNOS per-SoC type cpufreq support (i.e. exynos4210-cpufreq.c) being
  always built if given SoC support was enabled (i.e. CPU_EXYNOS4210),
  even if common EXYNOS cpufreq support was disabled
* inability to select cpufreq for each SoC type separately (it could
  be only enabled/disabled for all SoCs for which support was enabled)
* EXYNOS5440 cpufreq support was always enabled when EXYNOS5440
  support was enabled and couldn't be disabled

Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/Kconfig.arm
drivers/cpufreq/exynos-cpufreq.c
drivers/cpufreq/exynos-cpufreq.h

index de4d5d93c3fdc826ae013c6f7e0652b13e550f2d..0fa204b244bd2df52974a50fc4290e9fa77d287c 100644 (file)
@@ -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
index 0d32f02ef4d644e5ec915b9205fd5fdf929b30b0..51cb1168fa988d05952a7076939a69d4a5778f88 100644 (file)
@@ -332,7 +332,6 @@ err_cpufreq:
        regulator_put(arm_regulator);
 err_vdd_arm:
        kfree(exynos_info);
-       pr_debug("%s: failed initialization\n", __func__);
        return -EINVAL;
 }
 late_initcall(exynos_cpufreq_init);
index 92b852ee5ddcca037bcbf9d2376ff3a4cb3a62c2..7f25cee8cec275692ee685a8b9bbccaf501b6a09 100644 (file)
@@ -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