|
@@ -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,6 +284,7 @@ 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,
|
|
@@ -309,6 +334,7 @@ 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, 0);
|
|
|
}
|