diff options
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 32 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_legacy_crtc.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_mode.h | 3 |
3 files changed, 40 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index b92d2f2fcbed..26935cf2c3b3 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
@@ -138,6 +138,38 @@ void radeon_crtc_load_lut(struct drm_crtc *crtc) | |||
138 | legacy_crtc_load_lut(crtc); | 138 | legacy_crtc_load_lut(crtc); |
139 | } | 139 | } |
140 | 140 | ||
141 | void radeon_crtc_save_lut(struct drm_crtc *crtc) | ||
142 | { | ||
143 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); | ||
144 | int i; | ||
145 | |||
146 | if (!crtc->enabled) | ||
147 | return; | ||
148 | |||
149 | for (i = 0; i < 256; i++) { | ||
150 | radeon_crtc->lut_r_copy[i] = radeon_crtc->lut_r[i]; | ||
151 | radeon_crtc->lut_g_copy[i] = radeon_crtc->lut_g[i]; | ||
152 | radeon_crtc->lut_b_copy[i] = radeon_crtc->lut_b[i]; | ||
153 | } | ||
154 | } | ||
155 | |||
156 | void radeon_crtc_restore_lut(struct drm_crtc *crtc) | ||
157 | { | ||
158 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); | ||
159 | int i; | ||
160 | |||
161 | if (!crtc->enabled) | ||
162 | return; | ||
163 | |||
164 | for (i = 0; i < 256; i++) { | ||
165 | radeon_crtc->lut_r[i] = radeon_crtc->lut_r_copy[i]; | ||
166 | radeon_crtc->lut_g[i] = radeon_crtc->lut_g_copy[i]; | ||
167 | radeon_crtc->lut_b[i] = radeon_crtc->lut_b_copy[i]; | ||
168 | } | ||
169 | |||
170 | radeon_crtc_load_lut(crtc); | ||
171 | } | ||
172 | |||
141 | /** Sets the color ramps on behalf of fbcon */ | 173 | /** Sets the color ramps on behalf of fbcon */ |
142 | void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, | 174 | void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, |
143 | u16 blue, int regno) | 175 | u16 blue, int regno) |
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c index 8752d3447b72..42954785247f 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c | |||
@@ -355,6 +355,11 @@ int radeon_crtc_set_base_atomic(struct drm_crtc *crtc, | |||
355 | struct drm_framebuffer *fb, | 355 | struct drm_framebuffer *fb, |
356 | int x, int y, int enter) | 356 | int x, int y, int enter) |
357 | { | 357 | { |
358 | if (enter) | ||
359 | radeon_crtc_save_lut(crtc); | ||
360 | else | ||
361 | radeon_crtc_restore_lut(crtc); | ||
362 | |||
358 | return radeon_crtc_do_set_base(crtc, fb, x, y, 1); | 363 | return radeon_crtc_do_set_base(crtc, fb, x, y, 1); |
359 | } | 364 | } |
360 | 365 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index c4116d3d8d06..2f78615f02aa 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h | |||
@@ -267,6 +267,7 @@ struct radeon_crtc { | |||
267 | struct drm_crtc base; | 267 | struct drm_crtc base; |
268 | int crtc_id; | 268 | int crtc_id; |
269 | u16 lut_r[256], lut_g[256], lut_b[256]; | 269 | u16 lut_r[256], lut_g[256], lut_b[256]; |
270 | u16 lut_r_copy[256], lut_g_copy[256], lut_b_copy[256]; | ||
270 | bool enabled; | 271 | bool enabled; |
271 | bool can_tile; | 272 | bool can_tile; |
272 | uint32_t crtc_offset; | 273 | uint32_t crtc_offset; |
@@ -512,6 +513,8 @@ extern int atombios_get_encoder_mode(struct drm_encoder *encoder); | |||
512 | extern void radeon_encoder_set_active_device(struct drm_encoder *encoder); | 513 | extern void radeon_encoder_set_active_device(struct drm_encoder *encoder); |
513 | 514 | ||
514 | extern void radeon_crtc_load_lut(struct drm_crtc *crtc); | 515 | extern void radeon_crtc_load_lut(struct drm_crtc *crtc); |
516 | extern void radeon_crtc_save_lut(struct drm_crtc *crtc); | ||
517 | extern void radeon_crtc_restore_lut(struct drm_crtc *crtc); | ||
515 | extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, | 518 | extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, |
516 | struct drm_framebuffer *old_fb); | 519 | struct drm_framebuffer *old_fb); |
517 | extern int atombios_crtc_set_base_atomic(struct drm_crtc *crtc, | 520 | extern int atombios_crtc_set_base_atomic(struct drm_crtc *crtc, |