author | Tianhua Sun <tianhua_sun@amlogic.com> | 2020-03-03 05:32:40 (GMT) |
---|---|---|
committer | sky zhou <sky.zhou@amlogic.com> | 2020-05-21 11:00:41 (GMT) |
commit | 7c4f686ebfcba21f6c9a26e82c184ffd2342d1be (patch) | |
tree | 9afdceb883e5b0601483cf5aec8651ea4a7574fa | |
parent | afecfeacdc2bc835a07b3572b7f9246a033dde34 (diff) | |
download | hwcomposer-7c4f686ebfcba21f6c9a26e82c184ffd2342d1be.zip hwcomposer-7c4f686ebfcba21f6c9a26e82c184ffd2342d1be.tar.gz hwcomposer-7c4f686ebfcba21f6c9a26e82c184ffd2342d1be.tar.bz2 |
display: refact getHdrCapabilities() function [2/2]
PD#SWPL-21399
Problem:
getHdrCapabilities function is not implemented in plane.
Solution:
add api for plane to init HDR caps.
Verify:
t962x3
Change-Id: Iee60e4baf7b1fe847a3fc3a7b68a93abd9dabebb
Signed-off-by: Tianhua Sun <tianhua.sun@amlogic.com>
-rw-r--r-- | common/display/ConnectorPanel.cpp | 47 | ||||
-rw-r--r-- | common/display/ConnectorPanel.h | 4 | ||||
-rw-r--r-- | hwc2/Hwc2Display.cpp | 10 |
3 files changed, 51 insertions, 10 deletions
diff --git a/common/display/ConnectorPanel.cpp b/common/display/ConnectorPanel.cpp index 9ff351b..71dab19 100644 --- a/common/display/ConnectorPanel.cpp +++ b/common/display/ConnectorPanel.cpp @@ -13,6 +13,8 @@ #include "AmFramebuffer.h" #include "AmVinfo.h" +#define DV_SUPPORT_INFO_LEN_MAX (40) + ConnectorPanel::ConnectorPanel(int32_t drvFd, uint32_t id) : HwDisplayConnector(drvFd, id) { snprintf(mName, 64, "Panel-%d", id); @@ -24,6 +26,7 @@ ConnectorPanel::~ConnectorPanel() { int32_t ConnectorPanel::loadProperities() { loadPhysicalSize(); loadDisplayModes(); + parseHdrCapabilities(); return 0; } @@ -86,9 +89,51 @@ int32_t ConnectorPanel::loadDisplayModes() { return 0; } +int32_t ConnectorPanel::parseHdrCapabilities() { + const char *DV_PATH = "/sys/class/amdolby_vision/support_info"; + char buf[DV_SUPPORT_INFO_LEN_MAX + 1] = {0}; + int fd, len; + + /*bit0: 0-> efuse, 1->no efuse; */ + /*bit1: 1->ko loaded*/ + /*bit2: 1-> value updated*/ + int supportInfo; + + constexpr int dvDriverEnabled = (1 << 2); + constexpr int dvSupported = ((1 << 0) | (1 << 1) | (1 <<2)); + constexpr int sDefaultMinLumiance = 0; + constexpr int sDefaultMaxLumiance = 500; + + memset(&mHdrCapabilities, 0, sizeof(drm_hdr_capabilities)); + if ((fd = open(DV_PATH, O_RDONLY)) < 0) { + MESON_LOGE("open %s fail.\n", DV_PATH); + } else { + if ((len = read(fd, buf, DV_SUPPORT_INFO_LEN_MAX)) < 0) { + MESON_LOGE("read %s error: %s\n", DV_PATH, strerror(errno)); + } else { + sscanf(buf, "%d", &supportInfo); + if ((supportInfo & dvDriverEnabled) == 0) + MESON_LOGE("dolby vision driver is not ready\n"); + + mHdrCapabilities.DolbyVisionSupported = + ((supportInfo & dvSupported) == dvSupported) ? true : false; + } + close(fd); + } + + mHdrCapabilities.HLGSupported = true; + mHdrCapabilities.HDR10Supported = true; + mHdrCapabilities.maxLuminance = sDefaultMaxLumiance; + mHdrCapabilities.avgLuminance = sDefaultMaxLumiance; + mHdrCapabilities.minLuminance = sDefaultMinLumiance; + + return NO_ERROR; +} + void ConnectorPanel::getHdrCapabilities(drm_hdr_capabilities * caps) { + if (caps) { - memset(caps, 0, sizeof(drm_hdr_capabilities)); + *caps = mHdrCapabilities; } } diff --git a/common/display/ConnectorPanel.h b/common/display/ConnectorPanel.h index 323551f..1af02c4 100644 --- a/common/display/ConnectorPanel.h +++ b/common/display/ConnectorPanel.h @@ -30,8 +30,12 @@ public: protected: int32_t loadDisplayModes(); + int32_t parseHdrCapabilities(); char mName[64]; + +private: + drm_hdr_capabilities mHdrCapabilities; }; #endif diff --git a/hwc2/Hwc2Display.cpp b/hwc2/Hwc2Display.cpp index 8e79c22..9e1be89 100644 --- a/hwc2/Hwc2Display.cpp +++ b/hwc2/Hwc2Display.cpp @@ -178,15 +178,7 @@ const char * Hwc2Display::getName() { } const drm_hdr_capabilities_t * Hwc2Display::getHdrCapabilities() { - if (HwcConfig::defaultHdrCapEnabled()) { - constexpr int sDefaultMinLumiance = 0; - constexpr int sDefaultMaxLumiance = 500; - mHdrCaps.HLGSupported = true; - mHdrCaps.HDR10Supported = true; - mHdrCaps.maxLuminance = sDefaultMaxLumiance; - mHdrCaps.avgLuminance = sDefaultMaxLumiance; - mHdrCaps.minLuminance = sDefaultMinLumiance; - } + mConnector->getHdrCapabilities(&mHdrCaps); return &mHdrCaps; } |