Porting of original commit 76fb87e675 of Jim Bish in android-ia master to fdo Original commit message: "There are various places where we should be really taking connection state into account before querying the properties or assuming it as primary. This patch fixes them." (v2) checks on connection state are applied for both internal and external connectors, in order to select the correct primary, as opposed to setting, independently from its state, the first connector as primary This is essential to avoid following logcat errors on integrated and dedicated GPUs: ... 2245 2245 E hwc-drm-resources: Could not find a suitable encoder/crtc for display 2 ... 2245 2245 E hwc-drm-resources: Failed CreateDisplayPipe 56 with -19 ... 2245 2245 E hwcomposer-drm: Can't initialize Drm object -19 Tested with i965 on Sandybridge and nouveau on GT120, GT610 --- drmresources.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drmresources.cpp b/drmresources.cpp index 32dd376..d582cfe 100644 --- a/drmresources.cpp +++ b/drmresources.cpp @@ -159,7 +159,7 @@ int DrmResources::Init() { // First look for primary amongst internal connectors for (auto &conn : connectors_) { - if (conn->internal() && !found_primary) { + if (conn->state() == DRM_MODE_CONNECTED && conn->internal() && !found_primary) { conn->set_display(0); found_primary = true; } else { @@ -170,7 +170,7 @@ int DrmResources::Init() { // Then look for primary amongst external connectors for (auto &conn : connectors_) { - if (conn->external() && !found_primary) { + if (conn->state() == DRM_MODE_CONNECTED && conn->external() && !found_primary) { conn->set_display(0); found_primary = true; } @@ -288,6 +288,11 @@ int DrmResources::TryEncoderForDisplay(int display, DrmEncoder *enc) { int DrmResources::CreateDisplayPipe(DrmConnector *connector) { int display = connector->display(); + + // skip not connected + if (connector->state() == DRM_MODE_DISCONNECTED) + return 0; + /* Try to use current setup first */ if (connector->encoder()) { int ret = TryEncoderForDisplay(display, connector->encoder()); -- 2.14.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel