diff options
author | joenchen <joenchen@google.com> | 2022-04-06 21:04:36 +0800 |
---|---|---|
committer | joenchen <joenchen@google.com> | 2022-04-08 08:50:01 +0800 |
commit | 9f268398c5177ae353b615e8e4ea7614c1984ff9 (patch) | |
tree | cad1ac8ea1e5470e663d7c52734bb1d61d84331a | |
parent | f96198390e32d9fbf6ceb7f2aab5a0c5735b5570 (diff) |
HWC supports boot config API
Test: to change resolution and check logcat log
Bug: 223463247
Change-Id: I96953ec23ddf85974c82191914e6a1e4a0b9c69a
-rw-r--r-- | hwc3/impl/HalImpl.cpp | 2 | ||||
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 7 | ||||
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h | 1 | ||||
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h | 3 | ||||
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp | 12 |
5 files changed, 21 insertions, 4 deletions
diff --git a/hwc3/impl/HalImpl.cpp b/hwc3/impl/HalImpl.cpp index 1029fe8..0114d2d 100644 --- a/hwc3/impl/HalImpl.cpp +++ b/hwc3/impl/HalImpl.cpp @@ -126,6 +126,8 @@ void HalImpl::initCaps() { h2a::translate(hwcCap, cap); mCaps.insert(cap); } + + mCaps.insert(Capability::BOOT_DISPLAY_CONFIG); } int32_t HalImpl::getHalDisplay(int64_t display, ExynosDisplay*& halDisplay) { diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 7cdb5b0..c7ce75b 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -415,6 +415,13 @@ int32_t ExynosDisplayDrmInterface::getDisplayIdleTimerSupport(bool &outSupport) return NO_ERROR; } +int32_t ExynosDisplayDrmInterface::getDefaultModeId(int32_t *modeId) { + if (modeId == nullptr) return HWC2_ERROR_BAD_PARAMETER; + + *modeId = mDrmConnector->get_preferred_mode_id(); + return NO_ERROR; +} + ExynosDisplayDrmInterface::ExynosDisplayDrmInterface(ExynosDisplay *exynosDisplay) { mType = INTERFACE_TYPE_DRM; diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h index 62f1ed2..1e29dfb 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h @@ -297,6 +297,7 @@ class ExynosDisplayDrmInterface : /* For HWC 3.0 APIs */ virtual int32_t getDisplayIdleTimerSupport(bool &outSupport); + virtual int32_t getDefaultModeId(int32_t *modeId) override; virtual int32_t waitVBlank(); float getDesiredRefreshRate() { return mDesiredModeState.mode.v_refresh(); } diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h b/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h index ac773b5..d133774 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h @@ -76,6 +76,9 @@ class ExynosDisplayInterface { outSupport = false; return NO_ERROR; } + virtual int32_t getDefaultModeId(int32_t* __unused modeId) { + return HWC2_ERROR_UNSUPPORTED; + } virtual int32_t waitVBlank() { return 0; }; public: diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp index f7a5c48..37dc832 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp @@ -45,6 +45,8 @@ static const std::map<const DisplayType, const std::string> panelSysfsPath = {DisplayType::DISPLAY_SECONDARY, "/sys/devices/platform/exynos-drm/secondary-panel/"}}; static constexpr const char* PROPERTY_BOOT_MODE = "persist.vendor.display.primary.boot_config"; +static constexpr const char *PROPERTY_DEFAULT_BOOT_MODE = + "vendor.display.primary.default_boot_config"; static std::string loadPanelGammaCalibration(const std::string &file) { std::ifstream ifs(file); @@ -236,11 +238,13 @@ int32_t ExynosPrimaryDisplay::clearBootDisplayConfig() { } int32_t ExynosPrimaryDisplay::getPreferredDisplayConfigInternal(int32_t *outConfig) { - char modeStr[PROPERTY_VALUE_MAX]; + char modeStr[PROPERTY_VALUE_MAX], defaultModeStr[PROPERTY_VALUE_MAX]; + property_get(PROPERTY_DEFAULT_BOOT_MODE, defaultModeStr, ""); + auto ret = property_get(PROPERTY_BOOT_MODE, modeStr, defaultModeStr); - auto ret = property_get(PROPERTY_BOOT_MODE, modeStr, nullptr); - if (ret < 0) - return HWC2_ERROR_BAD_CONFIG; + if (ret <= 0) { + return mDisplayInterface->getDefaultModeId(outConfig); + } int width, height; int fps = 0; |