summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorLong Ling <longling@google.com>2022-01-19 10:30:00 -0800
committerLong Ling <longling@google.com>2022-01-25 15:42:42 -0800
commitd8af1e98d3cbec78b0306bef8145dc233be70a02 (patch)
tree4c0a0ce8cfe7509cce28154a7423082353fd2776 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parentca14fd522f8cf02766bee9180b40069d0ad16adc (diff)
hwc3: get display mount orientation
Bug: 214461751 Change-Id: I32ae0d09d3555be28d152b02719e76f1bcf42350
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
index 79082ed..57ab7bd 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
@@ -524,6 +524,38 @@ void ExynosDisplayDrmInterface::parseMipiSyncEnums(const DrmProperty &property)
}
}
+void ExynosDisplayDrmInterface::updateMountOrientation()
+{
+ const std::vector<std::pair<HwcMountOrientation, const char*>> orientationEnums = {
+ { HwcMountOrientation::ROT_0, "Normal" },
+ { HwcMountOrientation::ROT_90, "Left Side Up" },
+ { HwcMountOrientation::ROT_180, "Upside Down" },
+ { HwcMountOrientation::ROT_270, "Right Side Up" },
+ };
+
+ mExynosDisplay->mMountOrientation = HwcMountOrientation::ROT_0;
+ const DrmProperty &orientation = mDrmConnector->orientation();
+ if (orientation.id() == 0)
+ return;
+
+ auto [err, drmOrientation] = orientation.value();
+ if (err) {
+ ALOGW("%s failed to get drm prop value, err: %d", __func__, err);
+ return;
+ }
+
+ for (auto &e : orientationEnums) {
+ uint64_t enumValue;
+ std::tie(enumValue, err) = orientation.GetEnumValueWithName(e.second);
+ if (!err && enumValue == drmOrientation) {
+ mExynosDisplay->mMountOrientation = e.first;
+ return;
+ }
+ }
+
+ ALOGW("%s ignore unrecoganized orientation %" PRId64, __func__, drmOrientation);
+}
+
uint32_t ExynosDisplayDrmInterface::getDrmDisplayId(uint32_t type, uint32_t index)
{
return type+index;
@@ -608,6 +640,7 @@ int32_t ExynosDisplayDrmInterface::initDrmDevice(DrmDevice *drmDevice)
parseColorModeEnums(mDrmCrtc->color_mode_property());
parseMipiSyncEnums(mDrmConnector->mipi_sync());
+ updateMountOrientation();
if (mExynosDisplay->mBrightnessController &&
mExynosDisplay->mBrightnessController->initDrm(*mDrmDevice, *mDrmConnector)) {