diff options
Diffstat (limited to 'arch/arm/mach-tegra/board-trimslice.c')
-rw-r--r-- | arch/arm/mach-tegra/board-trimslice.c | 75 |
1 files changed, 66 insertions, 9 deletions
diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index cda4cfd78e8..823060ec478 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <linux/serial_8250.h> | 24 | #include <linux/serial_8250.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/i2c.h> | ||
27 | #include <linux/gpio.h> | ||
26 | 28 | ||
27 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
28 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
@@ -30,6 +32,8 @@ | |||
30 | 32 | ||
31 | #include <mach/iomap.h> | 33 | #include <mach/iomap.h> |
32 | #include <mach/sdhci.h> | 34 | #include <mach/sdhci.h> |
35 | #include <mach/gpio.h> | ||
36 | #include <mach/pci.h> | ||
33 | 37 | ||
34 | #include "board.h" | 38 | #include "board.h" |
35 | #include "clock.h" | 39 | #include "clock.h" |
@@ -71,12 +75,66 @@ static struct tegra_sdhci_platform_data sdhci_pdata4 = { | |||
71 | .power_gpio = -1, | 75 | .power_gpio = -1, |
72 | }; | 76 | }; |
73 | 77 | ||
78 | static struct platform_device trimslice_audio_device = { | ||
79 | .name = "tegra-snd-trimslice", | ||
80 | .id = 0, | ||
81 | }; | ||
82 | |||
83 | static struct tegra_pci_platform_data trimslice_pci_platform_data = { | ||
84 | .port_status[0] = 1, | ||
85 | .port_status[1] = 1, | ||
86 | .use_dock_detect = 0, | ||
87 | .gpio = 0, | ||
88 | }; | ||
89 | |||
74 | static struct platform_device *trimslice_devices[] __initdata = { | 90 | static struct platform_device *trimslice_devices[] __initdata = { |
75 | &debug_uart, | 91 | &debug_uart, |
76 | &tegra_sdhci_device1, | 92 | &tegra_sdhci_device1, |
77 | &tegra_sdhci_device4, | 93 | &tegra_sdhci_device4, |
94 | &tegra_i2s_device1, | ||
95 | &tegra_das_device, | ||
96 | &tegra_pcm_device, | ||
97 | &trimslice_audio_device, | ||
98 | &trimslice_pci_platform_data, | ||
99 | }; | ||
100 | |||
101 | static struct i2c_board_info trimslice_i2c3_board_info[] = { | ||
102 | { | ||
103 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | ||
104 | }, | ||
105 | { | ||
106 | I2C_BOARD_INFO("em3027", 0x56), | ||
107 | }, | ||
78 | }; | 108 | }; |
79 | 109 | ||
110 | static void trimslice_i2c_init(void) | ||
111 | { | ||
112 | platform_device_register(&tegra_i2c_device1); | ||
113 | platform_device_register(&tegra_i2c_device2); | ||
114 | platform_device_register(&tegra_i2c_device3); | ||
115 | |||
116 | i2c_register_board_info(2, trimslice_i2c3_board_info, | ||
117 | ARRAY_SIZE(trimslice_i2c3_board_info)); | ||
118 | } | ||
119 | |||
120 | static void trimslice_usb_init(void) | ||
121 | { | ||
122 | int err; | ||
123 | |||
124 | platform_device_register(&tegra_ehci3_device); | ||
125 | |||
126 | platform_device_register(&tegra_ehci2_device); | ||
127 | |||
128 | err = gpio_request_one(TRIMSLICE_GPIO_USB1_MODE, GPIOF_OUT_INIT_HIGH, | ||
129 | "usb1mode"); | ||
130 | if (err) { | ||
131 | pr_err("TrimSlice: failed to obtain USB1 mode gpio: %d\n", err); | ||
132 | return; | ||
133 | } | ||
134 | |||
135 | platform_device_register(&tegra_ehci1_device); | ||
136 | } | ||
137 | |||
80 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, | 138 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, |
81 | struct tag *tags, char **cmdline, struct meminfo *mi) | 139 | struct tag *tags, char **cmdline, struct meminfo *mi) |
82 | { | 140 | { |
@@ -90,18 +148,13 @@ static void __init tegra_trimslice_fixup(struct machine_desc *desc, | |||
90 | static __initdata struct tegra_clk_init_table trimslice_clk_init_table[] = { | 148 | static __initdata struct tegra_clk_init_table trimslice_clk_init_table[] = { |
91 | /* name parent rate enabled */ | 149 | /* name parent rate enabled */ |
92 | { "uarta", "pll_p", 216000000, true }, | 150 | { "uarta", "pll_p", 216000000, true }, |
151 | { "pll_a", "pll_p_out1", 56448000, true }, | ||
152 | { "pll_a_out0", "pll_a", 11289600, true }, | ||
153 | { "cdev1", NULL, 0, true }, | ||
154 | { "i2s1", "pll_a_out0", 11289600, false}, | ||
93 | { NULL, NULL, 0, 0}, | 155 | { NULL, NULL, 0, 0}, |
94 | }; | 156 | }; |
95 | 157 | ||
96 | static int __init tegra_trimslice_pci_init(void) | ||
97 | { | ||
98 | if (!machine_is_trimslice()) | ||
99 | return 0; | ||
100 | |||
101 | return tegra_pcie_init(true, true); | ||
102 | } | ||
103 | subsys_initcall(tegra_trimslice_pci_init); | ||
104 | |||
105 | static void __init tegra_trimslice_init(void) | 158 | static void __init tegra_trimslice_init(void) |
106 | { | 159 | { |
107 | tegra_clk_init_from_table(trimslice_clk_init_table); | 160 | tegra_clk_init_from_table(trimslice_clk_init_table); |
@@ -110,8 +163,12 @@ static void __init tegra_trimslice_init(void) | |||
110 | 163 | ||
111 | tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; | 164 | tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; |
112 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; | 165 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; |
166 | tegra_pci_device.dev.platform_data = &trimslice_pci_platform_data; | ||
113 | 167 | ||
114 | platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); | 168 | platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); |
169 | |||
170 | trimslice_i2c_init(); | ||
171 | trimslice_usb_init(); | ||
115 | } | 172 | } |
116 | 173 | ||
117 | MACHINE_START(TRIMSLICE, "trimslice") | 174 | MACHINE_START(TRIMSLICE, "trimslice") |