Thread (25 messages) 25 messages, 5 authors, 2014-07-29
STALE4345d

[PATCH v7 5/6] ARM: Exynos: switch to using generic cpufreq driver for exynos4210/5250/5420

From: Tomasz Figa <hidden>
Date: 2014-07-19 13:27:35
Also in: linux-pm, linux-samsung-soc

On 14.07.2014 15:38, Thomas Abraham wrote:
quoted hunk ↗ jump to hunk
From: Thomas Abraham <redacted>

Remove the platform device instantiation for exynos cpufreq driver and add the
platform device for generic cpufreq drivers.

Cc: Kukjin Kim <redacted>
Signed-off-by: Thomas Abraham <redacted>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Amit Daniel Kachhap <redacted>
Tested-by: Arjun K.V <redacted>
---
 arch/arm/mach-exynos/exynos.c |   15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c
index 2a43a17..5028b35 100644
--- a/arch/arm/mach-exynos/exynos.c
+++ b/arch/arm/mach-exynos/exynos.c
@@ -183,7 +183,20 @@ void __init exynos_cpuidle_init(void)
 
 void __init exynos_cpufreq_init(void)
 {
-	platform_device_register_simple("exynos-cpufreq", -1, NULL, 0);
+	char *dev_name;
+
+	if (of_machine_is_compatible("samsung,exynos5440"))
+		return;
The original code registers the device unconditionally. Why Exynos5440
is excluded now?
+	if (of_machine_is_compatible("samsung,exynos5420"))
+		dev_name = "arm-bL-cpufreq-dt";
+	else
+		if (of_machine_is_compatible("samsung,exynos4412") ||
+			of_machine_is_compatible("samsung,exynos4212"))
+			dev_name = "exynos-cpufreq";
+		else
+			dev_name = "cpufreq-cpu0";
+
+	platform_device_register_simple(dev_name, -1, NULL, 0);
 }
How about rewriting this to:

static const struct of_device_id exynos_cpufreq_matches[] = {
	{ .compatible = "samsung,exynos5420",
			.data = "arm-bL-cpufreq-dt" },
	{ .compatible = "samsung,exynos5250",
			.data = "cpufreq-cpu0" },
	{ .compatible = "samsung,exynos4210",
			.data = "cpufreq-cpu0" },
	{ /* sentinel */ }
};

void __init exynos_cpufreq_init(void)
{
	struct device_node *root = of_find_node_by_path("/");
	const struct of_device_id *match;

	match = of_match_node(exynos_cpufreq_matches, root);
	if (!match) {
		platform_device_register_simple("exynos-cpufreq", -1,
						NULL, 0);
		return;
	}

	platform_device_register_simple(match->data, -1, NULL, 0);
}

This way it is much more readable and original behavior is preserved for
any SoCs not supported by new drivers.

Best regards,
Tomasz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help