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);
+}
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)
{
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;
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;