[ARM] tegra: add EHCI and UDC controllers to devices.c
[linux-2.6.git] / arch / arm / mach-tegra / board-ventana.c
1 /*
2  * arch/arm/mach-tegra/board-ventana.c
3  *
4  * Copyright (c) 2010, NVIDIA Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20
21 #include <linux/kernel.h>
22 #include <linux/init.h>
23 #include <linux/slab.h>
24 #include <linux/ctype.h>
25 #include <linux/platform_device.h>
26 #include <linux/clk.h>
27 #include <linux/serial_8250.h>
28 #include <linux/i2c.h>
29 #include <linux/pda_power.h>
30 #include <linux/dma-mapping.h>
31 #include <linux/delay.h>
32
33 #include <mach/iomap.h>
34 #include <mach/irqs.h>
35 #include <mach/pinmux.h>
36 #include <mach/iomap.h>
37 #include <mach/io.h>
38
39 #include <asm/mach-types.h>
40 #include <asm/mach/arch.h>
41
42 #include "board.h"
43 #include "clock.h"
44
45 static struct plat_serial8250_port debug_uart_platform_data[] = {
46         {
47                 .membase        = IO_ADDRESS(TEGRA_UARTD_BASE),
48                 .mapbase        = TEGRA_UARTD_BASE,
49                 .irq            = INT_UARTD,
50                 .flags          = UPF_BOOT_AUTOCONF,
51                 .iotype         = UPIO_MEM,
52                 .regshift       = 2,
53                 .uartclk        = 216000000,
54         }, {
55                 .flags          = 0,
56         }
57 };
58
59 static struct platform_device debug_uart = {
60         .name = "serial8250",
61         .id = PLAT8250_DEV_PLATFORM,
62         .dev = {
63                 .platform_data = debug_uart_platform_data,
64         },
65 };
66
67 static __initdata struct tegra_clk_init_table ventana_clk_init_table[] = {
68         /* name         parent          rate            enabled */
69         { "uartd",      "pll_p",        216000000,      true},
70         { "pll_m",      "clk_m",        600000000,      true},
71         { "emc",        "pll_m",        600000000,      true},
72         { NULL,         NULL,           0,              0},
73 };
74
75 /* PDA power */
76 static struct pda_power_pdata pda_power_pdata = {
77 };
78
79 static struct platform_device pda_power_device = {
80         .name   = "pda_power",
81         .id     = -1,
82         .dev    = {
83                 .platform_data  = &pda_power_pdata,
84         },
85 };
86
87 static struct resource tegra_gart_resources[] = {
88     {
89         .name = "mc",
90         .flags = IORESOURCE_MEM,
91         .start = TEGRA_MC_BASE,
92         .end = TEGRA_MC_BASE + TEGRA_MC_SIZE - 1,
93     },
94     {
95         .name = "gart",
96         .flags = IORESOURCE_MEM,
97         .start = 0x58000000,
98         .end = 0x58000000 - 1 + 32 * 1024 * 1024,
99     }
100 };
101
102 static struct platform_device tegra_gart_dev = {
103     .name = "tegra_gart",
104     .id = -1,
105     .num_resources = ARRAY_SIZE(tegra_gart_resources),
106     .resource = tegra_gart_resources
107 };
108
109 static struct platform_device *ventana_devices[] __initdata = {
110         &debug_uart,
111         &tegra_udc_device,
112         &pda_power_device,
113         &tegra_gart_dev,
114 };
115
116 extern int __init ventana_sdhci_init(void);
117 extern int __init ventana_pinmux_init(void);
118
119 static void __init tegra_ventana_init(void)
120 {
121         tegra_common_init();
122
123         tegra_clk_init_from_table(ventana_clk_init_table);
124         ventana_pinmux_init();
125
126         platform_add_devices(ventana_devices, ARRAY_SIZE(ventana_devices));
127         ventana_sdhci_init();
128 }
129
130 MACHINE_START(VENTANA, "ventana")
131         .boot_params    = 0x00000100,
132         .phys_io        = IO_APB_PHYS,
133         .io_pg_offst    = ((IO_APB_VIRT) >> 18) & 0xfffc,
134         .init_irq       = tegra_init_irq,
135         .init_machine   = tegra_ventana_init,
136         .map_io         = tegra_map_common_io,
137         .timer          = &tegra_timer,
138 MACHINE_END