summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorVineel Kumar Reddy Kovvuri <vineelkumarr@nvidia.com>2014-06-04 11:28:03 +0530
committerMandar Padmawar <mpadmawar@nvidia.com>2014-06-11 06:52:13 -0700
commitbe4cca7d245353143855b59698f3a4c1d7e81580 (patch)
treee61c66dcb9374e0686674d4a0224f3ee01c2d9d9 /drivers/video
parent53c6b2a98d5d686707f8e766e7f5ddd241cb6593 (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.c66
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;