summaryrefslogtreecommitdiff
authorTianhua 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)
commit7c4f686ebfcba21f6c9a26e82c184ffd2342d1be (patch)
tree9afdceb883e5b0601483cf5aec8651ea4a7574fa
parentafecfeacdc2bc835a07b3572b7f9246a033dde34 (diff)
downloadhwcomposer-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>
Diffstat
-rw-r--r--common/display/ConnectorPanel.cpp47
-rw-r--r--common/display/ConnectorPanel.h4
-rw-r--r--hwc2/Hwc2Display.cpp10
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;
}