Merge tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-exynos / mach-exynos5-dt.c
index 25f464cf7979c10e434ec3181668730c8ed17ea1..929de766d4906cdb8856da45baf47301528fb3ae 100644 (file)
@@ -10,6 +10,7 @@
 */
 
 #include <linux/of_platform.h>
+#include <linux/of_fdt.h>
 #include <linux/serial_core.h>
 #include <linux/memblock.h>
 #include <linux/of_fdt.h>
@@ -105,20 +106,35 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
        {},
 };
 
-static void __init exynos5250_dt_map_io(void)
+static const struct of_dev_auxdata exynos5440_auxdata_lookup[] __initconst = {
+       OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS5440_PA_UART0,
+                               "exynos4210-uart.0", NULL),
+       {},
+};
+
+static void __init exynos5_dt_map_io(void)
 {
+       unsigned long root = of_get_flat_dt_root();
+
        exynos_init_io(NULL, 0);
-       s3c24xx_init_clocks(24000000);
+
+       if (of_flat_dt_is_compatible(root, "samsung,exynos5250"))
+               s3c24xx_init_clocks(24000000);
 }
 
-static void __init exynos5250_dt_machine_init(void)
+static void __init exynos5_dt_machine_init(void)
 {
-       of_platform_populate(NULL, of_default_bus_match_table,
-                               exynos5250_auxdata_lookup, NULL);
+       if (of_machine_is_compatible("samsung,exynos5250"))
+               of_platform_populate(NULL, of_default_bus_match_table,
+                                    exynos5250_auxdata_lookup, NULL);
+       else if (of_machine_is_compatible("samsung,exynos5440"))
+               of_platform_populate(NULL, of_default_bus_match_table,
+                                    exynos5440_auxdata_lookup, NULL);
 }
 
-static char const *exynos5250_dt_compat[] __initdata = {
+static char const *exynos5_dt_compat[] __initdata = {
        "samsung,exynos5250",
+       "samsung,exynos5440",
        NULL
 };
 
@@ -137,12 +153,12 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
        /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
        .init_irq       = exynos5_init_irq,
        .smp            = smp_ops(exynos_smp_ops),
-       .map_io         = exynos5250_dt_map_io,
+       .map_io         = exynos5_dt_map_io,
        .handle_irq     = gic_handle_irq,
-       .init_machine   = exynos5250_dt_machine_init,
+       .init_machine   = exynos5_dt_machine_init,
        .init_late      = exynos_init_late,
        .timer          = &exynos4_timer,
-       .dt_compat      = exynos5250_dt_compat,
+       .dt_compat      = exynos5_dt_compat,
        .restart        = exynos5_restart,
        .reserve        = exynos5_reserve,
 MACHINE_END