st/egl: Set dpms to on when showing screens
There is a wonderful bug in 2.6.29 that causes a hard lock on my computer when this code is active for lvds that are turned off.
This commit is contained in:
committed by
Jakob Bornecrantz
parent
78abcb88fe
commit
e21d31e8ab
@@ -330,6 +330,13 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
|
||||
if (ret)
|
||||
goto err_crtc;
|
||||
|
||||
|
||||
if (scrn->dpms)
|
||||
drmModeConnectorSetProperty(dev->drmFD,
|
||||
scrn->connectorID,
|
||||
scrn->dpms->prop_id,
|
||||
DRM_MODE_DPMS_ON);
|
||||
|
||||
surf->screen = scrn;
|
||||
|
||||
scrn->surf = surf;
|
||||
|
||||
@@ -107,6 +107,25 @@ drm_add_modes_from_connector(_EGLScreen *screen, drmModeConnectorPtr connector)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
drm_find_dpms(struct drm_device *dev, struct drm_screen *screen)
|
||||
{
|
||||
drmModeConnectorPtr c = screen->connector;
|
||||
drmModePropertyPtr p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < c->count_props; i++) {
|
||||
p = drmModeGetProperty(dev->drmFD, c->props[i]);
|
||||
if (!strcmp(p->name, "DPMS"))
|
||||
break;
|
||||
|
||||
drmModeFreeProperty(p);
|
||||
p = NULL;
|
||||
}
|
||||
|
||||
screen->dpms = p;
|
||||
}
|
||||
|
||||
EGLBoolean
|
||||
drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
|
||||
{
|
||||
@@ -160,6 +179,7 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
|
||||
_eglInitScreen(&screen->base);
|
||||
_eglAddScreen(disp, &screen->base);
|
||||
drm_add_modes_from_connector(&screen->base, connector);
|
||||
drm_find_dpms(dev, screen);
|
||||
dev->screens[num_screens++] = screen;
|
||||
}
|
||||
dev->count_screens = num_screens;
|
||||
@@ -206,6 +226,7 @@ drm_terminate(_EGLDriver *drv, EGLDisplay dpy)
|
||||
if (screen->shown)
|
||||
drm_takedown_shown_screen(drv, screen);
|
||||
|
||||
drmModeFreeProperty(screen->dpms);
|
||||
drmModeFreeConnector(screen->connector);
|
||||
_eglDestroyScreen(&screen->base);
|
||||
dev->screens[i] = NULL;
|
||||
|
||||
@@ -114,6 +114,9 @@ struct drm_screen
|
||||
drmModeConnectorPtr connector;
|
||||
uint32_t connectorID;
|
||||
|
||||
/* dpms property */
|
||||
drmModePropertyPtr dpms;
|
||||
|
||||
/* Has this screen been shown */
|
||||
int shown;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user