aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/dss/dsi.c44
-rw-r--r--include/video/omapdss.h3
2 files changed, 26 insertions, 21 deletions
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 06b578036497..e0d43b275e3e 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -3631,17 +3631,14 @@ static void dsi_config_vp_num_line_buffers(struct omap_dss_device *dssdev)
3631static void dsi_config_vp_sync_events(struct omap_dss_device *dssdev) 3631static void dsi_config_vp_sync_events(struct omap_dss_device *dssdev)
3632{ 3632{
3633 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); 3633 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
3634 int de_pol = dssdev->panel.dsi_vm_data.vp_de_pol;
3635 int hsync_pol = dssdev->panel.dsi_vm_data.vp_hsync_pol;
3636 int vsync_pol = dssdev->panel.dsi_vm_data.vp_vsync_pol;
3637 bool vsync_end = dssdev->panel.dsi_vm_data.vp_vsync_end; 3634 bool vsync_end = dssdev->panel.dsi_vm_data.vp_vsync_end;
3638 bool hsync_end = dssdev->panel.dsi_vm_data.vp_hsync_end; 3635 bool hsync_end = dssdev->panel.dsi_vm_data.vp_hsync_end;
3639 u32 r; 3636 u32 r;
3640 3637
3641 r = dsi_read_reg(dsidev, DSI_CTRL); 3638 r = dsi_read_reg(dsidev, DSI_CTRL);
3642 r = FLD_MOD(r, de_pol, 9, 9); /* VP_DE_POL */ 3639 r = FLD_MOD(r, 1, 9, 9); /* VP_DE_POL */
3643 r = FLD_MOD(r, hsync_pol, 10, 10); /* VP_HSYNC_POL */ 3640 r = FLD_MOD(r, 1, 10, 10); /* VP_HSYNC_POL */
3644 r = FLD_MOD(r, vsync_pol, 11, 11); /* VP_VSYNC_POL */ 3641 r = FLD_MOD(r, 1, 11, 11); /* VP_VSYNC_POL */
3645 r = FLD_MOD(r, 1, 15, 15); /* VP_VSYNC_START */ 3642 r = FLD_MOD(r, 1, 15, 15); /* VP_VSYNC_START */
3646 r = FLD_MOD(r, vsync_end, 16, 16); /* VP_VSYNC_END */ 3643 r = FLD_MOD(r, vsync_end, 16, 16); /* VP_VSYNC_END */
3647 r = FLD_MOD(r, 1, 17, 17); /* VP_HSYNC_START */ 3644 r = FLD_MOD(r, 1, 17, 17); /* VP_HSYNC_START */
@@ -4343,22 +4340,22 @@ EXPORT_SYMBOL(omap_dsi_update);
4343static int dsi_display_init_dispc(struct omap_dss_device *dssdev) 4340static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
4344{ 4341{
4345 int r; 4342 int r;
4343 struct omap_video_timings timings;
4346 4344
4347 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_CMD_MODE) { 4345 if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_CMD_MODE) {
4348 u16 dw, dh; 4346 u16 dw, dh;
4349 u32 irq; 4347 u32 irq;
4350 struct omap_video_timings timings = {
4351 .hsw = 1,
4352 .hfp = 1,
4353 .hbp = 1,
4354 .vsw = 1,
4355 .vfp = 0,
4356 .vbp = 0,
4357 };
4358 4348
4359 dssdev->driver->get_resolution(dssdev, &dw, &dh); 4349 dssdev->driver->get_resolution(dssdev, &dw, &dh);
4350
4360 timings.x_res = dw; 4351 timings.x_res = dw;
4361 timings.y_res = dh; 4352 timings.y_res = dh;
4353 timings.hsw = 1;
4354 timings.hfp = 1;
4355 timings.hbp = 1;
4356 timings.vsw = 1;
4357 timings.vfp = 0;
4358 timings.vbp = 0;
4362 4359
4363 irq = dispc_mgr_get_framedone_irq(dssdev->manager->id); 4360 irq = dispc_mgr_get_framedone_irq(dssdev->manager->id);
4364 4361
@@ -4371,15 +4368,26 @@ static int dsi_display_init_dispc(struct omap_dss_device *dssdev)
4371 4368
4372 dispc_mgr_enable_stallmode(dssdev->manager->id, true); 4369 dispc_mgr_enable_stallmode(dssdev->manager->id, true);
4373 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1); 4370 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 1);
4374
4375 dss_mgr_set_timings(dssdev->manager, &timings);
4376 } else { 4371 } else {
4372 timings = dssdev->panel.timings;
4373
4377 dispc_mgr_enable_stallmode(dssdev->manager->id, false); 4374 dispc_mgr_enable_stallmode(dssdev->manager->id, false);
4378 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 0); 4375 dispc_mgr_enable_fifohandcheck(dssdev->manager->id, 0);
4379
4380 dss_mgr_set_timings(dssdev->manager, &dssdev->panel.timings);
4381 } 4376 }
4382 4377
4378 /*
4379 * override interlace, logic level and edge related parameters in
4380 * omap_video_timings with default values
4381 */
4382 timings.interlace = false;
4383 timings.hsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
4384 timings.vsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
4385 timings.data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
4386 timings.de_level = OMAPDSS_SIG_ACTIVE_HIGH;
4387 timings.sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES;
4388
4389 dss_mgr_set_timings(dssdev->manager, &timings);
4390
4383 dispc_mgr_set_lcd_type_tft(dssdev->manager->id); 4391 dispc_mgr_set_lcd_type_tft(dssdev->manager->id);
4384 4392
4385 dispc_mgr_set_tft_data_lines(dssdev->manager->id, 4393 dispc_mgr_set_tft_data_lines(dssdev->manager->id,
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index d8ab94485c97..a6267a2d292b 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -261,9 +261,6 @@ struct omap_dss_dsi_videomode_data {
261 int hfp_blanking_mode; 261 int hfp_blanking_mode;
262 262
263 /* Video port sync events */ 263 /* Video port sync events */
264 int vp_de_pol;
265 int vp_hsync_pol;
266 int vp_vsync_pol;
267 bool vp_vsync_end; 264 bool vp_vsync_end;
268 bool vp_hsync_end; 265 bool vp_hsync_end;
269 266