diff options
Diffstat (limited to 'arch/arm/mach-tegra/board-cardhu-pinmux.c')
-rw-r--r-- | arch/arm/mach-tegra/board-cardhu-pinmux.c | 67 |
1 files changed, 62 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-pinmux.c b/arch/arm/mach-tegra/board-cardhu-pinmux.c index 346dccfd715b..c416d453e960 100644 --- a/arch/arm/mach-tegra/board-cardhu-pinmux.c +++ b/arch/arm/mach-tegra/board-cardhu-pinmux.c @@ -497,6 +497,20 @@ static __initdata struct tegra_pingroup_config cardhu_pinmux_e1291_a04[] = { DEFAULT_PINMUX(GPIO_PU4, RSVD1, PULL_UP, NORMAL, INPUT), }; +static __initdata struct tegra_pingroup_config cardhu_pinmux_pm315[] = { + DEFAULT_PINMUX(GMI_AD15, NAND, PULL_DOWN, NORMAL, OUTPUT), + DEFAULT_PINMUX(ULPI_DATA6, UARTA, NORMAL, NORMAL, OUTPUT), + DEFAULT_PINMUX(SPI2_MOSI, SPI6, NORMAL, NORMAL, INPUT), + DEFAULT_PINMUX(DAP3_SCLK, RSVD1, NORMAL, NORMAL, OUTPUT), + /* PCIE dock detect */ + DEFAULT_PINMUX(GPIO_PU4, RSVD1, PULL_UP, NORMAL, INPUT), + /* CDC enable for realtek RTL5640 */ + DEFAULT_PINMUX(SPI2_SCK, SPI2, NORMAL, NORMAL, OUTPUT), + DEFAULT_PINMUX(SPI2_CS1_N, SPI2, NORMAL, NORMAL, INPUT), + /* Power up for USB1, USB3 */ + DEFAULT_PINMUX(GMI_AD13, NAND, PULL_UP, NORMAL, INPUT), +}; + static __initdata struct tegra_pingroup_config cardhu_pinmux_e1198[] = { DEFAULT_PINMUX(LCD_CS0_N, DISPLAYA, NORMAL, NORMAL, INPUT), DEFAULT_PINMUX(LCD_SCK, DISPLAYA, NORMAL, NORMAL, INPUT), @@ -606,10 +620,33 @@ static __initdata struct tegra_pingroup_config gmi_pins_269[] = { DEFAULT_PINMUX(GMI_WP_N, NAND, NORMAL, NORMAL, INPUT), }; -static void __init cardhu_pinmux_audio_init(void) +static void __init cardhu_wm8903_audio_init(void) +{ + int ret = gpio_request(TEGRA_GPIO_CDC_IRQ, "wm8903"); + if (ret < 0) + pr_err("%s() Error in gpio_request() for gpio %d\n", + __func__, ret); + ret = gpio_direction_input(TEGRA_GPIO_CDC_IRQ); + if (ret < 0) { + pr_err("%s() Error in setting gpio %d to in/out\n", + __func__, ret); + gpio_free(TEGRA_GPIO_CDC_IRQ); + } +} + +static void __init beaver_rt5640_audio_init(void) { - gpio_request(TEGRA_GPIO_CDC_IRQ, "wm8903"); - gpio_direction_input(TEGRA_GPIO_CDC_IRQ); + int ret = gpio_request(TEGRA_GPIO_RTL_CDC_IRQ, "rt5640"); + if (ret < 0) + pr_err("%s() Error in gpio_request() for gpio %d\n", + __func__, ret); + ret = gpio_direction_input(TEGRA_GPIO_RTL_CDC_IRQ); + if (ret < 0) { + pr_err("%s() Error in setting gpio %d to in/out\n", + __func__, ret); + gpio_free(TEGRA_GPIO_RTL_CDC_IRQ); + } + } #define GPIO_INIT_PIN_MODE(_gpio, _is_input, _value) \ @@ -639,6 +676,13 @@ static struct gpio_init_pin_info init_gpio_mode_e1291_a04[] = { GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR2, false, 0), }; +static struct gpio_init_pin_info init_gpio_mode_pm315[] = { + GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD6, false, 0), + GPIO_INIT_PIN_MODE(TEGRA_GPIO_PDD4, false, 0), + GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH5, false, 1), + GPIO_INIT_PIN_MODE(TEGRA_GPIO_PR2, false, 0), +}; + static void __init cardhu_gpio_init_configure(void) { struct board_info board_info; @@ -670,6 +714,10 @@ static void __init cardhu_gpio_init_configure(void) pins_info = init_gpio_mode_e1291_a04; } break; + case BOARD_PM315: + len = ARRAY_SIZE(init_gpio_mode_pm315); + pins_info = init_gpio_mode_pm315; + break; default: return; } @@ -718,7 +766,12 @@ int __init cardhu_pinmux_init(void) tegra_pinmux_config_table(cardhu_pinmux_e1291_a04, ARRAY_SIZE(cardhu_pinmux_e1291_a04)); break; - + case BOARD_PM315: + tegra_pinmux_config_table(cardhu_pinmux_cardhu_a03, + ARRAY_SIZE(cardhu_pinmux_cardhu_a03)); + tegra_pinmux_config_table(cardhu_pinmux_pm315, + ARRAY_SIZE(cardhu_pinmux_pm315)); + break; case BOARD_PM269: case BOARD_PM305: case BOARD_PM311: @@ -749,7 +802,11 @@ int __init cardhu_pinmux_init(void) break; } - cardhu_pinmux_audio_init(); + if (board_info.board_id == BOARD_PM315) + beaver_rt5640_audio_init(); + else + cardhu_wm8903_audio_init(); + return 0; } |