uterm: share drm-video wakeup helpers
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 12 Jan 2013 00:01:54 +0000 (01:01 +0100)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 12 Jan 2013 00:01:54 +0000 (01:01 +0100)
The dumb and drm backends still use the same code to perform wakeup/sleep
code. Hence, move it into the drm-shared file so we can use the same
helpers for both.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/uterm_drm_shared.c
src/uterm_drm_shared_internal.h
src/uterm_video_drm.c
src/uterm_video_dumb.c

index 13f06c2..72c2fe0 100644 (file)
@@ -516,3 +516,41 @@ int uterm_drm_video_hotplug(struct uterm_video *video,
        video->flags &= ~VIDEO_HOTPLUG;
        return 0;
 }
+
+int uterm_drm_video_wake_up(struct uterm_video *video,
+                           const struct display_ops *ops)
+{
+       int ret;
+       struct uterm_drm_video *vdrm = video->data;
+
+       ret = drmSetMaster(vdrm->fd);
+       if (ret) {
+               log_err("cannot set DRM-master");
+               return -EACCES;
+       }
+
+       video->flags |= VIDEO_AWAKE;
+       ret = uterm_drm_video_hotplug(video, ops);
+       if (ret) {
+               video->flags &= ~VIDEO_AWAKE;
+               drmDropMaster(vdrm->fd);
+               return ret;
+       }
+
+       return 0;
+}
+
+void uterm_drm_video_sleep(struct uterm_video *video)
+{
+       struct uterm_drm_video *vdrm = video->data;
+
+       drmDropMaster(vdrm->fd);
+       video->flags &= ~VIDEO_AWAKE;
+}
+
+int uterm_drm_video_poll(struct uterm_video *video,
+                        const struct display_ops *ops)
+{
+       video->flags |= VIDEO_HOTPLUG;
+       return uterm_drm_video_hotplug(video, ops);
+}
index be7315f..b00bc76 100644 (file)
@@ -107,6 +107,11 @@ int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res,
                              drmModeEncoder *enc);
 int uterm_drm_video_hotplug(struct uterm_video *video,
                            const struct display_ops *ops);
+int uterm_drm_video_wake_up(struct uterm_video *video,
+                           const struct display_ops *ops);
+void uterm_drm_video_sleep(struct uterm_video *video);
+int uterm_drm_video_poll(struct uterm_video *video,
+                        const struct display_ops *ops);
 
 static inline void *uterm_drm_video_get_data(struct uterm_video *video)
 {
index 4790f6c..7697add 100644 (file)
@@ -1124,43 +1124,22 @@ static void video_destroy(struct uterm_video *video)
 
 static int video_poll(struct uterm_video *video)
 {
-       video->flags |= VIDEO_HOTPLUG;
-       return uterm_drm_video_hotplug(video, &drm_display_ops);
+       return uterm_drm_video_poll(video, &drm_display_ops);
 }
 
 static void video_sleep(struct uterm_video *video)
 {
-       struct uterm_drm_video *vdrm = video->data;
-
-       if (!video_is_awake(video))
-               return;
-
        show_displays(video);
-       drmDropMaster(vdrm->fd);
-       video->flags &= ~VIDEO_AWAKE;
+       uterm_drm_video_sleep(video);
 }
 
 static int video_wake_up(struct uterm_video *video)
 {
        int ret;
-       struct uterm_drm_video *vdrm = video->data;
-
-       if (video_is_awake(video))
-               return 0;
-
-       ret = drmSetMaster(vdrm->fd);
-       if (ret) {
-               log_err("cannot set DRM-master");
-               return -EACCES;
-       }
 
-       video->flags |= VIDEO_AWAKE;
-       ret = uterm_drm_video_hotplug(video, &drm_display_ops);
-       if (ret) {
-               video->flags &= ~VIDEO_AWAKE;
-               drmDropMaster(vdrm->fd);
+       ret = uterm_drm_video_wake_up(video, &drm_display_ops);
+       if (ret)
                return ret;
-       }
 
        show_displays(video);
        return 0;
index 5c07852..95e0109 100644 (file)
@@ -569,43 +569,22 @@ static void video_destroy(struct uterm_video *video)
 
 static int video_poll(struct uterm_video *video)
 {
-       video->flags |= VIDEO_HOTPLUG;
-       return uterm_drm_video_hotplug(video, &dumb_display_ops);
+       return uterm_drm_video_poll(video, &dumb_display_ops);
 }
 
 static void video_sleep(struct uterm_video *video)
 {
-       struct uterm_drm_video *vdrm = video->data;
-
-       if (!video_is_awake(video))
-               return;
-
        show_displays(video);
-       drmDropMaster(vdrm->fd);
-       video->flags &= ~VIDEO_AWAKE;
+       uterm_drm_video_sleep(video);
 }
 
 static int video_wake_up(struct uterm_video *video)
 {
        int ret;
-       struct uterm_drm_video *vdrm = video->data;
-
-       if (video_is_awake(video))
-               return 0;
 
-       ret = drmSetMaster(vdrm->fd);
-       if (ret) {
-               log_err("cannot set DRM-master");
-               return -EACCES;
-       }
-
-       video->flags |= VIDEO_AWAKE;
-       ret = uterm_drm_video_hotplug(video, &dumb_display_ops);
-       if (ret) {
-               video->flags &= ~VIDEO_AWAKE;
-               drmDropMaster(vdrm->fd);
+       ret = uterm_drm_video_wake_up(video, &dumb_display_ops);
+       if (ret)
                return ret;
-       }
 
        show_displays(video);
        return 0;