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 cda4cfd78e8..89a6d2adc1d 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c @@ -23,6 +23,8 @@  #include <linux/platform_device.h>  #include <linux/serial_8250.h>  #include <linux/io.h> +#include <linux/i2c.h> +#include <linux/gpio.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> @@ -30,6 +32,7 @@  #include <mach/iomap.h>  #include <mach/sdhci.h> +#include <mach/gpio.h>  #include "board.h"  #include "clock.h" @@ -71,12 +74,58 @@ 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, +	&tegra_i2s_device1, +	&tegra_das_device, +	&tegra_pcm_device, +	&trimslice_audio_device,  }; +static struct i2c_board_info trimslice_i2c3_board_info[] = { +	{ +		I2C_BOARD_INFO("tlv320aic23", 0x1a), +	}, +	{ +		I2C_BOARD_INFO("em3027", 0x56), +	}, +}; + +static void trimslice_i2c_init(void) +{ +	platform_device_register(&tegra_i2c_device1); +	platform_device_register(&tegra_i2c_device2); +	platform_device_register(&tegra_i2c_device3); + +	i2c_register_board_info(2, trimslice_i2c3_board_info, +				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)  { @@ -90,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},  }; @@ -112,6 +165,9 @@ static void __init tegra_trimslice_init(void)  	tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;  	platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); + +	trimslice_i2c_init(); +	trimslice_usb_init();  }  MACHINE_START(TRIMSLICE, "trimslice")  |