Merge branch 'at91/cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[pandora-kernel.git] / arch / arm / mach-tegra / board-trimslice.c
index dcf5fc5..89a6d2a 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/serial_8250.h>
 #include <linux/io.h>
 #include <linux/i2c.h>
-#include <linux/i2c-tegra.h>
+#include <linux/gpio.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -32,6 +32,7 @@
 
 #include <mach/iomap.h>
 #include <mach/sdhci.h>
+#include <mach/gpio.h>
 
 #include "board.h"
 #include "clock.h"
@@ -73,22 +74,19 @@ static struct tegra_sdhci_platform_data sdhci_pdata4 = {
        .power_gpio     = -1,
 };
 
+static struct platform_device trimslice_audio_device = {
+       .name   = "tegra-snd-trimslice",
+       .id     = 0,
+};
+
 static struct platform_device *trimslice_devices[] __initdata = {
        &debug_uart,
        &tegra_sdhci_device1,
        &tegra_sdhci_device4,
-};
-
-static struct tegra_i2c_platform_data trimslice_i2c1_platform_data = {
-       .bus_clk_rate   = 400000,
-};
-
-static struct tegra_i2c_platform_data trimslice_i2c2_platform_data = {
-       .bus_clk_rate   = 400000,
-};
-
-static struct tegra_i2c_platform_data trimslice_i2c3_platform_data = {
-       .bus_clk_rate   = 400000,
+       &tegra_i2s_device1,
+       &tegra_das_device,
+       &tegra_pcm_device,
+       &trimslice_audio_device,
 };
 
 static struct i2c_board_info trimslice_i2c3_board_info[] = {
@@ -102,10 +100,6 @@ static struct i2c_board_info trimslice_i2c3_board_info[] = {
 
 static void trimslice_i2c_init(void)
 {
-       tegra_i2c_device1.dev.platform_data = &trimslice_i2c1_platform_data;
-       tegra_i2c_device2.dev.platform_data = &trimslice_i2c2_platform_data;
-       tegra_i2c_device3.dev.platform_data = &trimslice_i2c3_platform_data;
-
        platform_device_register(&tegra_i2c_device1);
        platform_device_register(&tegra_i2c_device2);
        platform_device_register(&tegra_i2c_device3);
@@ -114,6 +108,24 @@ static void trimslice_i2c_init(void)
                                ARRAY_SIZE(trimslice_i2c3_board_info));
 }
 
+static void trimslice_usb_init(void)
+{
+       int err;
+
+       platform_device_register(&tegra_ehci3_device);
+
+       platform_device_register(&tegra_ehci2_device);
+
+       err = gpio_request_one(TRIMSLICE_GPIO_USB1_MODE, GPIOF_OUT_INIT_HIGH,
+                              "usb1mode");
+       if (err) {
+               pr_err("TrimSlice: failed to obtain USB1 mode gpio: %d\n", err);
+               return;
+       }
+
+       platform_device_register(&tegra_ehci1_device);
+}
+
 static void __init tegra_trimslice_fixup(struct machine_desc *desc,
        struct tag *tags, char **cmdline, struct meminfo *mi)
 {
@@ -127,6 +139,10 @@ static void __init tegra_trimslice_fixup(struct machine_desc *desc,
 static __initdata struct tegra_clk_init_table trimslice_clk_init_table[] = {
        /* name         parent          rate            enabled */
        { "uarta",      "pll_p",        216000000,      true },
+       { "pll_a",      "pll_p_out1",   56448000,       true },
+       { "pll_a_out0", "pll_a",        11289600,       true },
+       { "cdev1",      NULL,           0,              true },
+       { "i2s1",       "pll_a_out0",   11289600,       false},
        { NULL,         NULL,           0,              0},
 };
 
@@ -151,6 +167,7 @@ static void __init tegra_trimslice_init(void)
        platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices));
 
        trimslice_i2c_init();
+       trimslice_usb_init();
 }
 
 MACHINE_START(TRIMSLICE, "trimslice")