diff options
author | Jihoon Bang <jbang@nvidia.com> | 2011-12-12 11:00:14 -0800 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-21 12:06:21 +0530 |
commit | ea8fd1600b0590293b917f0b3322a0b8be1220fe (patch) | |
tree | dafe6293e3f307449a837b03bb2e1113e8828b06 | |
parent | 57d2376b768c9eb8a9c669d5a06a9a75972b8669 (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.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/common.c | 21 |
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 |