diff options
author | Long Ling <longling@google.com> | 2022-01-19 10:30:00 -0800 |
---|---|---|
committer | Long Ling <longling@google.com> | 2022-01-25 15:42:42 -0800 |
commit | d8af1e98d3cbec78b0306bef8145dc233be70a02 (patch) | |
tree | 4c0a0ce8cfe7509cce28154a7423082353fd2776 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | ca14fd522f8cf02766bee9180b40069d0ad16adc (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.cpp | 33 |
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)) { |