From: yifei.xue Date: Tue, 29 May 2012 08:31:47 +0000 (+0800) Subject: Revert "Graphics: Lex display command mode support" X-Git-Tag: 2.1b_release~646 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e31a1e4b02b8f3ddbd2a984f3945e851ae19bc5;p=kernel%2Fkernel-mfld-blackbay.git Revert "Graphics: Lex display command mode support" BZ: 32664 This reverts commit 6a844894383789ecfdd760c8e617e21f212dbab4. Change-Id: I790ddcca5db5994a1c1cb44aa210fdd1dca4f314 Signed-off-by: Erwan Mahe Reviewed-on: http://android.intel.com:8080/52034 --- diff --git a/drivers/staging/mrst/drv/gi_sony_cmd.c b/drivers/staging/mrst/drv/gi_sony_cmd.c index a8263e5..2a24396 100644 --- a/drivers/staging/mrst/drv/gi_sony_cmd.c +++ b/drivers/staging/mrst/drv/gi_sony_cmd.c @@ -75,7 +75,7 @@ static void mdfld_ms_delay(enum delay_type d_type, int delay) static u32 gi_l5f3_set_column_add[] = {0x0100002a, 0x0000003f}; static u32 gi_l5f3_set_row_add[] = {0x0100002b, 0x000000df}; /* static u32 gi_l5f3_set_address_mode[] = {0x00004036}; */ -static u32 gi_l5f3_set_address_mode[] = {0x0000C036}; +static u32 gi_l5f3_set_address_mode[] = {0x00000036}; static u32 gi_l5f3_set_pixel_format[] = {0x0000773a}; static u32 gi_l5f3_set_te_scanline[] = {0x00000044}; static u32 gi_l5f3_set_tear_on[] = {0x00000035}; @@ -238,14 +238,12 @@ mdfld_gi_sony_dsi_controller_init(struct mdfld_dsi_config *dsi_config, hw_ctx->eot_disable = 0x0; hw_ctx->lp_byteclk = 0x0; hw_ctx->clk_lane_switch_time_cnt = 0xa0014; - hw_ctx->dphy_param = 0x150a600f; + hw_ctx->dphy_param = 0x120a2b07; hw_ctx->dbi_bw_ctrl = 0x820; - if (dev_priv->platform_rev_id == MDFLD_PNW_A0) - hw_ctx->mipi = PASS_FROM_SPHY_TO_AFE | - SEL_FLOPPED_HSTX | TE_TRIGGER_GPIO_PIN; + hw_ctx->mipi = PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX; else - hw_ctx->mipi = PASS_FROM_SPHY_TO_AFE | TE_TRIGGER_GPIO_PIN; + hw_ctx->mipi = PASS_FROM_SPHY_TO_AFE; /*set up func_prg*/ hw_ctx->dsi_func_prg = (0xa000 | lane_count); @@ -616,6 +614,7 @@ static int mdfld_gi_sony_dsi_dbi_power_on(struct drm_encoder *encoder) if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, OSPM_UHB_FORCE_POWER_ON)) return -EAGAIN; + /* HW-Reset */ if (p_funcs && p_funcs->reset) p_funcs->reset(dsi_config, RESET_FROM_OSPM_RESUME); @@ -644,10 +643,6 @@ static int mdfld_gi_sony_dsi_dbi_power_on(struct drm_encoder *encoder) /* Enable DSI Controller */ REG_WRITE(regs->device_ready_reg, BIT0); - /*panel drvIC init*/ - if (p_funcs->drv_ic_init) - p_funcs->drv_ic_init(dsi_config, 0); - /* * Different panel may have different ways to have * panel turned on. Support it! @@ -659,6 +654,7 @@ static int mdfld_gi_sony_dsi_dbi_power_on(struct drm_encoder *encoder) goto power_on_err; } } + power_on_err: ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); return err; @@ -1105,8 +1101,12 @@ static void gi_sony_dsi_dbi_update_fb(struct mdfld_dsi_dbi_output *dbi_output, 0, CMD_DATA_SRC_PIPE, MDFLD_DSI_SEND_PACKAGE); + + mdfld_dsi_gen_fifo_ready(dev, GEN_FIFO_STAT_REG, + HS_CTRL_FIFO_EMPTY | HS_DATA_FIFO_EMPTY); + REG_WRITE(HS_GEN_CTRL_REG, (1 << WORD_COUNTS_POS) | GEN_READ_0); + dbi_output->dsr_fb_update_done = true; - mdfld_dsi_cmds_kick_out(sender); update_fb_out0: ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); @@ -1245,12 +1245,6 @@ static int mdfld_gi_sony_dsi_panel_reset(struct mdfld_dsi_config *dsi_config, { static bool b_gpio_required[PSB_NUM_PIPE] = {0}; int ret = 0; - struct mdfld_dsi_hw_registers *regs = NULL; - struct drm_device *dev = dsi_config->dev; - - PSB_DEBUG_ENTRY("\n"); - - regs = &dsi_config->regs; if (reset_from == RESET_FROM_BOOT_UP) { b_gpio_required[dsi_config->pipe] = false; @@ -1268,17 +1262,21 @@ static int mdfld_gi_sony_dsi_panel_reset(struct mdfld_dsi_config *dsi_config, } b_gpio_required[dsi_config->pipe] = true; - - /* if FW initialized in video mode , use power off/on, - display island to reset total display controller*/ - if (!(REG_READ(regs->pipeconf_reg) & BIT26) && - (REG_READ(regs->mipi_reg) & BIT31)) { - /*reset the display island - to switch DPI to DBI*/ - printk(KERN_INFO "power on/off to reset\n"); - ospm_power_island_down(OSPM_DISPLAY_ISLAND); - ospm_power_island_up(OSPM_DISPLAY_ISLAND); +#if 0 + /* + * for get date from panel side is not easy, so here use + * display side setting to judge wheather panel have enabled or + * not by FW + */ + if ((REG_READ(regs->dpll_reg) & BIT31) && + (REG_READ(regs->pipeconf_reg) & BIT30) && + (REG_READ(regs->mipi_reg) & BIT31)) { + PSB_DEBUG_ENTRY("FW has initialized the panel, skip" + "reset during boot up\n."); + psb_enable_vblank(dev, dsi_config->pipe); + goto fun_exit; } +#endif } if (b_gpio_required[dsi_config->pipe]) { @@ -1409,7 +1407,7 @@ int mdfld_gi_sony_power_on(struct drm_encoder *encoder) mdfld_ms_delay(MSLEEP, 50); - /*mdfld_dbi_dsr_timer_start(dev_priv->dbi_dsr_info);*/ + mdfld_dbi_dsr_timer_start(dev_priv->dbi_dsr_info); power_err: ospm_power_using_hw_end(OSPM_DISPLAY_ISLAND); return err; diff --git a/drivers/staging/mrst/drv/mdfld_dsi_dbi.c b/drivers/staging/mrst/drv/mdfld_dsi_dbi.c index 551019a..f948faa 100644 --- a/drivers/staging/mrst/drv/mdfld_dsi_dbi.c +++ b/drivers/staging/mrst/drv/mdfld_dsi_dbi.c @@ -643,7 +643,6 @@ int mdfld_dsi_dbi_async_flip_fb_update(struct drm_device *dev, int pipe) struct mdfld_dsi_pkg_sender *sender = NULL; int ret = IMG_TRUE; int err = 0; - u32 damage_mask = 0; u32 dsplinoff_reg = DSPALINOFF; u32 dspsurf_reg = DSPASURF; @@ -663,35 +662,25 @@ int mdfld_dsi_dbi_async_flip_fb_update(struct drm_device *dev, int pipe) goto fun_exit; } - if (pipe == 0) - damage_mask = dev_priv->dsr_fb_update & MDFLD_DSR_DAMAGE_MASK_0; - else if (pipe == 2) - damage_mask = dev_priv->dsr_fb_update & MDFLD_DSR_DAMAGE_MASK_2; - else - goto fun_exit; - - if (damage_mask) { - sender = mdfld_dsi_encoder_get_pkg_sender(&dbi_output->base); + sender = mdfld_dsi_encoder_get_pkg_sender(&dbi_output->base); - /* refresh plane changes */ - REG_WRITE(dsplinoff_reg, REG_READ(dsplinoff_reg)); - REG_WRITE(dspsurf_reg, REG_READ(dspsurf_reg)); - REG_READ(dspsurf_reg); + /* refresh plane changes */ + REG_WRITE(dsplinoff_reg, REG_READ(dsplinoff_reg)); + REG_WRITE(dspsurf_reg, REG_READ(dspsurf_reg)); + REG_READ(dspsurf_reg); - err = mdfld_dsi_send_dcs(sender, - write_mem_start, - NULL, - 0, - CMD_DATA_SRC_PIPE, - MDFLD_DSI_SEND_PACKAGE); + err = mdfld_dsi_send_dcs(sender, + write_mem_start, + NULL, + 0, + CMD_DATA_SRC_PIPE, + MDFLD_DSI_SEND_PACKAGE); - if (err) { - DRM_ERROR( - "Error returned from mdfld_dsi_send_dcs: %d\n", ret); - ret = IMG_FALSE; - goto fun_exit; - } - dev_priv->dsr_fb_update &= ~damage_mask; + if (err) { + DRM_ERROR( + "Error returned from mdfld_dsi_send_dcs: %d\n", ret); + ret = IMG_FALSE; + goto fun_exit; } fun_exit: diff --git a/drivers/staging/mrst/drv/psb_drv.c b/drivers/staging/mrst/drv/psb_drv.c index 84826c6..55dd5a1 100644 --- a/drivers/staging/mrst/drv/psb_drv.c +++ b/drivers/staging/mrst/drv/psb_drv.c @@ -3343,38 +3343,28 @@ static int psb_register_rw_ioctl(struct drm_device *dev, void *data, PSB_WVDC32(arg->overlay.OVADD, OV_OVADD); - if (is_panel_vid_or_cmd(dev) == MDFLD_DSI_ENCODER_DPI) { - if (arg->overlay.b_wait_vblank) - overlay_wait_vblank(dev, - file_priv, - arg->overlay.OVADD); - } + if (arg->overlay.b_wait_vblank) + overlay_wait_vblank(dev, + file_priv, + arg->overlay.OVADD); if (IS_MDFLD(dev)) { - if (is_panel_vid_or_cmd(dev) == MDFLD_DSI_ENCODER_DBI) { - if ((((arg->overlay.OVADD & OV_PIPE_SELECT) >> - OV_PIPE_SELECT_POS) == OV_PIPE_A)) { + if ((((arg->overlay.OVADD & OV_PIPE_SELECT) >> OV_PIPE_SELECT_POS) == OV_PIPE_A) + && (!(dev_priv->dsr_fb_update & MDFLD_DSR_OVERLAY_0))) { #ifndef CONFIG_MDFLD_DSI_DPU - mdfld_dsi_dbi_exit_dsr(dev, MDFLD_DSR_OVERLAY_0, 0, 0); - if (dev_priv->b_async_flip_enable && - dev_priv->async_flip_update_fb) - dev_priv->async_flip_update_fb(dev, 0); + mdfld_dsi_dbi_exit_dsr(dev, MDFLD_DSR_OVERLAY_0, 0, 0); #else - /*TODO: report overlay damage*/ + /*TODO: report overlay damage*/ #endif - } + } - if ((((arg->overlay.OVADD & OV_PIPE_SELECT) >> - OV_PIPE_SELECT_POS) == OV_PIPE_C)) { + if ((((arg->overlay.OVADD & OV_PIPE_SELECT) >> OV_PIPE_SELECT_POS) == OV_PIPE_C) + && (!(dev_priv->dsr_fb_update & MDFLD_DSR_OVERLAY_2))) { #ifndef CONFIG_MDFLD_DSI_DPU - mdfld_dsi_dbi_exit_dsr(dev, MDFLD_DSR_OVERLAY_2, 0, 0); - if (dev_priv->b_async_flip_enable && - dev_priv->async_flip_update_fb) - dev_priv->async_flip_update_fb(dev, 2); + mdfld_dsi_dbi_exit_dsr(dev, MDFLD_DSR_OVERLAY_2, 0, 0); #else - /*TODO: report overlay damage*/ + /*TODO: report overlay damage*/ #endif - } } if (arg->overlay.IEP_ENABLED) { diff --git a/drivers/staging/mrst/drv/psb_intel_display2.c b/drivers/staging/mrst/drv/psb_intel_display2.c index d9a395f..ca2f063 100755 --- a/drivers/staging/mrst/drv/psb_intel_display2.c +++ b/drivers/staging/mrst/drv/psb_intel_display2.c @@ -1223,6 +1223,7 @@ static void mdfld_crtc_dpms(struct drm_crtc *crtc, int mode) case DRM_MODE_DPMS_SUSPEND: /* Enable the DPLL */ temp = REG_READ(dpll_reg); + if ((temp & DPLL_VCO_ENABLE) == 0) { /* When ungating power of DPLL, needs to wait 0.5us before enable the VCO */ if (temp & MDFLD_PWR_GATE_EN) { @@ -1358,8 +1359,7 @@ static void mdfld_crtc_dpms(struct drm_crtc *crtc, int mode) * FIXME: better to move it into the MIPI * encoder DPMS off process. */ - if ((get_panel_type(dev, pipe) == AUO_SC1_CMD) && - pipe < sizeof(dev_priv->dsi_configs)/sizeof(*(dev_priv->dsi_configs))) { + if (get_panel_type(dev, pipe) == AUO_SC1_CMD && pipe < sizeof(dev_priv->dsi_configs)/sizeof(*(dev_priv->dsi_configs))) { dsi_config = dev_priv->dsi_configs[pipe]; regs = &dsi_config->regs; @@ -1393,11 +1393,6 @@ static void mdfld_crtc_dpms(struct drm_crtc *crtc, int mode) } #endif } - if (get_panel_type(dev, pipe) == GI_SONY_CMD) { - /*reset the display island to switch DPI to DBI*/ - ospm_power_island_down(OSPM_DISPLAY_ISLAND); - ospm_power_island_up(OSPM_DISPLAY_ISLAND); - } } break; } diff --git a/drivers/staging/mrst/drv/psb_irq.c b/drivers/staging/mrst/drv/psb_irq.c index 528a001..43428c5 100644 --- a/drivers/staging/mrst/drv/psb_irq.c +++ b/drivers/staging/mrst/drv/psb_irq.c @@ -985,7 +985,8 @@ int psb_enable_vblank(struct drm_device *dev, int pipe) PSB_DEBUG_ENTRY("\n"); if (IS_MDFLD(dev) && (dev_priv->platform_rev_id != MDFLD_PNW_A0) && - !is_panel_vid_or_cmd(dev)) + !is_panel_vid_or_cmd(dev) && + (get_panel_type(dev, pipe) != GI_SONY_CMD)) return mdfld_enable_te(dev, pipe); if (ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, OSPM_UHB_ONLY_IF_ON)) { @@ -1021,7 +1022,8 @@ void psb_disable_vblank(struct drm_device *dev, int pipe) PSB_DEBUG_ENTRY("\n"); if (IS_MDFLD(dev) && (dev_priv->platform_rev_id != MDFLD_PNW_A0) && - !is_panel_vid_or_cmd(dev)) + !is_panel_vid_or_cmd(dev) && + (get_panel_type(dev, pipe) != GI_SONY_CMD)) mdfld_disable_te(dev, pipe); dev_priv->b_vblank_enable = false;