diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_fb.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_fb.c | 48 |
1 files changed, 17 insertions, 31 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c index 7214858ffcea..26da2f4d7b4f 100644 --- a/drivers/gpu/drm/radeon/radeon_fb.c +++ b/drivers/gpu/drm/radeon/radeon_fb.c | |||
@@ -48,40 +48,10 @@ struct radeon_fbdev { | |||
48 | struct radeon_device *rdev; | 48 | struct radeon_device *rdev; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | /** | ||
52 | * radeon_fb_helper_set_par - Hide cursor on CRTCs used by fbdev. | ||
53 | * | ||
54 | * @info: fbdev info | ||
55 | * | ||
56 | * This function hides the cursor on all CRTCs used by fbdev. | ||
57 | */ | ||
58 | static int radeon_fb_helper_set_par(struct fb_info *info) | ||
59 | { | ||
60 | int ret; | ||
61 | |||
62 | ret = drm_fb_helper_set_par(info); | ||
63 | |||
64 | /* XXX: with universal plane support fbdev will automatically disable | ||
65 | * all non-primary planes (including the cursor) | ||
66 | */ | ||
67 | if (ret == 0) { | ||
68 | struct drm_fb_helper *fb_helper = info->par; | ||
69 | int i; | ||
70 | |||
71 | for (i = 0; i < fb_helper->crtc_count; i++) { | ||
72 | struct drm_crtc *crtc = fb_helper->crtc_info[i].mode_set.crtc; | ||
73 | |||
74 | radeon_crtc_cursor_set2(crtc, NULL, 0, 0, 0, 0, 0); | ||
75 | } | ||
76 | } | ||
77 | |||
78 | return ret; | ||
79 | } | ||
80 | |||
81 | static struct fb_ops radeonfb_ops = { | 51 | static struct fb_ops radeonfb_ops = { |
82 | .owner = THIS_MODULE, | 52 | .owner = THIS_MODULE, |
83 | .fb_check_var = drm_fb_helper_check_var, | 53 | .fb_check_var = drm_fb_helper_check_var, |
84 | .fb_set_par = radeon_fb_helper_set_par, | 54 | .fb_set_par = drm_fb_helper_set_par, |
85 | .fb_fillrect = drm_fb_helper_cfb_fillrect, | 55 | .fb_fillrect = drm_fb_helper_cfb_fillrect, |
86 | .fb_copyarea = drm_fb_helper_cfb_copyarea, | 56 | .fb_copyarea = drm_fb_helper_cfb_copyarea, |
87 | .fb_imageblit = drm_fb_helper_cfb_imageblit, | 57 | .fb_imageblit = drm_fb_helper_cfb_imageblit, |
@@ -427,3 +397,19 @@ void radeon_fb_remove_connector(struct radeon_device *rdev, struct drm_connector | |||
427 | { | 397 | { |
428 | drm_fb_helper_remove_one_connector(&rdev->mode_info.rfbdev->helper, connector); | 398 | drm_fb_helper_remove_one_connector(&rdev->mode_info.rfbdev->helper, connector); |
429 | } | 399 | } |
400 | |||
401 | void radeon_fbdev_restore_mode(struct radeon_device *rdev) | ||
402 | { | ||
403 | struct radeon_fbdev *rfbdev = rdev->mode_info.rfbdev; | ||
404 | struct drm_fb_helper *fb_helper; | ||
405 | int ret; | ||
406 | |||
407 | if (!rfbdev) | ||
408 | return; | ||
409 | |||
410 | fb_helper = &rfbdev->helper; | ||
411 | |||
412 | ret = drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper); | ||
413 | if (ret) | ||
414 | DRM_DEBUG("failed to restore crtc mode\n"); | ||
415 | } | ||