#include "DrmConnector.h"
+#include <cutils/properties.h>
#include <xf86drmMode.h>
#include <array>
}
int DrmConnector::UpdateModes() {
+ char value[PROPERTY_VALUE_MAX];
+ uint32_t xres = 0, yres = 0, rate = 0;
+ if (property_get("debug.drm.mode.force", value, NULL)) {
+ // parse <xres>x<yres>[@<refreshrate>]
+ if (sscanf(value, "%dx%d@%d", &xres, &yres, &rate) != 3) {
+ rate = 0;
+ if (sscanf(value, "%dx%d", &xres, &yres) != 2) {
+ xres = yres = 0;
+ }
+ }
+ ALOGI_IF(xres && yres, "force mode to %dx%d@%dHz", xres, yres, rate);
+ }
+
auto conn = MakeDrmModeConnectorUnique(drm_->GetFd(), GetId());
if (!conn) {
ALOGE("Failed to get connector %d", GetId());
}
if (!exists) {
+ DrmMode m(&connector_->modes[i]);
+ if (xres && yres) {
+ if (m.h_display() != xres || m.v_display() != yres ||
+ (rate && uint32_t(m.v_refresh()) != rate))
+ continue;
+ }
modes_.emplace_back(DrmMode(&connector_->modes[i]));
+ ALOGD("add new mode %dx%d@%.1f for connector %d", m.h_display(), m.v_display(), m.v_refresh(), GetId());
}
}