diff options
author | Vineel Kumar Reddy Kovvuri <vineelkumarr@nvidia.com> | 2014-06-04 11:28:03 +0530 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-06-11 06:52:13 -0700 |
commit | be4cca7d245353143855b59698f3a4c1d7e81580 (patch) | |
tree | e61c66dcb9374e0686674d4a0224f3ee01c2d9d9 /drivers/video | |
parent | 53c6b2a98d5d686707f8e766e7f5ddd241cb6593 (diff) |
video: tegra: dsi: re-init DSI in seamless
This patch re-initializes dsi in the kernel even
in seamless mode. This helps reduce the dependency
with bootloader set dsi configuration
Bug 200006804
Bug 1510417
Change-Id: I2f9ae5efd467b95b5d3b0f6568c2379f4f68522e
Signed-off-by: Vineel Kumar Reddy Kovvuri <vineelkumarr@nvidia.com>
Reviewed-on: http://git-master/r/418332
(cherry picked from commit 4e9583d8ceeabb393d355a53641b12c03d8be0e2)
Reviewed-on: http://git-master/r/419541
Reviewed-by: Animesh Kishore <ankishore@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/tegra/dc/dsi.c | 66 |
1 files changed, 22 insertions, 44 deletions
diff --git a/drivers/video/tegra/dc/dsi.c b/drivers/video/tegra/dc/dsi.c index 3668768bbca8..bf8d0d34f7ed 100644 --- a/drivers/video/tegra/dc/dsi.c +++ b/drivers/video/tegra/dc/dsi.c @@ -1968,15 +1968,24 @@ static void tegra_dsi_set_control_reg_lp(struct tegra_dc_dsi_data *dsi) static void tegra_dsi_set_control_reg_hs(struct tegra_dc_dsi_data *dsi, u8 driven_mode) { - u32 dsi_control; - u32 host_dsi_control; - u32 max_threshold; - u32 dcs_cmd; - - dsi_control = dsi->dsi_control_val; - host_dsi_control = HOST_DSI_CTRL_COMMON; - max_threshold = 0; - dcs_cmd = 0; + u32 dsi_control = dsi->dsi_control_val; + u32 host_dsi_control = HOST_DSI_CTRL_COMMON; + u32 max_threshold = 0; + u32 dcs_cmd = 0; + + if (dsi->dc->out->flags & TEGRA_DC_OUT_INITIALIZED_MODE) { + if (dsi->info.video_clock_mode == + TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS) { + dsi_control |= DSI_CONTROL_HS_CLK_CTRL(CONTINUOUS); + dsi->status.clk_mode = DSI_PHYCLK_CONTINUOUS; + } else { + dsi_control |= DSI_CONTROL_HS_CLK_CTRL(TX_ONLY); + dsi->status.clk_mode = DSI_PHYCLK_TX_ONLY; + } + host_dsi_control |= + DSI_HOST_DSI_CONTROL_HIGH_SPEED_TRANS(TEGRA_DSI_HIGH); + dsi->status.clk_out = DSI_PHYCLK_OUT_EN; + } if (driven_mode == TEGRA_DSI_DRIVEN_BY_HOST) { dsi_control |= DSI_CTRL_HOST_DRIVEN; @@ -3824,38 +3833,15 @@ static void tegra_dsi_setup_initialized_panel(struct tegra_dc_dsi_data *dsi) if (dsi->avdd_dsi_csi) err = regulator_enable(dsi->avdd_dsi_csi); - WARN(err, "unable to enable regulator"); + dev_warn(&dsi->dc->ndev->dev, + "unable to enable regulator err = %d", err); dsi->status.init = DSI_MODULE_INIT; - dsi->status.lphs = DSI_LPHS_IN_HS_MODE; - dsi->status.driven = DSI_DRIVEN_MODE_DC; - dsi->driven_mode = TEGRA_DSI_DRIVEN_BY_DC; - dsi->status.clk_out = DSI_PHYCLK_OUT_EN; - dsi->status.lp_op = DSI_LP_OP_NOT_INIT; - dsi->status.dc_stream = DSI_DC_STREAM_ENABLE; - - if (dsi->info.video_clock_mode == TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS) - dsi->status.clk_mode = DSI_PHYCLK_CONTINUOUS; - else - dsi->status.clk_mode = DSI_PHYCLK_TX_ONLY; - - if (!(dsi->info.ganged_type)) { - if (dsi->info.video_burst_mode == - TEGRA_DSI_VIDEO_NONE_BURST_MODE || - dsi->info.video_burst_mode == - TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END) - dsi->status.clk_burst = DSI_CLK_BURST_NONE_BURST; - else - dsi->status.clk_burst = DSI_CLK_BURST_BURST_MODE; - } - - if (dsi->info.video_data_type == TEGRA_DSI_VIDEO_TYPE_COMMAND_MODE) - dsi->status.vtype = DSI_VIDEO_TYPE_CMD_MODE; - else - dsi->status.vtype = DSI_VIDEO_TYPE_VIDEO_MODE; tegra_dsi_clk_enable(dsi); + tegra_dsi_set_to_hs_mode(dsi->dc, dsi, TEGRA_DSI_DRIVEN_BY_DC); + dsi->host_suspended = false; dsi->enabled = true; } @@ -3867,10 +3853,6 @@ static void tegra_dc_dsi_enable(struct tegra_dc *dc) mutex_lock(&dsi->lock); tegra_dc_io_start(dc); - /* - * Do not program this panel as the bootloader as has already - * initialized it. This avoids periods of blanking during boot. - */ if (dc->out->flags & TEGRA_DC_OUT_INITIALIZED_MODE) { tegra_dsi_setup_initialized_panel(dsi); goto fail; @@ -3973,10 +3955,6 @@ static void tegra_dc_dsi_postpoweron(struct tegra_dc *dc) struct tegra_dc_dsi_data *dsi = tegra_dc_get_outdata(dc); int err = 0; - /* - * Do not configure. Use bootloader configuration. - * This avoids periods of blanking during boot. - */ if (dc->out->flags & TEGRA_DC_OUT_INITIALIZED_MODE) return; |