Blame view

kernel/linux-imx6_3.14.28/arch/arm/mach-exynos/mach-exynos5-dt.c 2.19 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  /*
   * SAMSUNG EXYNOS5250 Flattened Device Tree enabled machine
   *
   * Copyright (c) 2012 Samsung Electronics Co., Ltd.
   *		http://www.samsung.com
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
  */
  
  #include <linux/of_platform.h>
  #include <linux/of_fdt.h>
  #include <linux/io.h>
  
  #include <asm/mach/arch.h>
  #include <plat/mfc.h>
  
  #include "common.h"
  #include "regs-pmu.h"
  
  static void __init exynos5_dt_machine_init(void)
  {
  	struct device_node *i2c_np;
  	const char *i2c_compat = "samsung,s3c2440-i2c";
  	unsigned int tmp;
  
  	/*
  	 * Exynos5's legacy i2c controller and new high speed i2c
  	 * controller have muxed interrupt sources. By default the
  	 * interrupts for 4-channel HS-I2C controller are enabled.
  	 * If node for first four channels of legacy i2c controller
  	 * are available then re-configure the interrupts via the
  	 * system register.
  	 */
  	for_each_compatible_node(i2c_np, NULL, i2c_compat) {
  		if (of_device_is_available(i2c_np)) {
  			if (of_alias_get_id(i2c_np, "i2c") < 4) {
  				tmp = readl(EXYNOS5_SYS_I2C_CFG);
  				writel(tmp & ~(0x1 << of_alias_get_id(i2c_np, "i2c")),
  						EXYNOS5_SYS_I2C_CFG);
  			}
  		}
  	}
  
  	exynos_cpuidle_init();
  	exynos_cpufreq_init();
  
  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
  }
  
  static char const *exynos5_dt_compat[] __initdata = {
  	"samsung,exynos5250",
  	"samsung,exynos5420",
  	"samsung,exynos5440",
  	NULL
  };
  
  static void __init exynos5_reserve(void)
  {
  #ifdef CONFIG_S5P_DEV_MFC
  	struct s5p_mfc_dt_meminfo mfc_mem;
  
  	/* Reserve memory for MFC only if it's available */
  	mfc_mem.compatible = "samsung,mfc-v6";
  	if (of_scan_flat_dt(s5p_fdt_find_mfc_mem, &mfc_mem))
  		s5p_mfc_reserve_mem(mfc_mem.roff, mfc_mem.rsize, mfc_mem.loff,
  				mfc_mem.lsize);
  #endif
  }
  
  DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
  	/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
  	.smp		= smp_ops(exynos_smp_ops),
  	.map_io		= exynos_init_io,
  	.init_machine	= exynos5_dt_machine_init,
  	.init_late	= exynos_init_late,
  	.dt_compat	= exynos5_dt_compat,
  	.restart        = exynos5_restart,
  	.reserve	= exynos5_reserve,
  MACHINE_END