From: Daniel Martin <consume.no...@gmail.com> During PreInit, we just want to inherit the output states from the kernel. If there's a connected output without an encoder assigned, there must be a reason for this. Don't try to activate it, treat it as disconnected for the moment. Because, if we fail to set it up during PreInit the server will exit.
rfc..v2: - changed subject and description, was "modesetting: Treat inactive outputs as disconnected during PreInit" - move check above switch (Adam Jackson) - don't drmModeGetConnector() if !configured, we just did that - add log message for affected outputs Signed-off-by: Daniel Martin <consume.no...@gmail.com> --- hw/xfree86/drivers/modesetting/drmmode_display.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c index 4421578..1a73601 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -858,13 +858,30 @@ drmmode_output_detect(xf86OutputPtr output) if (drmmode_output->output_id == -1) return XF86OutputStatusDisconnected; - drmModeFreeConnector(drmmode_output->mode_output); + if (output->scrn->configured) { + drmModeFreeConnector(drmmode_output->mode_output); + + drmmode_output->mode_output = + drmModeGetConnector(drmmode->fd, drmmode_output->output_id); + } /* else, we just fetched connector infos via drmmode_pre_init() */ - drmmode_output->mode_output = - drmModeGetConnector(drmmode->fd, drmmode_output->output_id); if (!drmmode_output->mode_output) return XF86OutputStatusDisconnected; + /* During PreInit (!configured), we shouldn't try to setup an output + * where the kernel didn't assigned an encoder yet. + * First, we just want to inherit the current state and second, if we + * fail to set it up at this point the server will exit. */ + if (!output->scrn->configured && + !drmmode_output->mode_output->encoder_id && + drmmode_output->mode_output->connection != DRM_MODE_DISCONNECTED) { + xf86DrvMsg(output->scrn->scrnIndex, X_INFO, + "Output %s has no encoder assigned, " + "treat as disconnected during PreInit\n", + output->name); + return XF86OutputStatusDisconnected; + } + switch (drmmode_output->mode_output->connection) { case DRM_MODE_CONNECTED: status = XF86OutputStatusConnected; -- 2.6.1 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel