summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJihoon Bang <jbang@nvidia.com>2011-12-12 11:00:14 -0800
committerVarun Wadekar <vwadekar@nvidia.com>2011-12-21 12:06:21 +0530
commitea8fd1600b0590293b917f0b3322a0b8be1220fe (patch)
treedafe6293e3f307449a837b03bb2e1113e8828b06
parent57d2376b768c9eb8a9c669d5a06a9a75972b8669 (diff)
arm: tegra: enterprise: support A01 camera module
Change if statement to support E1513 A01 board in E1197. Add tegra_get_camera_board_info to parse camera module id that is passed in from bootloader. Bug 914552 Change-Id: I20c3bcaf181e29446aa254ea189d917bc6905488 Signed-off-by: Jihoon Bang <jbang@nvidia.com> Reviewed-on: http://git-master/r/69504 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Dan Willemsen <dwillemsen@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/board-enterprise-sensors.c20
-rw-r--r--arch/arm/mach-tegra/board.h1
-rw-r--r--arch/arm/mach-tegra/common.c21
3 files changed, 39 insertions, 3 deletions
diff --git a/arch/arm/mach-tegra/board-enterprise-sensors.c b/arch/arm/mach-tegra/board-enterprise-sensors.c
index b7b10109286c..31f365ac366c 100644
--- a/arch/arm/mach-tegra/board-enterprise-sensors.c
+++ b/arch/arm/mach-tegra/board-enterprise-sensors.c
@@ -555,6 +555,8 @@ static int enterprise_cam_init(void)
int ret;
int i;
struct board_info bi;
+ struct board_info cam_bi;
+ bool i2c_mux = false;
pr_info("%s:++\n", __func__);
memset(ent_vicsi_pwr, 0, sizeof(ent_vicsi_pwr));
@@ -573,11 +575,24 @@ static int enterprise_cam_init(void)
}
tegra_get_board_info(&bi);
+ tegra_get_camera_board_info(&cam_bi);
+
+ if (bi.board_id == BOARD_E1205) {
+ if (bi.fab == BOARD_FAB_A00 || bi.fab == BOARD_FAB_A01)
+ i2c_mux = false;
+ else if (bi.fab == BOARD_FAB_A02)
+ i2c_mux = true;
+ } else if (bi.board_id == BOARD_E1197) {
+ if (cam_bi.fab == BOARD_FAB_A00)
+ i2c_mux = false;
+ else if (cam_bi.fab == BOARD_FAB_A01)
+ i2c_mux = true;
+ }
- if (bi.fab == BOARD_FAB_A00 || bi.fab == BOARD_FAB_A01)
+ if (!i2c_mux)
i2c_register_board_info(2, ar0832_i2c2_boardinfo,
ARRAY_SIZE(ar0832_i2c2_boardinfo));
- else if (bi.fab == BOARD_FAB_A02) {
+ else {
i2c_register_board_info(2, enterprise_i2c2_boardinfo,
ARRAY_SIZE(enterprise_i2c2_boardinfo));
/*
@@ -589,7 +604,6 @@ static int enterprise_cam_init(void)
i2c_register_board_info(PCA954x_I2C_BUS1, enterprise_i2c7_boardinfo,
ARRAY_SIZE(enterprise_i2c7_boardinfo));
}
-
return 0;
fail_free_gpio:
diff --git a/arch/arm/mach-tegra/board.h b/arch/arm/mach-tegra/board.h
index cb59bc646021..8720de5eef45 100644
--- a/arch/arm/mach-tegra/board.h
+++ b/arch/arm/mach-tegra/board.h
@@ -96,6 +96,7 @@ enum audio_codec_type {
void tegra_get_board_info(struct board_info *);
void tegra_get_pmu_board_info(struct board_info *bi);
void tegra_get_display_board_info(struct board_info *bi);
+void tegra_get_camera_board_info(struct board_info *bi);
#ifdef CONFIG_TEGRA_CONVSERVATIVE_GOV_ON_EARLYSUPSEND
#define SET_CONSERVATIVE_GOVERNOR_UP_THRESHOLD 95
#define SET_CONSERVATIVE_GOVERNOR_DOWN_THRESHOLD 50
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index d5023c64821e..a58f8cc625a0 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -93,6 +93,7 @@ unsigned long tegra_grhost_aperture = ~0ul;
static bool is_tegra_debug_uart_hsport;
static struct board_info pmu_board_info;
static struct board_info display_board_info;
+static struct board_info camera_board_info;
static int pmu_core_edp = 1200; /* default 1.2V EDP limit */
static int board_panel_type;
@@ -638,6 +639,24 @@ void tegra_get_display_board_info(struct board_info *bi)
__setup("displayboard=", tegra_display_board_info);
+static int __init tegra_camera_board_info(char *info)
+{
+ char *p = info;
+ camera_board_info.board_id = memparse(p, &p);
+ camera_board_info.sku = memparse(p+1, &p);
+ camera_board_info.fab = memparse(p+1, &p);
+ camera_board_info.major_revision = memparse(p+1, &p);
+ camera_board_info.minor_revision = memparse(p+1, &p);
+ return 1;
+}
+
+void tegra_get_camera_board_info(struct board_info *bi)
+{
+ memcpy(bi, &camera_board_info, sizeof(struct board_info));
+}
+
+__setup("cameraboard=", tegra_camera_board_info);
+
static int __init tegra_modem_id(char *id)
{
char *p = id;
@@ -653,6 +672,8 @@ int tegra_get_modem_id(void)
__setup("modem_id=", tegra_modem_id);
+
+
/*
* Tegra has a protected aperture that prevents access by most non-CPU
* memory masters to addresses above the aperture value. Enabling it