diff options
Diffstat (limited to 'drivers/gpu/drm/drm_fb_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_fb_helper.c | 32 | 
1 files changed, 29 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 6a5e403f9aa..d2849e4ea4d 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -242,6 +242,30 @@ static int drm_fb_helper_parse_command_line(struct drm_fb_helper *fb_helper)  	return 0;  } +static void drm_fb_helper_save_lut_atomic(struct drm_crtc *crtc, struct drm_fb_helper *helper) +{ +	uint16_t *r_base, *g_base, *b_base; +	int i; + +	r_base = crtc->gamma_store; +	g_base = r_base + crtc->gamma_size; +	b_base = g_base + crtc->gamma_size; + +	for (i = 0; i < crtc->gamma_size; i++) +		helper->funcs->gamma_get(crtc, &r_base[i], &g_base[i], &b_base[i], i); +} + +static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc) +{ +	uint16_t *r_base, *g_base, *b_base; + +	r_base = crtc->gamma_store; +	g_base = r_base + crtc->gamma_size; +	b_base = g_base + crtc->gamma_size; + +	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size); +} +  int drm_fb_helper_debug_enter(struct fb_info *info)  {  	struct drm_fb_helper *helper = info->par; @@ -260,11 +284,12 @@ int drm_fb_helper_debug_enter(struct fb_info *info)  				continue;  			funcs =	mode_set->crtc->helper_private; +			drm_fb_helper_save_lut_atomic(mode_set->crtc, helper);  			funcs->mode_set_base_atomic(mode_set->crtc,  						    mode_set->fb,  						    mode_set->x, -						    mode_set->y); - +						    mode_set->y, +						    ENTER_ATOMIC_MODE_SET);  		}  	} @@ -308,8 +333,9 @@ int drm_fb_helper_debug_leave(struct fb_info *info)  			continue;  		} +		drm_fb_helper_restore_lut_atomic(mode_set->crtc);  		funcs->mode_set_base_atomic(mode_set->crtc, fb, crtc->x, -					    crtc->y); +					    crtc->y, LEAVE_ATOMIC_MODE_SET);  	}  	return 0;  | 
