diff options
author | Tom Cherry <tcherry@nvidia.com> | 2012-02-29 17:39:50 -0800 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-03-30 20:26:24 -0700 |
commit | af21306556d361eb9aabfeb95ca96013ec780143 (patch) | |
tree | 4fe2ec1ced78493cacb64d2586ce17abdd294c5f /arch/arm/mach-tegra/board-enterprise-panel.c | |
parent | 4436e2542c11146d701cfc2aab2ac78cae9f8543 (diff) |
ARM: tegra: enterprise: Add A03/A04 support
Bug 939799
Reviewed-on: http://git-master/r/90824
(cherry-picked from commit 8c556f816196c17e059db2c11b966ca89848efa3)
Change-Id: I67b26958862b8b60217c2750fe0b2eef3013d9b3
Signed-off-by: Tom Cherry <tcherry@nvidia.com>
Reviewed-on: http://git-master/r/92409
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-enterprise-panel.c')
-rw-r--r-- | arch/arm/mach-tegra/board-enterprise-panel.c | 79 |
1 files changed, 74 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/board-enterprise-panel.c b/arch/arm/mach-tegra/board-enterprise-panel.c index fe9186747865..2d5b80892f6d 100644 --- a/arch/arm/mach-tegra/board-enterprise-panel.c +++ b/arch/arm/mach-tegra/board-enterprise-panel.c @@ -62,7 +62,8 @@ #define enterprise_lcd_te TEGRA_GPIO_PJ1 #ifdef CONFIG_TEGRA_DC -static struct regulator *enterprise_dsi_reg = NULL; +static struct regulator *enterprise_dsi_reg; +static struct regulator *enterprise_lcd_reg; static struct regulator *enterprise_hdmi_reg; static struct regulator *enterprise_hdmi_pll; @@ -71,7 +72,7 @@ static struct regulator *enterprise_hdmi_vddio; static atomic_t sd_brightness = ATOMIC_INIT(255); -static tegra_dc_bl_output enterprise_bl_output_measured = { +static tegra_dc_bl_output enterprise_bl_output_measured_a02 = { 1, 5, 9, 10, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 21, 21, @@ -106,6 +107,42 @@ static tegra_dc_bl_output enterprise_bl_output_measured = { 183, 184, 185, 186, 186, 187, 188, 188 }; +/* TODO: Measure BL response for this table */ +static tegra_dc_bl_output enterprise_bl_output_measured_a03 = { + 0, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, +}; + static p_tegra_dc_bl_output bl_output; static bool kernel_1st_panel_init = true; @@ -421,6 +458,9 @@ static struct tegra_dc_platform_data enterprise_disp2_pdata = { static int enterprise_dsi_panel_enable(void) { int ret; + struct board_info board_info; + + tegra_get_board_info(&board_info); if (enterprise_dsi_reg == NULL) { enterprise_dsi_reg = regulator_get(NULL, "avdd_dsi_csi"); @@ -438,6 +478,26 @@ static int enterprise_dsi_panel_enable(void) } #if DSI_PANEL_RESET + + if (board_info.fab >= BOARD_FAB_A03) { + if (enterprise_lcd_reg == NULL) { + enterprise_lcd_reg = regulator_get(NULL, "lcd_vddio_en"); + if (IS_ERR_OR_NULL(enterprise_lcd_reg)) { + pr_err("Could not get regulator lcd_vddio_en\n"); + ret = PTR_ERR(enterprise_lcd_reg); + enterprise_lcd_reg = NULL; + return ret; + } + } + if (enterprise_lcd_reg != NULL) { + ret = regulator_enable(enterprise_lcd_reg); + if (ret < 0) { + pr_err("Could not enable lcd_vddio_en\n"); + return ret; + } + } + } + if (kernel_1st_panel_init != true) { ret = gpio_request(enterprise_dsi_panel_reset, "panel reset"); if (ret < 0) @@ -462,6 +522,9 @@ static int enterprise_dsi_panel_enable(void) static int enterprise_dsi_panel_disable(void) { + if (enterprise_lcd_reg != NULL) + regulator_disable(enterprise_lcd_reg); + #if DSI_PANEL_RESET if (kernel_1st_panel_init != true) { tegra_gpio_disable(enterprise_dsi_panel_reset); @@ -750,11 +813,17 @@ int __init enterprise_panel_init(void) { int err; struct resource __maybe_unused *res; + struct board_info board_info; - bl_output = enterprise_bl_output_measured; + tegra_get_board_info(&board_info); - if (WARN_ON(ARRAY_SIZE(enterprise_bl_output_measured) != 256)) - pr_err("bl_output array does not have 256 elements\n"); + BUILD_BUG_ON(ARRAY_SIZE(enterprise_bl_output_measured_a03) != 256); + BUILD_BUG_ON(ARRAY_SIZE(enterprise_bl_output_measured_a02) != 256); + + if (board_info.fab >= BOARD_FAB_A03) + bl_output = enterprise_bl_output_measured_a03; + else + bl_output = enterprise_bl_output_measured_a02; enterprise_dsi.chip_id = tegra_get_chipid(); enterprise_dsi.chip_rev = tegra_get_revision(); |