summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoenchen <joenchen@google.com>2022-04-06 21:04:36 +0800
committerjoenchen <joenchen@google.com>2022-04-08 08:50:01 +0800
commit9f268398c5177ae353b615e8e4ea7614c1984ff9 (patch)
treecad1ac8ea1e5470e663d7c52734bb1d61d84331a
parentf96198390e32d9fbf6ceb7f2aab5a0c5735b5570 (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.cpp2
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp7
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h1
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h3
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp12
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;