diff options
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-pinmux.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu.c | 29 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony-pcie.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-trimslice.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-tegra/devices.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-tegra/devices.h | 1 |
9 files changed, 66 insertions, 17 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-pinmux.c b/arch/arm/mach-tegra/board-cardhu-pinmux.c index 1b736a40dccf..b836ccf6f591 100644 --- a/arch/arm/mach-tegra/board-cardhu-pinmux.c +++ b/arch/arm/mach-tegra/board-cardhu-pinmux.c @@ -441,6 +441,8 @@ static __initdata struct tegra_pingroup_config cardhu_pinmux_cardhu[] = { DEFAULT_PINMUX(GMI_CS1_N, GMI, PULL_UP, TRISTATE, INPUT), /*TP_IRQ*/ DEFAULT_PINMUX(GMI_CS4_N, GMI, PULL_UP, NORMAL, INPUT), + /*PCIE dock detect*/ + DEFAULT_PINMUX(GPIO_PU4, PWM1, PULL_UP, NORMAL, INPUT), }; static __initdata struct tegra_pingroup_config cardhu_pinmux_cardhu_a03[] = { diff --git a/arch/arm/mach-tegra/board-cardhu.c b/arch/arm/mach-tegra/board-cardhu.c index 0d69eb6165b7..62320839aca3 100644 --- a/arch/arm/mach-tegra/board-cardhu.c +++ b/arch/arm/mach-tegra/board-cardhu.c @@ -38,6 +38,7 @@ #include <linux/tegra_uart.h> #include <linux/memblock.h> #include <linux/spi-tegra.h> +#include <linux/nfc/pn544.h> #include <sound/wm8903.h> @@ -52,8 +53,8 @@ #include <asm/mach-types.h> #include <asm/mach/arch.h> #include <mach/usb_phy.h> -#include <linux/nfc/pn544.h> #include <mach/thermal.h> +#include <mach/pci.h> #include "board.h" #include "clock.h" @@ -860,6 +861,31 @@ static struct platform_device tegra_baseband_power2_device = { }, }; + +static struct tegra_pci_platform_data cardhu_pci_platform_data = { + .port_status[0] = 1, + .port_status[1] = 1, + .port_status[2] = 1, + .use_dock_detect = 0, + .gpio = 0, +}; + +static void cardhu_pci_init(void) +{ + struct board_info board_info; + + tegra_get_board_info(&board_info); + if (board_info.board_id == BOARD_E1291) { + cardhu_pci_platform_data.port_status[0] = 0; + cardhu_pci_platform_data.port_status[1] = 0; + cardhu_pci_platform_data.port_status[2] = 1; + cardhu_pci_platform_data.use_dock_detect = 1; + cardhu_pci_platform_data.gpio = DOCK_DETECT_GPIO; + } + tegra_pci_device.dev.platform_data = &cardhu_pci_platform_data; + platform_device_register(&tegra_pci_device); +} + static void cardhu_modem_init(void) { struct board_info board_info; @@ -966,6 +992,7 @@ static void __init tegra_cardhu_init(void) cardhu_emc_init(); tegra_release_bootloader_fb(); cardhu_nfc_init(); + cardhu_pci_init(); } static void __init cardhu_ramconsole_reserve(unsigned long size) diff --git a/arch/arm/mach-tegra/board-cardhu.h b/arch/arm/mach-tegra/board-cardhu.h index cacbd65dea0d..53228a87db32 100644 --- a/arch/arm/mach-tegra/board-cardhu.h +++ b/arch/arm/mach-tegra/board-cardhu.h @@ -180,6 +180,7 @@ /* TPS6591x IRQs */ #define TPS6591X_IRQ_BASE TEGRA_NR_IRQS #define TPS6591X_IRQ_END (TPS6591X_IRQ_BASE + 18) +#define DOCK_DETECT_GPIO TEGRA_GPIO_PU4 /* RICOH583 IRQs */ #define RICOH583_IRQ_BASE TEGRA_NR_IRQS diff --git a/arch/arm/mach-tegra/board-harmony-pcie.c b/arch/arm/mach-tegra/board-harmony-pcie.c index 9c27b95b8d86..f3db0eeba2c9 100644 --- a/arch/arm/mach-tegra/board-harmony-pcie.c +++ b/arch/arm/mach-tegra/board-harmony-pcie.c @@ -23,6 +23,8 @@ #include <asm/mach-types.h> #include <mach/pinmux.h> +#include <mach/pci.h> +#include "devices.h" #include "board.h" #ifdef CONFIG_TEGRA_PCI @@ -30,7 +32,14 @@ /* GPIO 3 of the PMIC */ #define EN_VDD_1V05_GPIO (TEGRA_NR_GPIOS + 2) -static int __init harmony_pcie_init(void) +static struct tegra_pci_platform_data harmony_pci_platform_data = { + .port_status[0] = 1, + .port_status[1] = 1, + .use_dock_detect = 0, + .gpio = 0, +}; + +int __init harmony_pcie_init(void) { struct regulator *regulator = NULL; int err; @@ -54,9 +63,8 @@ static int __init harmony_pcie_init(void) tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_NORMAL); tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_NORMAL); - err = tegra_pcie_init(true, true); - if (err) - goto err_pcie; + tegra_pci_device.dev.platform_data = &harmony_pci_platform_data; + platform_device_register(&tegra_pci_device); return 0; @@ -73,7 +81,4 @@ err_reg: return err; } -/* PCI should be initialized after I2C, mfd and regulators */ -subsys_initcall_sync(harmony_pcie_init); - #endif diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c index 9fb1c8fbce0c..d40084cc5e6d 100644 --- a/arch/arm/mach-tegra/board-harmony.c +++ b/arch/arm/mach-tegra/board-harmony.c @@ -432,6 +432,7 @@ static void __init tegra_harmony_init(void) #ifdef CONFIG_KEYBOARD_TEGRA harmony_kbc_init(); #endif + harmony_pcie_init(); } void __init tegra_harmony_reserve(void) diff --git a/arch/arm/mach-tegra/board-harmony.h b/arch/arm/mach-tegra/board-harmony.h index c7a081dfe3b9..d70b39711135 100644 --- a/arch/arm/mach-tegra/board-harmony.h +++ b/arch/arm/mach-tegra/board-harmony.h @@ -45,5 +45,6 @@ void harmony_pinmux_init(void); int harmony_regulator_init(void); int harmony_panel_init(void); int harmony_kbc_init(void); +int harmony_pcie_init(void); #endif diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index 89a6d2adc1de..823060ec478f 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c @@ -33,6 +33,7 @@ #include <mach/iomap.h> #include <mach/sdhci.h> #include <mach/gpio.h> +#include <mach/pci.h> #include "board.h" #include "clock.h" @@ -79,6 +80,13 @@ static struct platform_device trimslice_audio_device = { .id = 0, }; +static struct tegra_pci_platform_data trimslice_pci_platform_data = { + .port_status[0] = 1, + .port_status[1] = 1, + .use_dock_detect = 0, + .gpio = 0, +}; + static struct platform_device *trimslice_devices[] __initdata = { &debug_uart, &tegra_sdhci_device1, @@ -87,6 +95,7 @@ static struct platform_device *trimslice_devices[] __initdata = { &tegra_das_device, &tegra_pcm_device, &trimslice_audio_device, + &trimslice_pci_platform_data, }; static struct i2c_board_info trimslice_i2c3_board_info[] = { @@ -146,15 +155,6 @@ static __initdata struct tegra_clk_init_table trimslice_clk_init_table[] = { { NULL, NULL, 0, 0}, }; -static int __init tegra_trimslice_pci_init(void) -{ - if (!machine_is_trimslice()) - return 0; - - return tegra_pcie_init(true, true); -} -subsys_initcall(tegra_trimslice_pci_init); - static void __init tegra_trimslice_init(void) { tegra_clk_init_from_table(trimslice_clk_init_table); @@ -163,6 +163,7 @@ static void __init tegra_trimslice_init(void) tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; + tegra_pci_device.dev.platform_data = &trimslice_pci_platform_data; platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices)); diff --git a/arch/arm/mach-tegra/devices.c b/arch/arm/mach-tegra/devices.c index c38120d119f4..c301654426b5 100644 --- a/arch/arm/mach-tegra/devices.c +++ b/arch/arm/mach-tegra/devices.c @@ -474,6 +474,16 @@ static struct resource sdhci_resource4[] = { }, }; +struct platform_device tegra_pci_device = { + .name = "tegra-pcie", + .id = 0, + .resource = 0, + .num_resources = 0, + .dev = { + .platform_data = 0, + }, +}; + /* board files should fill in platform_data register the devices themselvs. * See board-harmony.c for an example */ diff --git a/arch/arm/mach-tegra/devices.h b/arch/arm/mach-tegra/devices.h index e3ece52c8056..0facd56ce3df 100644 --- a/arch/arm/mach-tegra/devices.h +++ b/arch/arm/mach-tegra/devices.h @@ -32,6 +32,7 @@ extern struct platform_device tegra_i2c_device2; extern struct platform_device tegra_i2c_device3; extern struct platform_device tegra_i2c_device4; extern struct platform_device tegra_kbc_device; +extern struct platform_device tegra_pci_device; #ifndef CONFIG_ARCH_TEGRA_2x_SOC extern struct platform_device tegra_i2c_device5; #endif |