uterm: share drm-video wakeup helpers
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>
This commit is contained in:
parent
9d70156dc9
commit
415a53bfd7
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user