OSDN Git Service

drm_hwcomposer: Break out of sync_wait loop on success
[android-x86/external-drm_hwcomposer.git] / drmconnector.cpp
index 44864b9..ccb38e2 100644 (file)
@@ -41,15 +41,17 @@ DrmConnector::DrmConnector(DrmResources *drm, drmModeConnectorPtr c,
       possible_encoders_(possible_encoders) {
 }
 
-DrmConnector::~DrmConnector() {
-}
-
 int DrmConnector::Init() {
   int ret = drm_->GetConnectorProperty(*this, "DPMS", &dpms_property_);
   if (ret) {
     ALOGE("Could not get DPMS property\n");
     return ret;
   }
+  ret = drm_->GetConnectorProperty(*this, "CRTC_ID", &crtc_id_property_);
+  if (ret) {
+    ALOGE("Could not get CRTC_ID property\n");
+    return ret;
+  }
   return 0;
 }
 
@@ -67,7 +69,7 @@ void DrmConnector::set_display(int display) {
 
 bool DrmConnector::built_in() const {
   return type_ == DRM_MODE_CONNECTOR_LVDS || type_ == DRM_MODE_CONNECTOR_eDP ||
-         type_ == DRM_MODE_CONNECTOR_DSI;
+         type_ == DRM_MODE_CONNECTOR_DSI || type_ == DRM_MODE_CONNECTOR_VIRTUAL;
 }
 
 int DrmConnector::UpdateModes() {
@@ -79,13 +81,14 @@ int DrmConnector::UpdateModes() {
     return -ENODEV;
   }
 
+  state_ = c->connection;
+
   std::vector<DrmMode> new_modes;
   for (int i = 0; i < c->count_modes; ++i) {
     bool exists = false;
-    for (std::vector<DrmMode>::iterator iter = modes_.begin();
-         iter != modes_.end(); ++iter) {
-      if (*iter == c->modes[i]) {
-        new_modes.push_back(*iter);
+    for (const DrmMode &mode : modes_) {
+      if (mode == c->modes[i]) {
+        new_modes.push_back(mode);
         exists = true;
         break;
       }
@@ -105,27 +108,16 @@ const DrmMode &DrmConnector::active_mode() const {
   return active_mode_;
 }
 
-int DrmConnector::set_active_mode(uint32_t mode_id) {
-  for (std::vector<DrmMode>::const_iterator iter = modes_.begin();
-       iter != modes_.end(); ++iter) {
-    if (iter->id() == mode_id) {
-      active_mode_ = *iter;
-      return 0;
-    }
-  }
-  return -ENOENT;
+void DrmConnector::set_active_mode(const DrmMode &mode) {
+  active_mode_ = mode;
 }
 
 const DrmProperty &DrmConnector::dpms_property() const {
   return dpms_property_;
 }
 
-DrmConnector::ModeIter DrmConnector::begin_modes() const {
-  return modes_.begin();
-}
-
-DrmConnector::ModeIter DrmConnector::end_modes() const {
-  return modes_.end();
+const DrmProperty &DrmConnector::crtc_id_property() const {
+  return crtc_id_property_;
 }
 
 DrmEncoder *DrmConnector::encoder() const {
@@ -136,12 +128,8 @@ void DrmConnector::set_encoder(DrmEncoder *encoder) {
   encoder_ = encoder;
 }
 
-DrmConnector::EncoderIter DrmConnector::begin_possible_encoders() const {
-  return possible_encoders_.begin();
-}
-
-DrmConnector::EncoderIter DrmConnector::end_possible_encoders() const {
-  return possible_encoders_.end();
+drmModeConnection DrmConnector::state() const {
+  return state_;
 }
 
 uint32_t DrmConnector::mm_width() const {