From 60faf31d003b0d92cf652dd0502ae3d5a681863e Mon Sep 17 00:00:00 2001 From: "Tong, Bo" Date: Wed, 14 Mar 2012 12:54:28 +0800 Subject: [PATCH] Port a bunch of patches from R2 BZ: 17008 This patch includes below bug fixing 0001-HDMI-Fix-the-unnecessary-encoder_restore-action.patch: BZ: 20187 0002-GFX-Display-Fix-charging-screen-mess-issue.patch: BZ: 19361 0003-GFX-DISPLAY-fix-lock-screen-flip-issue-when-audio-is.patch: BZ: 20293 0004-GFX-Display-Add-support-for-some-modes-in-video-data.patch: BZ: 22978 0005-GFX-DISPLAY-improve-mipi-panel-init-stability.patch: BZ: 23028 0006-Display-HDMI-do-audio-busy-check-in-psb_runtime_susp.patch: BZ: 19448 0001-Revert-GFX-display-Audio-can-t-play-on-hdmi-after-su.patch: Orig-patch: 32311 Change-Id: Iab06b59e4b6bd0e895658278fbd81f350ed5a3f1 Signed-off-by: Tong, Bo Reviewed-on: http://android.intel.com:8080/35365 Reviewed-by: buildbot Tested-by: buildbot --- drivers/staging/mrst/drv/psb_drv.h | 4 ++ drivers/staging/mrst/drv/psb_fb.c | 4 +- drivers/staging/mrst/drv/psb_intel_display2.c | 11 ++++ drivers/staging/mrst/drv/psb_intel_hdmi.c | 44 +++++++++++++--- drivers/staging/mrst/drv/psb_intel_hdmi.h | 1 + drivers/staging/mrst/drv/psb_powermgmt.c | 60 ++++++++++------------ drivers/staging/mrst/drv/tmd_6x10_vid.c | 56 ++++++++++---------- .../linux_framebuffer_drm/drmlfb_displayclass.c | 8 ++- .../pvr/services4/system/intel_drm/sysconfig.c | 2 +- 9 files changed, 116 insertions(+), 74 deletions(-) diff --git a/drivers/staging/mrst/drv/psb_drv.h b/drivers/staging/mrst/drv/psb_drv.h index a659fd3..273d557 100644 --- a/drivers/staging/mrst/drv/psb_drv.h +++ b/drivers/staging/mrst/drv/psb_drv.h @@ -1064,6 +1064,10 @@ struct drm_psb_private { struct workqueue_struct *hpd_detect; pfn_screen_event_handler pvr_screen_event_handler; struct mutex dpms_mutex; + + /* fix Lock screen flip in resume issue */ + unsigned long init_screen_start; + unsigned long init_screen_offset; }; struct psb_fpriv { diff --git a/drivers/staging/mrst/drv/psb_fb.c b/drivers/staging/mrst/drv/psb_fb.c index 8e2b299..c3a5cbb 100644 --- a/drivers/staging/mrst/drv/psb_fb.c +++ b/drivers/staging/mrst/drv/psb_fb.c @@ -1151,9 +1151,9 @@ static int psbfb_create(struct psb_fbdev * fbdev, struct drm_fb_helper_surface_s drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); if (get_panel_type(dev, 0) == TMD_6X10_VID) - drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, sizes->fb_width-200, sizes->fb_height); + drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, fb->width, fb->height); else - drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, sizes->fb_width, sizes->fb_height); + drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper, fb->width, fb->height); info->fix.mmio_start = pci_resource_start(dev->pdev, 0); info->fix.mmio_len = pci_resource_len(dev->pdev, 0); diff --git a/drivers/staging/mrst/drv/psb_intel_display2.c b/drivers/staging/mrst/drv/psb_intel_display2.c index 04a557a..80b90b2 100644 --- a/drivers/staging/mrst/drv/psb_intel_display2.c +++ b/drivers/staging/mrst/drv/psb_intel_display2.c @@ -1359,10 +1359,12 @@ static int mdfld_crtc_dsi_mode_set(struct drm_crtc *crtc, struct psb_framebuffer *mdfld_fb; struct psb_intel_mode_device *mode_dev; struct mdfld_dsi_hw_context *ctx; + struct drm_psb_private *dev_priv; int fb_bpp; int fb_pitch; int fb_depth; int hdelay; + static int init_flag = 1; /*bootstrap flag*/ if (!crtc || !crtc->fb) { DRM_ERROR("Invalid CRTC\n"); @@ -1383,6 +1385,7 @@ static int mdfld_crtc_dsi_mode_set(struct drm_crtc *crtc, fb_pitch = crtc->fb->pitch; fb_depth = crtc->fb->depth; dev = crtc->dev; + dev_priv = (struct drm_psb_private *)dev->dev_private; mutex_lock(&dsi_config->context_lock); @@ -1427,6 +1430,14 @@ static int mdfld_crtc_dsi_mode_set(struct drm_crtc *crtc, ctx->dspsurf = mode_dev->bo_offset(dev, mdfld_fb); ctx->dsplinoff = y * fb_pitch + x * (fb_bpp / 8); + if (init_flag == 1) { + printk(KERN_DEBUG"%s: ctx->dspsurf = 0x%x, ctx->dsplinoff = 0x%x\n", + __func__, ctx->dsplinoff, ctx->dspsurf); + dev_priv->init_screen_start = ctx->dspsurf; + dev_priv->init_screen_offset = ctx->dsplinoff; + init_flag = 0; + } + switch (fb_bpp) { case 8: ctx->dspcntr = DISPPLANE_8BPP; diff --git a/drivers/staging/mrst/drv/psb_intel_hdmi.c b/drivers/staging/mrst/drv/psb_intel_hdmi.c index 6d44f74..f6acb96 100644 --- a/drivers/staging/mrst/drv/psb_intel_hdmi.c +++ b/drivers/staging/mrst/drv/psb_intel_hdmi.c @@ -164,10 +164,14 @@ static struct hdmi_edid_info mdfld_hdmi_edid[] = { }; mdfld_hdmi_timing_t mdfld_hdmi_video_mode_table[] = { - {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* 640*480/60 */ + {640, 480, 60, 25200, 800, 640, 800, 656, 752, 525, 480, 525, 490, 492}, + /* 720*480/60 */ + {720, 480, 60, 27027, 858, 720, 858, 736, 798, 525, 480, 525, 489, 495}, + /* 720*480/60-16:9 */ + {720, 480, 60, 27027, 858, 720, 858, 736, 798, 525, 480, 525, 489, 495}, + /* 1280*720/60 */ + {1280, 720, 60, 74250, 1650, 1280, 1650, 1390, 1430, 750, 720, 750, 725, 730}, {5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -183,7 +187,8 @@ mdfld_hdmi_timing_t mdfld_hdmi_video_mode_table[] = { {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* 1280*720/50 */ + {1280, 720, 50, 74250, 1980, 1280, 1980, 1720, 1760, 750, 720, 750, 725, 730}, {20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -397,6 +402,12 @@ static int mdfld_hdmi_set_avi_infoframe(struct drm_device *dev, PSB_DEBUG_ENTRY("%s\n", __func__); + if(unlikely(!mode)) + { + PSB_DEBUG_ENTRY("display mode is NULL!\n"); + return 0; + } + /*get edid infomation*/ if (connector && connector->edid_blob_ptr) { edid_block = connector->edid_blob_ptr->data; @@ -825,6 +836,8 @@ static void mdfld_hdmi_encoder_save(struct drm_encoder *encoder) int dspcntr_reg = DSPBCNTR; int dspbase_reg = MRST_DSPBBASE; struct drm_device *dev = encoder->dev; + struct psb_intel_output *output = enc_to_psb_intel_output(encoder); + struct mid_intel_hdmi_priv *hdmi_priv = output->dev_priv; u32 temp; PSB_DEBUG_ENTRY("\n"); @@ -832,6 +845,8 @@ static void mdfld_hdmi_encoder_save(struct drm_encoder *encoder) OSPM_UHB_FORCE_POWER_ON)) return ; + hdmi_priv->need_encoder_restore = true; + /*Use Disable pipeB plane to turn off HDMI screen in early_suspend */ temp = REG_READ(dspcntr_reg); @@ -849,6 +864,8 @@ static void mdfld_hdmi_encoder_restore(struct drm_encoder *encoder) { int dspcntr_reg = DSPBCNTR; int dspbase_reg = MRST_DSPBBASE; + int dspbsurf_reg = DSPBSURF; + int dspblinoff_reg = DSPBLINOFF; struct drm_device *dev = encoder->dev; struct drm_psb_private *dev_priv = (struct drm_psb_private *)dev->dev_private; @@ -857,10 +874,19 @@ static void mdfld_hdmi_encoder_restore(struct drm_encoder *encoder) u32 temp; PSB_DEBUG_ENTRY("\n"); + if(unlikely(!(hdmi_priv->need_encoder_restore))) + return; + + hdmi_priv->need_encoder_restore = false; + if (!ospm_power_using_hw_begin(OSPM_DISPLAY_ISLAND, OSPM_UHB_FORCE_POWER_ON)) return ; + /*Set DSPBSURF to systemBuffer temporary to avoid hdmi display last picture*/ + REG_WRITE(dspbsurf_reg, dev_priv->init_screen_start); + REG_WRITE(dspblinoff_reg, dev_priv->init_screen_offset); + /*Restore pipe B plane to turn on HDMI screen in late_resume*/ temp = REG_READ(dspcntr_reg); @@ -1661,7 +1687,9 @@ int mdfld_add_eedid_video_block_modes(struct drm_connector *connector, struct ed vic = *(c + j) & 0x7F; printk("vic: %d\n", vic); - if (vic == 34 || vic == 32 || vic == 33) { + if (vic == 34 || vic == 32 || vic == 33 || + vic == 1 || vic == 2 || vic == 3 || + vic == 4 || vic == 19) { p_video_mode = &mdfld_hdmi_video_mode_table[vic - 1]; mode = drm_mode_create(dev); @@ -1792,7 +1820,6 @@ static int mdfld_hdmi_get_modes(struct drm_connector *connector) ret += 1; } } - if (ret <= 0) { /* * Didn't get an EDID, so set wide sync ranges so we get all @@ -1861,7 +1888,7 @@ static int mdfld_hdmi_get_modes(struct drm_connector *connector) } } - return ret; + return ret; } static int mdfld_hdmi_mode_valid(struct drm_connector *connector, @@ -2043,6 +2070,7 @@ void mdfld_hdmi_init(struct drm_device *dev, /*FIXME: May need to get this somewhere, but CG code seems hard coded it*/ hdmi_priv->hdmib_reg = HDMIB_CONTROL; hdmi_priv->has_hdmi_sink = false; + hdmi_priv->need_encoder_restore = false; psb_intel_output->dev_priv = hdmi_priv; drm_encoder_helper_add(encoder, &mdfld_hdmi_helper_funcs); diff --git a/drivers/staging/mrst/drv/psb_intel_hdmi.h b/drivers/staging/mrst/drv/psb_intel_hdmi.h index ffbe87a..d61f316 100644 --- a/drivers/staging/mrst/drv/psb_intel_hdmi.h +++ b/drivers/staging/mrst/drv/psb_intel_hdmi.h @@ -927,6 +927,7 @@ struct mid_intel_hdmi_priv { struct drm_display_mode *edid_preferred_mode; bool is_hardcode_edid; struct drm_display_mode *current_mode; + bool need_encoder_restore; }; struct hdmi_edid_info { diff --git a/drivers/staging/mrst/drv/psb_powermgmt.c b/drivers/staging/mrst/drv/psb_powermgmt.c index e177a14..103b75b 100644 --- a/drivers/staging/mrst/drv/psb_powermgmt.c +++ b/drivers/staging/mrst/drv/psb_powermgmt.c @@ -1901,7 +1901,13 @@ int ospm_power_suspend(struct pci_dev *pdev, pm_message_t state) int videoenc_access_count; int videodec_access_count; int display_access_count; - +#if (defined(CONFIG_SND_INTELMID_HDMI_AUDIO) || \ + defined(CONFIG_SND_INTELMID_HDMI_AUDIO_MODULE)) + struct drm_psb_private *dev_priv = gpDrmDevice->dev_private; + struct snd_intel_had_interface *had_interface = dev_priv->had_interface; + int hdmi_audio_busy = 0; + pm_event_t hdmi_audio_event; +#endif if(gbSuspendInProgress || gbResumeInProgress) { #ifdef OSPM_GFX_DPK @@ -1912,18 +1918,31 @@ int ospm_power_suspend(struct pci_dev *pdev, pm_message_t state) #ifdef OSPM_GFX_DPK printk(KERN_ALERT "%s\n", __func__); #endif - mutex_lock(&g_ospm_mutex); if (!gbSuspended) { graphics_access_count = atomic_read(&g_graphics_access_count); videoenc_access_count = atomic_read(&g_videoenc_access_count); videodec_access_count = atomic_read(&g_videodec_access_count); display_access_count = atomic_read(&g_display_access_count); +#if (defined(CONFIG_SND_INTELMID_HDMI_AUDIO) || \ + defined(CONFIG_SND_INTELMID_HDMI_AUDIO_MODULE)) + if (dev_priv->had_pvt_data && hdmi_state) { + hdmi_audio_event.event = 0; + hdmi_audio_busy = + had_interface->suspend(dev_priv->had_pvt_data, + hdmi_audio_event); + } +#endif - if (graphics_access_count || - videoenc_access_count || - videodec_access_count || - display_access_count) + if (graphics_access_count + || videoenc_access_count + || videodec_access_count + || display_access_count +#if (defined(CONFIG_SND_INTELMID_HDMI_AUDIO) || \ + defined(CONFIG_SND_INTELMID_HDMI_AUDIO_MODULE)) + || hdmi_audio_busy +#endif + ) ret = -EBUSY; if (!ret) { gbSuspendInProgress = true; @@ -2494,39 +2513,12 @@ int psb_runtime_suspend(struct device *dev) pm_message_t state; int ret = 0; state.event = 0; - -#if (defined(CONFIG_SND_INTELMID_HDMI_AUDIO) || \ - defined(CONFIG_SND_INTELMID_HDMI_AUDIO_MODULE)) - struct drm_psb_private* dev_priv = gpDrmDevice->dev_private; - int hdmi_audio_busy = 0; - struct snd_intel_had_interface *had_interface = dev_priv->had_interface; - pm_event_t hdmi_audio_event; - char *uevent_string = NULL; - - if (dev_priv->had_pvt_data && hdmi_state) { - hdmi_audio_event.event = 0; - hdmi_audio_busy = - had_interface->suspend(dev_priv->had_pvt_data, - hdmi_audio_event); - - if (!hdmi_audio_busy) { - uevent_string = "HDMI_AUDIO_PM_SUSPENDED=1"; - psb_sysfs_uevent(dev_priv->dev, uevent_string); - } - } -#endif - #ifdef OSPM_GFX_DPK printk(KERN_ALERT "%s\n", __func__); #endif if (atomic_read(&g_graphics_access_count) || atomic_read(&g_videoenc_access_count) || (gbdispstatus == true) - || atomic_read(&g_videodec_access_count) || atomic_read(&g_display_access_count) -#if (defined(CONFIG_SND_INTELMID_HDMI_AUDIO) || \ - defined(CONFIG_SND_INTELMID_HDMI_AUDIO_MODULE)) - || hdmi_audio_busy -#endif - ) { + || atomic_read(&g_videodec_access_count) || atomic_read(&g_display_access_count)){ #ifdef OSPM_GFX_DPK printk(KERN_ALERT "GFX:%d VEC:%d VED:%d DC:%d DSR:%d\n", atomic_read(&g_graphics_access_count), diff --git a/drivers/staging/mrst/drv/tmd_6x10_vid.c b/drivers/staging/mrst/drv/tmd_6x10_vid.c index a67bfd2..aa924ce 100755 --- a/drivers/staging/mrst/drv/tmd_6x10_vid.c +++ b/drivers/staging/mrst/drv/tmd_6x10_vid.c @@ -99,34 +99,34 @@ void mdfld_dsi_pr2_ic_init(struct mdfld_dsi_config *dsi_config, int pipe) while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); - mdfld_dsi_send_gen_long_hs(sender, pr2_mcs_protect_off, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_pixel_format, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_dsi_control, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_panel_driving, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_v_timing, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_control, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_test_mode_0, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_h_timing, 4, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_can_skip, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_gamma_set_a, 4, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_gamma_set_b, 4, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_gamma_set_c, 4, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_charge_pump_setting, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_test_mode_1, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_source_amplifiers, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_power_supply_circuit, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_vreg_setting, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_test_mode_2, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_timing_control_0, 3, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_timing_control_1, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_timing_control_2, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_white_balance, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_vcs_setting, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_vcom_dc_setting, 1, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_test_mode_3, 2, 0); - mdfld_dsi_send_gen_long_hs(sender, pr2_mcs_protect_on, 1, 0); - mdfld_dsi_send_mcs_long_hs(sender, pr2_set_address_mode, 1, 0); - mdfld_dsi_send_mcs_long_hs(sender, pr2_set_pixel_format, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_mcs_protect_off, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_pixel_format, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_dsi_control, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_panel_driving, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_v_timing, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_control, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_0, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_h_timing, 4, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_can_skip, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_gamma_set_a, 4, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_gamma_set_b, 4, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_gamma_set_c, 4, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_charge_pump_setting, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_1, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_source_amplifiers, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_power_supply_circuit, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_vreg_setting, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_2, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_timing_control_0, 3, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_timing_control_1, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_timing_control_2, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_white_balance, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_vcs_setting, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_vcom_dc_setting, 1, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_3, 2, 0); + mdfld_dsi_send_gen_long_lp(sender, pr2_mcs_protect_on, 1, 0); + mdfld_dsi_send_mcs_long_lp(sender, pr2_set_address_mode, 1, 0); + mdfld_dsi_send_mcs_long_lp(sender, pr2_set_pixel_format, 1, 0); /* Now In Sleep Mode */ } diff --git a/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_drm/drmlfb_displayclass.c b/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_drm/drmlfb_displayclass.c index 665ac06..0c84d2b 100755 --- a/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_drm/drmlfb_displayclass.c +++ b/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_drm/drmlfb_displayclass.c @@ -65,7 +65,8 @@ static void SetAnchorPtr(MRSTLFB_DEVINFO *psDevInfo) static void MRSTLFBFlip(MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_BUFFER *psBuffer) { unsigned long ulAddr = (unsigned long)psBuffer->sDevVAddr.uiAddr; - struct fb_info *psLINFBInfo; + struct fb_info *psLINFBInfo; + static int FirstCleanFlag = 1; if (!psDevInfo->bSuspended && !psDevInfo->bLeaveVT) { @@ -77,6 +78,11 @@ static void MRSTLFBFlip(MRSTLFB_DEVINFO *psDevInfo, MRSTLFB_BUFFER *psBuffer) psLINFBInfo = psDevInfo->psLINFBInfo; psLINFBInfo->screen_base = psBuffer->sCPUVAddr; + + if (FirstCleanFlag == 1) { + memset(psDevInfo->sSystemBuffer.sCPUVAddr, 0, psDevInfo->sSystemBuffer.ui32BufferSize); + FirstCleanFlag = 0; + } } static void MRSTLFBRestoreLastFlip(MRSTLFB_DEVINFO *psDevInfo) diff --git a/drivers/staging/mrst/pvr/services4/system/intel_drm/sysconfig.c b/drivers/staging/mrst/pvr/services4/system/intel_drm/sysconfig.c index 1596002..f170e31 100755 --- a/drivers/staging/mrst/pvr/services4/system/intel_drm/sysconfig.c +++ b/drivers/staging/mrst/pvr/services4/system/intel_drm/sysconfig.c @@ -1270,7 +1270,7 @@ PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32 ui32DeviceIndex, #endif #ifdef CONFIG_GFX_RTPM - pm_schedule_suspend(&gpDrmDevice->pdev->dev, 0); + pm_request_idle(&gpDrmDevice->pdev->dev); #endif } -- 2.7.4