diff options
author | Songhee Baek <sbaek@nvidia.com> | 2013-12-06 15:29:25 -0800 |
---|---|---|
committer | Bharat Nihalani <bnihalani@nvidia.com> | 2014-01-31 02:22:55 -0800 |
commit | 49b3a5d26ed3f797fe68dd3f7f93cd68d008949e (patch) | |
tree | be7b91a9f4a8ab961513206aff67ffd0e06deba4 | |
parent | 4fa0e4532026e918a451db4a9ce08daad5c96333 (diff) |
ARM: tegra: vcm3.0t124: Add DAP_D_SEL init
AD1937 codec needs to control DAP_D_SEL for route DAP_D signal to
ABB connector in E1860-B00, the DAP_D_SEL comes from additional
PCA953X so we need to initialize additional PCA953X.
Bug 1413475
Change-Id: If1886b048ce0130bdae931dede495e3430946d79
Signed-off-by: Songhee Baek <sbaek@nvidia.com>
Reviewed-on: http://git-master/r/339445
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/board-vcm30_t124-power.c | 89 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-vcm30_t124.h | 46 |
2 files changed, 100 insertions, 35 deletions
diff --git a/arch/arm/mach-tegra/board-vcm30_t124-power.c b/arch/arm/mach-tegra/board-vcm30_t124-power.c index 3325b19400e4..2b9fbf071959 100644 --- a/arch/arm/mach-tegra/board-vcm30_t124-power.c +++ b/arch/arm/mach-tegra/board-vcm30_t124-power.c @@ -34,6 +34,7 @@ #include "devices.h" #include "tegra11_soctherm.h" #include "tegra3_tsensor.h" +#include <mach/board_id.h> #define PMC_CTRL 0x0 #define PMC_CTRL_INTR_LOW (1 << 17) @@ -397,26 +398,34 @@ int __init vcm30_t124_soctherm_init(void) return tegra11_soctherm_init(&vcm30_t124_soctherm_data); } - /* * GPIO init table for PCA9539 MISC IO GPIOs * that have to be brought up to a known good state * except for WiFi as it is handled via the * WiFi stack. */ -static struct gpio vcm30_t124_system_gpios[] = { +static struct gpio vcm30_t124_system_0_gpios[] = { {MISCIO_BT_WAKEUP_GPIO, GPIOF_OUT_INIT_HIGH, "bt_wk"}, {MISCIO_ABB_RST_GPIO, GPIOF_OUT_INIT_HIGH, "ebb_rst"}, {MISCIO_USER_LED2_GPIO, GPIOF_OUT_INIT_LOW, "usr_led2"}, {MISCIO_USER_LED1_GPIO, GPIOF_OUT_INIT_LOW, "usr_led1"}, }; -static int __init vcm30_t124_system_gpio_init(void) +/* + * GPIO init table for PCA9539 MISC IO GPIOs + * related to DAP_D_SEL and DAP_D_EN. + */ +static struct gpio vcm30_t124_system_1_gpios[] = { + {MISCIO_MUX_DAP_D_SEL, GPIOF_OUT_INIT_LOW, "dap_d_sel"}, + {MISCIO_MUX_DAP_D_EN, GPIOF_OUT_INIT_LOW, "dap_d_en"}, +}; + +static int __init vcm30_t124_system_0_gpio_init(void) { int ret, pin_count = 0; struct gpio *gpios_info = NULL; - gpios_info = vcm30_t124_system_gpios; - pin_count = ARRAY_SIZE(vcm30_t124_system_gpios); + gpios_info = vcm30_t124_system_0_gpios; + pin_count = ARRAY_SIZE(vcm30_t124_system_0_gpios); /* Set required system GPIOs to initial bootup values */ ret = gpio_request_array(gpios_info, pin_count); @@ -432,6 +441,25 @@ static int __init vcm30_t124_system_gpio_init(void) return ret; } +static int __init vcm30_t124_system_1_gpio_init(void) +{ + int ret, pin_count = 0; + struct gpio *gpios_info = NULL; + gpios_info = vcm30_t124_system_1_gpios; + pin_count = ARRAY_SIZE(vcm30_t124_system_1_gpios); + + /* Set required system GPIOs to initial bootup values */ + ret = gpio_request_array(gpios_info, pin_count); + + if (ret) + pr_err("%s gpio_request_array failed(%d)\r\n", + __func__, ret); + + gpio_free_array(gpios_info, pin_count); + + return ret; +} + /* * TODO: Check for the correct pca953x before invoking client * init functions @@ -441,8 +469,19 @@ static int pca953x_client_setup(struct i2c_client *client, void *context) { int ret = 0; + int system = (int)context; + + switch (system) { + case 0: + ret = vcm30_t124_system_0_gpio_init(); + break; + case 1: + ret = vcm30_t124_system_1_gpio_init(); + break; + default: + ret = -EINVAL; + } - ret = vcm30_t124_system_gpio_init(); if (ret < 0) goto fail; @@ -452,21 +491,41 @@ fail: return ret; } -static struct pca953x_platform_data vcm30_t124_miscio_pca9539_data = { - .gpio_base = PCA953X_MISCIO_GPIO_BASE, + +static struct pca953x_platform_data vcm30_t124_miscio_0_pca9539_data = { + .gpio_base = PCA953X_MISCIO_0_GPIO_BASE, .setup = pca953x_client_setup, + .context = (void *)0, }; -static struct i2c_board_info vcm30_t124_i2c2_board_info_pca9539[] = { - { - I2C_BOARD_INFO("pca9539", PCA953X_MISCIO_ADDR), - .platform_data = &vcm30_t124_miscio_pca9539_data, - }, +static struct pca953x_platform_data vcm30_t124_miscio_1_pca9539_data = { + .gpio_base = PCA953X_MISCIO_1_GPIO_BASE, + .setup = pca953x_client_setup, + .context = (void *)1, +}; + +static struct i2c_board_info vcm30_t124_i2c2_board_info_pca9539_0 = { + I2C_BOARD_INFO("pca9539", PCA953X_MISCIO_0_ADDR), + .platform_data = &vcm30_t124_miscio_0_pca9539_data, +}; + +static struct i2c_board_info vcm30_t124_i2c2_board_info_pca9539_1 = { + I2C_BOARD_INFO("pca9539", PCA953X_MISCIO_1_ADDR), + .platform_data = &vcm30_t124_miscio_1_pca9539_data, }; int __init vcm30_t124_pca953x_init(void) { - i2c_register_board_info(1, vcm30_t124_i2c2_board_info_pca9539, - ARRAY_SIZE(vcm30_t124_i2c2_board_info_pca9539)); + int is_e1860_b00 = 0; + + is_e1860_b00 = tegra_is_board(NULL, "61860", NULL, "300", NULL); + + i2c_register_board_info(1, &vcm30_t124_i2c2_board_info_pca9539_0, 1); + + if (is_e1860_b00) { + i2c_register_board_info(1, + &vcm30_t124_i2c2_board_info_pca9539_1, 1); + } + return 0; } diff --git a/arch/arm/mach-tegra/board-vcm30_t124.h b/arch/arm/mach-tegra/board-vcm30_t124.h index a0d6429457f7..3b608872ac6a 100644 --- a/arch/arm/mach-tegra/board-vcm30_t124.h +++ b/arch/arm/mach-tegra/board-vcm30_t124.h @@ -1,7 +1,7 @@ /* * arch/arm/mach-tegra/board-vcm30_t124.h * - * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2013-2014, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -78,28 +78,34 @@ GPIO, also the GPIO is same for T114 interposer and T124*/ #define MAX77663_GPIO_END (MAX77663_GPIO_BASE + MAX77663_GPIO_NR) /* PCA953X - MISC SYSTEM IO */ -#define PCA953X_MISCIO_GPIO_BASE (MAX77663_GPIO_END + 1) -#define MISCIO_BT_RST_GPIO (PCA953X_MISCIO_GPIO_BASE + 0) -#define MISCIO_GPS_RST_GPIO (PCA953X_MISCIO_GPIO_BASE + 1) -#define MISCIO_GPS_EN_GPIO (PCA953X_MISCIO_GPIO_BASE + 2) -#define MISCIO_WF_EN_GPIO (PCA953X_MISCIO_GPIO_BASE + 3) -#define MISCIO_WF_RST_GPIO (PCA953X_MISCIO_GPIO_BASE + 4) -#define MISCIO_BT_EN_GPIO (PCA953X_MISCIO_GPIO_BASE + 5) +#define PCA953X_MISCIO_0_GPIO_BASE (MAX77663_GPIO_END + 1) +#define MISCIO_BT_RST_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 0) +#define MISCIO_GPS_RST_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 1) +#define MISCIO_GPS_EN_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 2) +#define MISCIO_WF_EN_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 3) +#define MISCIO_WF_RST_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 4) +#define MISCIO_BT_EN_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 5) /* GPIO6 is not used */ -#define MISCIO_NOT_USED0 (PCA953X_MISCIO_GPIO_BASE + 6) -#define MISCIO_BT_WAKEUP_GPIO (PCA953X_MISCIO_GPIO_BASE + 7) -#define MISCIO_FAN_SEL_GPIO (PCA953X_MISCIO_GPIO_BASE + 8) -#define MISCIO_EN_MISC_BUF_GPIO (PCA953X_MISCIO_GPIO_BASE + 9) -#define MISCIO_EN_MSATA_GPIO (PCA953X_MISCIO_GPIO_BASE + 10) -#define MISCIO_EN_SDCARD_GPIO (PCA953X_MISCIO_GPIO_BASE + 11) +#define MISCIO_NOT_USED0 (PCA953X_MISCIO_0_GPIO_BASE + 6) +#define MISCIO_BT_WAKEUP_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 7) +#define MISCIO_FAN_SEL_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 8) +#define MISCIO_EN_MISC_BUF_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 9) +#define MISCIO_EN_MSATA_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 10) +#define MISCIO_EN_SDCARD_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 11) /* GPIO12 is not used */ -#define MISCIO_NOT_USED1 (PCA953X_MISCIO_GPIO_BASE + 12) -#define MISCIO_ABB_RST_GPIO (PCA953X_MISCIO_GPIO_BASE + 13) -#define MISCIO_USER_LED2_GPIO (PCA953X_MISCIO_GPIO_BASE + 14) -#define MISCIO_USER_LED1_GPIO (PCA953X_MISCIO_GPIO_BASE + 15) -#define PCA953X_MISCIO_GPIO_END (PCA953X_MISCIO_GPIO_BASE + 16) +#define MISCIO_NOT_USED1 (PCA953X_MISCIO_0_GPIO_BASE + 12) +#define MISCIO_ABB_RST_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 13) +#define MISCIO_USER_LED2_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 14) +#define MISCIO_USER_LED1_GPIO (PCA953X_MISCIO_0_GPIO_BASE + 15) +#define PCA953X_MISCIO_0_GPIO_END (PCA953X_MISCIO_0_GPIO_BASE + 15) + +#define PCA953X_MISCIO_1_GPIO_BASE (PCA953X_MISCIO_0_GPIO_END + 1) +#define MISCIO_MUX_DAP_D_SEL (PCA953X_MISCIO_1_GPIO_BASE + 0) +#define MISCIO_MUX_DAP_D_EN (PCA953X_MISCIO_1_GPIO_BASE + 1) +#define PCA953X_MISCIO_1_GPIO_END (PCA953X_MISCIO_1_GPIO_BASE + 15) /* PCA953X I2C IO expander bus addresses */ -#define PCA953X_MISCIO_ADDR 0x75 +#define PCA953X_MISCIO_0_ADDR 0x75 +#define PCA953X_MISCIO_1_ADDR 0x76 #endif |