arm: tegra: add sdhci device registration for ardbeg
[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_sdhci_init();
106         ardbeg_panel_init();
107         platform_add_devices(ardbeg_devices, ARRAY_SIZE(ardbeg_devices));
108 }
109
110 static void __init tegra_ardbeg_dt_init(void)
111 {
112         tegra_ardbeg_init();
113
114         of_platform_populate(NULL,
115                 of_default_bus_match_table, NULL, NULL);
116 }
117
118 static void __init tegra_ardbeg_reserve(void)
119 {
120 }
121
122 static const char * const ardbeg_dt_board_compat[] = {
123         "nvidia,ardbeg",
124         NULL
125 };
126
127 DT_MACHINE_START(ARDBEG, "ardbeg")
128         .atag_offset    = 0x100,
129         .soc            = &tegra_soc_desc,
130         .map_io         = tegra_map_common_io,
131         .reserve        = tegra_ardbeg_reserve,
132 #ifdef CONFIG_ARCH_TEGRA_11x_SOC
133         .init_early     = tegra11x_init_early,
134 #else
135         .init_early     = tegra12x_init_early,
136 #endif
137         .init_irq       = tegra_dt_init_irq,
138         .init_time      = tegra_init_timer,
139         .init_machine   = tegra_ardbeg_dt_init,
140         .restart        = tegra_assert_system_reset,
141         .dt_compat      = ardbeg_dt_board_compat,
142 MACHINE_END