diff options
-rw-r--r-- | drivers/gpu/drm/drm_sysfs.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index 02296653a058..2290b3b73832 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c | |||
@@ -30,14 +30,14 @@ static struct device_type drm_sysfs_device_minor = { | |||
30 | }; | 30 | }; |
31 | 31 | ||
32 | /** | 32 | /** |
33 | * drm_class_suspend - DRM class suspend hook | 33 | * __drm_class_suspend - internal DRM class suspend routine |
34 | * @dev: Linux device to suspend | 34 | * @dev: Linux device to suspend |
35 | * @state: power state to enter | 35 | * @state: power state to enter |
36 | * | 36 | * |
37 | * Just figures out what the actual struct drm_device associated with | 37 | * Just figures out what the actual struct drm_device associated with |
38 | * @dev is and calls its suspend hook, if present. | 38 | * @dev is and calls its suspend hook, if present. |
39 | */ | 39 | */ |
40 | static int drm_class_suspend(struct device *dev, pm_message_t state) | 40 | static int __drm_class_suspend(struct device *dev, pm_message_t state) |
41 | { | 41 | { |
42 | if (dev->type == &drm_sysfs_device_minor) { | 42 | if (dev->type == &drm_sysfs_device_minor) { |
43 | struct drm_minor *drm_minor = to_drm_minor(dev); | 43 | struct drm_minor *drm_minor = to_drm_minor(dev); |
@@ -52,6 +52,26 @@ static int drm_class_suspend(struct device *dev, pm_message_t state) | |||
52 | } | 52 | } |
53 | 53 | ||
54 | /** | 54 | /** |
55 | * drm_class_suspend - internal DRM class suspend hook. Simply calls | ||
56 | * __drm_class_suspend() with the correct pm state. | ||
57 | * @dev: Linux device to suspend | ||
58 | */ | ||
59 | static int drm_class_suspend(struct device *dev) | ||
60 | { | ||
61 | return __drm_class_suspend(dev, PMSG_SUSPEND); | ||
62 | } | ||
63 | |||
64 | /** | ||
65 | * drm_class_freeze - internal DRM class freeze hook. Simply calls | ||
66 | * __drm_class_suspend() with the correct pm state. | ||
67 | * @dev: Linux device to freeze | ||
68 | */ | ||
69 | static int drm_class_freeze(struct device *dev) | ||
70 | { | ||
71 | return __drm_class_suspend(dev, PMSG_FREEZE); | ||
72 | } | ||
73 | |||
74 | /** | ||
55 | * drm_class_resume - DRM class resume hook | 75 | * drm_class_resume - DRM class resume hook |
56 | * @dev: Linux device to resume | 76 | * @dev: Linux device to resume |
57 | * | 77 | * |
@@ -72,6 +92,12 @@ static int drm_class_resume(struct device *dev) | |||
72 | return 0; | 92 | return 0; |
73 | } | 93 | } |
74 | 94 | ||
95 | static const struct dev_pm_ops drm_class_dev_pm_ops = { | ||
96 | .suspend = drm_class_suspend, | ||
97 | .resume = drm_class_resume, | ||
98 | .freeze = drm_class_freeze, | ||
99 | }; | ||
100 | |||
75 | static char *drm_devnode(struct device *dev, umode_t *mode) | 101 | static char *drm_devnode(struct device *dev, umode_t *mode) |
76 | { | 102 | { |
77 | return kasprintf(GFP_KERNEL, "dri/%s", dev_name(dev)); | 103 | return kasprintf(GFP_KERNEL, "dri/%s", dev_name(dev)); |
@@ -106,8 +132,7 @@ struct class *drm_sysfs_create(struct module *owner, char *name) | |||
106 | goto err_out; | 132 | goto err_out; |
107 | } | 133 | } |
108 | 134 | ||
109 | class->suspend = drm_class_suspend; | 135 | class->pm = &drm_class_dev_pm_ops; |
110 | class->resume = drm_class_resume; | ||
111 | 136 | ||
112 | err = class_create_file(class, &class_attr_version.attr); | 137 | err = class_create_file(class, &class_attr_version.attr); |
113 | if (err) | 138 | if (err) |