diff options
Diffstat (limited to 'arch/arm/mach-tegra/board-trimslice.c')
-rw-r--r-- | arch/arm/mach-tegra/board-trimslice.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index cda4cfd78e84..89a6d2adc1de 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,7 @@ | |||
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> | ||
33 | 36 | ||
34 | #include "board.h" | 37 | #include "board.h" |
35 | #include "clock.h" | 38 | #include "clock.h" |
@@ -71,12 +74,58 @@ static struct tegra_sdhci_platform_data sdhci_pdata4 = { | |||
71 | .power_gpio = -1, | 74 | .power_gpio = -1, |
72 | }; | 75 | }; |
73 | 76 | ||
77 | static struct platform_device trimslice_audio_device = { | ||
78 | .name = "tegra-snd-trimslice", | ||
79 | .id = 0, | ||
80 | }; | ||
81 | |||
74 | static struct platform_device *trimslice_devices[] __initdata = { | 82 | static struct platform_device *trimslice_devices[] __initdata = { |
75 | &debug_uart, | 83 | &debug_uart, |
76 | &tegra_sdhci_device1, | 84 | &tegra_sdhci_device1, |
77 | &tegra_sdhci_device4, | 85 | &tegra_sdhci_device4, |
86 | &tegra_i2s_device1, | ||
87 | &tegra_das_device, | ||
88 | &tegra_pcm_device, | ||
89 | &trimslice_audio_device, | ||
78 | }; | 90 | }; |
79 | 91 | ||
92 | static struct i2c_board_info trimslice_i2c3_board_info[] = { | ||
93 | { | ||
94 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | ||
95 | }, | ||
96 | { | ||
97 | I2C_BOARD_INFO("em3027", 0x56), | ||
98 | }, | ||
99 | }; | ||
100 | |||
101 | static void trimslice_i2c_init(void) | ||
102 | { | ||
103 | platform_device_register(&tegra_i2c_device1); | ||
104 | platform_device_register(&tegra_i2c_device2); | ||
105 | platform_device_register(&tegra_i2c_device3); | ||
106 | |||
107 | i2c_register_board_info(2, trimslice_i2c3_board_info, | ||
108 | ARRAY_SIZE(trimslice_i2c3_board_info)); | ||
109 | } | ||
110 | |||
111 | static void trimslice_usb_init(void) | ||
112 | { | ||
113 | int err; | ||
114 | |||
115 | platform_device_register(&tegra_ehci3_device); | ||
116 | |||
117 | platform_device_register(&tegra_ehci2_device); | ||
118 | |||
119 | err = gpio_request_one(TRIMSLICE_GPIO_USB1_MODE, GPIOF_OUT_INIT_HIGH, | ||
120 | "usb1mode"); | ||
121 | if (err) { | ||
122 | pr_err("TrimSlice: failed to obtain USB1 mode gpio: %d\n", err); | ||
123 | return; | ||
124 | } | ||
125 | |||
126 | platform_device_register(&tegra_ehci1_device); | ||
127 | } | ||
128 | |||
80 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, | 129 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, |
81 | struct tag *tags, char **cmdline, struct meminfo *mi) | 130 | struct tag *tags, char **cmdline, struct meminfo *mi) |
82 | { | 131 | { |
@@ -90,6 +139,10 @@ static void __init tegra_trimslice_fixup(struct machine_desc *desc, | |||
90 | static __initdata struct tegra_clk_init_table trimslice_clk_init_table[] = { | 139 | static __initdata struct tegra_clk_init_table trimslice_clk_init_table[] = { |
91 | /* name parent rate enabled */ | 140 | /* name parent rate enabled */ |
92 | { "uarta", "pll_p", 216000000, true }, | 141 | { "uarta", "pll_p", 216000000, true }, |
142 | { "pll_a", "pll_p_out1", 56448000, true }, | ||
143 | { "pll_a_out0", "pll_a", 11289600, true }, | ||
144 | { "cdev1", NULL, 0, true }, | ||
145 | { "i2s1", "pll_a_out0", 11289600, false}, | ||
93 | { NULL, NULL, 0, 0}, | 146 | { NULL, NULL, 0, 0}, |
94 | }; | 147 | }; |
95 | 148 | ||
@@ -112,6 +165,9 @@ static void __init tegra_trimslice_init(void) | |||
112 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; | 165 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; |
113 | 166 | ||
114 | platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); | 167 | platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); |
168 | |||
169 | trimslice_i2c_init(); | ||
170 | trimslice_usb_init(); | ||
115 | } | 171 | } |
116 | 172 | ||
117 | MACHINE_START(TRIMSLICE, "trimslice") | 173 | MACHINE_START(TRIMSLICE, "trimslice") |