aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2016-08-31 17:29:51 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-09-14 15:10:41 -0400
commit5756b1558eabdfb087aa9896250c6decd12bf872 (patch)
tree90ba5cd4908e69a745763056a0811bb05e63ed80
parent7c1fa1db54549a75250763c68afb150418085db1 (diff)
drm/radeon: handle runtime pm in fbcon (v2)
Ported from nouveau. v2: re-enable runtime autosuspend in the error case Acked-by: Edward O'Callaghan <funfunctor@folklore1984.net> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/radeon/radeon_fb.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index 0e3143acb565..6b2537d913e8 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -26,6 +26,7 @@
26#include <linux/module.h> 26#include <linux/module.h>
27#include <linux/slab.h> 27#include <linux/slab.h>
28#include <linux/fb.h> 28#include <linux/fb.h>
29#include <linux/pm_runtime.h>
29 30
30#include <drm/drmP.h> 31#include <drm/drmP.h>
31#include <drm/drm_crtc.h> 32#include <drm/drm_crtc.h>
@@ -47,8 +48,35 @@ struct radeon_fbdev {
47 struct radeon_device *rdev; 48 struct radeon_device *rdev;
48}; 49};
49 50
51static int
52radeonfb_open(struct fb_info *info, int user)
53{
54 struct radeon_fbdev *rfbdev = info->par;
55 struct radeon_device *rdev = rfbdev->rdev;
56 int ret = pm_runtime_get_sync(rdev->ddev->dev);
57 if (ret < 0 && ret != -EACCES) {
58 pm_runtime_mark_last_busy(rdev->ddev->dev);
59 pm_runtime_put_autosuspend(rdev->ddev->dev);
60 return ret;
61 }
62 return 0;
63}
64
65static int
66radeonfb_release(struct fb_info *info, int user)
67{
68 struct radeon_fbdev *rfbdev = info->par;
69 struct radeon_device *rdev = rfbdev->rdev;
70
71 pm_runtime_mark_last_busy(rdev->ddev->dev);
72 pm_runtime_put_autosuspend(rdev->ddev->dev);
73 return 0;
74}
75
50static struct fb_ops radeonfb_ops = { 76static struct fb_ops radeonfb_ops = {
51 .owner = THIS_MODULE, 77 .owner = THIS_MODULE,
78 .fb_open = radeonfb_open,
79 .fb_release = radeonfb_release,
52 .fb_check_var = drm_fb_helper_check_var, 80 .fb_check_var = drm_fb_helper_check_var,
53 .fb_set_par = drm_fb_helper_set_par, 81 .fb_set_par = drm_fb_helper_set_par,
54 .fb_fillrect = drm_fb_helper_cfb_fillrect, 82 .fb_fillrect = drm_fb_helper_cfb_fillrect,