OSDN Git Service

Merge remote-tracking branch 'origin/master' into oreo-x86
[android-x86/external-drm_hwcomposer.git] / drmresources.cpp
index 6b8ed03..e96e6ab 100644 (file)
@@ -30,7 +30,7 @@
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
-#include <cutils/log.h>
+#include <log/log.h>
 #include <cutils/properties.h>
 
 namespace android {
@@ -154,16 +154,28 @@ int DrmResources::Init() {
       break;
     }
 
-    if (conn->built_in() && !found_primary) {
+    connectors_.emplace_back(std::move(conn));
+  }
+
+  // First look for primary amongst internal connectors
+  for (auto &conn : connectors_) {
+    if (conn->state() == DRM_MODE_CONNECTED && conn->internal() && !found_primary) {
       conn->set_display(0);
       found_primary = true;
     } else {
       conn->set_display(display_num);
       ++display_num;
     }
+  }
 
-    connectors_.emplace_back(std::move(conn));
+  // Then look for primary amongst external connectors
+  for (auto &conn : connectors_) {
+    if (conn->state() == DRM_MODE_CONNECTED && conn->external() && !found_primary) {
+      conn->set_display(0);
+      found_primary = true;
+    }
   }
+
   if (res)
     drmModeFreeResources(res);
 
@@ -245,6 +257,10 @@ DrmPlane *DrmResources::GetPlane(uint32_t id) const {
   return NULL;
 }
 
+const std::vector<std::unique_ptr<DrmCrtc>> & DrmResources::crtcs() const {
+  return crtcs_;
+}
+
 uint32_t DrmResources::next_mode_id() {
   return ++mode_id_;
 }
@@ -276,6 +292,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());