diff options
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp')
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp index 1bfccc2..6d941cd 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp @@ -78,7 +78,7 @@ int32_t ExynosDisplayDrmInterfaceModule::initDrmDevice(DrmDevice *drmDevice) } int32_t ExynosDisplayDrmInterfaceModule::createCgcDMAFromIDqe( - const IDisplayColorGS101::IDqe::CgcData &cgcData) + const GsInterfaceType::IDqe::CgcData &cgcData) { if ((cgcData.config->r_values.size() != DRM_SAMSUNG_CGC_LUT_REG_CNT) || (cgcData.config->g_values.size() != DRM_SAMSUNG_CGC_LUT_REG_CNT) || @@ -120,8 +120,8 @@ int32_t ExynosDisplayDrmInterfaceModule::setCgcLutDmaProperty( return NO_ERROR; ExynosPrimaryDisplayModule* display = (ExynosPrimaryDisplayModule*)mExynosDisplay; - const IDisplayColorGS101::IDqe &dqe = display->getDqe(); - const IDisplayColorGS101::IDqe::CgcData &cgcData = dqe.Cgc(); + const GsInterfaceType::IDqe &dqe = display->getDqe(); + const GsInterfaceType::IDqe::CgcData &cgcData = dqe.Cgc(); /* dirty bit is valid only if enable is true */ if (!mForceDisplayColorSetting && cgcData.enable && !cgcData.dirty) @@ -175,6 +175,45 @@ int32_t ExynosDisplayDrmInterfaceModule::setDisplayColorSetting( return setCgcLutDmaProperty(mDrmCrtc->cgc_lut_fd_property(), drmReq); } + +int32_t ExynosDisplayDrmInterfaceModule::setHistoPosProperty( + const DrmProperty &prop, + ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq) { + if (!prop.id()) return NO_ERROR; + + int32_t ret = 0; + + if ((ret = drmReq.atomicAddProperty( + mDrmCrtc->id(), prop, (uint64_t)mHistogramInfo->getHistogramPos(), + true)) < 0) { + HWC_LOGE(mExynosDisplay, "%s: Fail to set histogram position property", + __func__); + return ret; + } + + return NO_ERROR; +} + +int32_t ExynosDisplayDrmInterfaceModule::setDisplayHistogramSetting( + ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq) { + if ((isHistogramInfoRegistered() == false) || (isPrimary() == false)) return NO_ERROR; + + int32_t ret = + gs101::ExynosDisplayDrmInterfaceModule::setDisplayHistogramSetting( + drmReq); + if (ret != NO_ERROR) return ret; + + ret = setHistoPosProperty(mDrmCrtc->histogram_position_property(), drmReq); + + return ret; +} + +void ExynosDisplayDrmInterfaceModule::registerHistogramInfo( + const std::shared_ptr<IDLHistogram> &info) { + gs101::ExynosDisplayDrmInterfaceModule::registerHistogramInfo(info); + mHistogramInfo = info; +} + //////////////////////////////////////////////////// ExynosPrimaryDisplayDrmInterfaceModule ////////////////////////////////////////////////////////////////// ExynosPrimaryDisplayDrmInterfaceModule::ExynosPrimaryDisplayDrmInterfaceModule(ExynosDisplay *exynosDisplay) : ExynosDisplayDrmInterfaceModule(exynosDisplay) |