73b10db577004bcf295048fb0f43bb09dc0e7506
[linux-3.10.git] / arch / arm / mach-tegra / board-ardbeg.c
1 /*
2  * arch/arm/mach-tegra/board-ardbeg.c
3  *
4  * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #include <linux/kernel.h>
20 #include <linux/init.h>
21 #include <linux/slab.h>
22 #include <linux/ctype.h>
23 #include <linux/platform_device.h>
24 #include <linux/clk.h>
25 #include <linux/gpio.h>
26 #include <linux/memblock.h>
27 #include <linux/of_platform.h>
28
29 #include <mach/irqs.h>
30
31 #include <asm/mach-types.h>
32 #include <asm/mach/arch.h>
33
34 #include "board.h"
35 #include "board-ardbeg.h"
36 #include "board-common.h"
37 #include "clock.h"
38 #include "common.h"
39 #include "devices.h"
40 #include "iomap.h"
41
42 static struct resource tegra_rtc_resources[] = {
43         [0] = {
44                 .start = TEGRA_RTC_BASE,
45                 .end = TEGRA_RTC_BASE + TEGRA_RTC_SIZE - 1,
46                 .flags = IORESOURCE_MEM,
47         },
48         [1] = {
49                 .start = INT_RTC,
50                 .end = INT_RTC,
51                 .flags = IORESOURCE_IRQ,
52         },
53 };
54
55 static struct platform_device tegra_rtc_device = {
56         .name = "tegra_rtc",
57         .id   = -1,
58         .resource = tegra_rtc_resources,
59         .num_resources = ARRAY_SIZE(tegra_rtc_resources),
60 };
61
62 static struct platform_device tegra_camera = {
63         .name = "tegra_camera",
64         .id = -1,
65 };
66
67 static struct platform_device *ardbeg_devices[] __initdata = {
68         &tegra_pmu_device,
69         &tegra_rtc_device,
70         &tegra_udc_device,
71 #if defined(CONFIG_TEGRA_IOVMM_SMMU) || defined(CONFIG_TEGRA_IOMMU_SMMU)
72         &tegra_smmu_device,
73 #endif
74         &tegra_camera,
75         &tegra_ahub_device,
76         &tegra_pcm_device,
77         &tegra_dam_device0,
78         &tegra_dam_device1,
79         &tegra_dam_device2,
80         &tegra_i2s_device0,
81         &tegra_i2s_device1,
82         &tegra_i2s_device2,
83         &tegra_i2s_device3,
84         &tegra_i2s_device4,
85         &tegra_spdif_device,
86         &spdif_dit_device,
87         &bluetooth_dit_device,
88         &baseband_dit_device,
89         &tegra_hda_device,
90 };
91
92 static __initdata struct tegra_clk_init_table ardbeg_clk_init_table[] = {
93         /* name         parent          rate            enabled */
94         { "pll_m",      NULL,           0,              false},
95         { NULL,         NULL,           0,              0},
96 };
97
98 static void __init tegra_ardbeg_init(void)
99 {
100         tegra_clk_init_from_table(ardbeg_clk_init_table);
101         tegra_enable_pinmux();
102         ardbeg_pinmux_init();
103         tegra_soc_device_init("ardbeg");
104         ardbeg_kbc_init();
105         ardbeg_panel_init();
106         platform_add_devices(ardbeg_devices, ARRAY_SIZE(ardbeg_devices));
107 }
108
109 static void __init tegra_ardbeg_dt_init(void)
110 {
111         tegra_ardbeg_init();
112
113         of_platform_populate(NULL,
114                 of_default_bus_match_table, NULL, NULL);
115 }
116
117 static void __init tegra_ardbeg_reserve(void)
118 {
119 }
120
121 static const char * const ardbeg_dt_board_compat[] = {
122         "nvidia,ardbeg",
123         NULL
124 };
125
126 DT_MACHINE_START(ARDBEG, "ardbeg")
127         .atag_offset    = 0x100,
128         .soc            = &tegra_soc_desc,
129         .map_io         = tegra_map_common_io,
130         .reserve        = tegra_ardbeg_reserve,
131 #ifdef CONFIG_ARCH_TEGRA_11x_SOC
132         .init_early     = tegra11x_init_early,
133 #else
134         .init_early     = tegra12x_init_early,
135 #endif
136         .init_irq       = tegra_dt_init_irq,
137         .init_time      = tegra_init_timer,
138         .init_machine   = tegra_ardbeg_dt_init,
139         .restart        = tegra_assert_system_reset,
140         .dt_compat      = ardbeg_dt_board_compat,
141 MACHINE_END