summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSonghee Baek <sbaek@nvidia.com>2013-12-06 15:29:25 -0800
committerBharat Nihalani <bnihalani@nvidia.com>2014-01-31 02:22:55 -0800
commit49b3a5d26ed3f797fe68dd3f7f93cd68d008949e (patch)
treebe7b91a9f4a8ab961513206aff67ffd0e06deba4
parent4fa0e4532026e918a451db4a9ce08daad5c96333 (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.c89
-rw-r--r--arch/arm/mach-tegra/board-vcm30_t124.h46
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