diff options
Diffstat (limited to 'drivers/gpu/drm/drm_fb_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_fb_helper.c | 27 | 
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 95072047396..11d7a72c22d 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -342,9 +342,22 @@ int drm_fb_helper_debug_leave(struct fb_info *info)  }  EXPORT_SYMBOL(drm_fb_helper_debug_leave); +bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper) +{ +	bool error = false; +	int i, ret; +	for (i = 0; i < fb_helper->crtc_count; i++) { +		struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set; +		ret = drm_crtc_helper_set_config(mode_set); +		if (ret) +			error = true; +	} +	return error; +} +EXPORT_SYMBOL(drm_fb_helper_restore_fbdev_mode); +  bool drm_fb_helper_force_kernel_mode(void)  { -	int i = 0;  	bool ret, error = false;  	struct drm_fb_helper *helper; @@ -352,12 +365,12 @@ bool drm_fb_helper_force_kernel_mode(void)  		return false;  	list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { -		for (i = 0; i < helper->crtc_count; i++) { -			struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set; -			ret = drm_crtc_helper_set_config(mode_set); -			if (ret) -				error = true; -		} +		if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF) +			continue; + +		ret = drm_fb_helper_restore_fbdev_mode(helper); +		if (ret) +			error = true;  	}  	return error;  }  |