From 2ba71499aeea847f1f64906e5b3ecacae39b78c4 Mon Sep 17 00:00:00 2001 From: Dileep Marchya Date: Thu, 6 Dec 2018 15:27:45 +0530 Subject: [PATCH] hwc2: Implement display config 1.7 interfaces. Change-Id: I5d68407ed388e62d7900944c90d407549535c0da CRs-Fixed: 2362214 Signed-off-by: Karthi Kandasamy --- common.mk | 10 +++ include/display_properties.h | 7 +- sdm/libs/hwc2/Android.mk | 7 ++ sdm/libs/hwc2/hwc_session.cpp | 7 -- sdm/libs/hwc2/hwc_session.h | 43 ++++++++-- sdm/libs/hwc2/hwc_session_services.cpp | 110 +++++++++++++++++++++++++ 6 files changed, 171 insertions(+), 13 deletions(-) diff --git a/common.mk b/common.mk index 978d700f..71b0fd5f 100644 --- a/common.mk +++ b/common.mk @@ -4,6 +4,10 @@ display_config_version := $(shell \ if [ -d "$(TOP)/vendor/qcom/opensource/interfaces/display/config/1.1" ];\ then echo DISPLAY_CONFIG_1_1; fi) +display_config_version := $(shell \ + if [ -d "$(TOP)/vendor/qcom/opensource/interfaces/display/config/1.7" ];\ + then echo DISPLAY_CONFIG_1_7; fi) + #Common C flags common_flags := -DDEBUG_CALC_FPS -Wno-missing-field-initializers common_flags += -Wconversion -Wall -Werror -std=c++14 @@ -16,6 +20,12 @@ ifeq ($(display_config_version), DISPLAY_CONFIG_1_1) common_flags += -DDISPLAY_CONFIG_1_1 endif +ifeq ($(display_config_version), DISPLAY_CONFIG_1_7) + common_flags += -DDISPLAY_CONFIG_1_7 \ + -DDISPLAY_CONFIG_1_6 -DDISPLAY_CONFIG_1_5 -DDISPLAY_CONFIG_1_4 \ + -DDISPLAY_CONFIG_1_3 -DDISPLAY_CONFIG_1_2 -DDISPLAY_CONFIG_1_1 +endif + ifeq ($(TARGET_USES_COLOR_METADATA), true) common_flags += -DUSE_COLOR_METADATA endif diff --git a/include/display_properties.h b/include/display_properties.h index 1cb4a98b..f78fb9de 100644 --- a/include/display_properties.h +++ b/include/display_properties.h @@ -1,5 +1,5 @@ /* -* Copyright (c) 2018, The Linux Foundation. All rights reserved. +* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -91,6 +91,11 @@ #define DISABLE_HDR_LUT_GEN DISPLAY_PROP("disable_hdr_lut_gen") #define ENABLE_DEFAULT_COLOR_MODE DISPLAY_PROP("enable_default_color_mode") #define DISABLE_HDR DISPLAY_PROP("hwc_disable_hdr") +#define DISABLE_QTI_BSP DISPLAY_PROP("disable_qti_bsp") +#define UPDATE_VSYNC_ON_DOZE DISPLAY_PROP("update_vsync_on_doze") +#define PANEL_MOUNTFLIP DISPLAY_PROP("panel_mountflip") +#define VDS_ALLOW_HWC DISPLAY_PROP("vds_allow_hwc") +#define QDFRAMEWORK_LOGS DISPLAY_PROP("qdframework_logs") #define HDR_CONFIG_PROP RO_DISPLAY_PROP("hdr.config") #define QDCM_PCC_TRANS_PROP DISPLAY_PROP("qdcm.pcc_for_trans") diff --git a/sdm/libs/hwc2/Android.mk b/sdm/libs/hwc2/Android.mk index a0ea3587..3c8d77f3 100644 --- a/sdm/libs/hwc2/Android.mk +++ b/sdm/libs/hwc2/Android.mk @@ -36,6 +36,13 @@ ifeq ($(display_config_version), DISPLAY_CONFIG_1_1) LOCAL_SHARED_LIBRARIES += vendor.display.config@1.1 endif +ifeq ($(display_config_version), DISPLAY_CONFIG_1_7) +LOCAL_SHARED_LIBRARIES += vendor.display.config@1.7 \ + vendor.display.config@1.6 vendor.display.config@1.5 \ + vendor.display.config@1.4 vendor.display.config@1.3 \ + vendor.display.config@1.2 vendor.display.config@1.1 +endif + LOCAL_SRC_FILES := hwc_session.cpp \ hwc_session_services.cpp \ hwc_display.cpp \ diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp index 93b321de..c4afd510 100644 --- a/sdm/libs/hwc2/hwc_session.cpp +++ b/sdm/libs/hwc2/hwc_session.cpp @@ -1720,13 +1720,6 @@ int HWCSession::CreateExternalDisplay(int disp, uint32_t primary_width, } } -#ifdef DISPLAY_CONFIG_1_1 -// Methods from ::vendor::hardware::display::config::V1_1::IDisplayConfig follow. -Return HWCSession::setDisplayAnimating(uint64_t display_id, bool animating ) { - return CallDisplayFunction(static_cast(this), display_id, - &HWCDisplay::SetDisplayAnimating, animating); -} -#endif void HWCSession::CreateNullDisplay() { auto hwc_display = &hwc_display_[HWC_DISPLAY_PRIMARY]; diff --git a/sdm/libs/hwc2/hwc_session.h b/sdm/libs/hwc2/hwc_session.h index 78d49fca..3d052a2a 100644 --- a/sdm/libs/hwc2/hwc_session.h +++ b/sdm/libs/hwc2/hwc_session.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, 2018, 2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2019 The Linux Foundation. All rights reserved. * Not a Contribution. * * Copyright 2015 The Android Open Source Project @@ -20,7 +20,9 @@ #ifndef __HWC_SESSION_H__ #define __HWC_SESSION_H__ -#ifdef DISPLAY_CONFIG_1_1 +#ifdef DISPLAY_CONFIG_1_7 +#include +#elif DISPLAY_CONFIG_1_1 #include #else #include @@ -41,12 +43,15 @@ namespace sdm { -#ifdef DISPLAY_CONFIG_1_1 +#ifdef DISPLAY_CONFIG_1_7 +using vendor::display::config::V1_7::IDisplayConfig; +#elif DISPLAY_CONFIG_1_1 using vendor::display::config::V1_1::IDisplayConfig; #else -using ::vendor::display::config::V1_0::IDisplayConfig; +using vendor::display::config::V1_0::IDisplayConfig; #endif using ::android::hardware::Return; +using ::android::hardware::hidl_string; // Create a singleton uevent listener thread valid for life of hardware composer process. // This thread blocks on uevents poll inside uevent library implementation. This poll exits @@ -216,10 +221,38 @@ class HWCSession : hwc2_device_t, HWCUEventListener, IDisplayConfig, public qCli Return setCameraLaunchStatus(uint32_t on) override; Return displayBWTransactionPending(displayBWTransactionPending_cb _hidl_cb) override; - // Methods from ::android::hardware::display::config::V1_1::IDisplayConfig follow. + // Methods from ::android::hardware::display::config::V1_7::IDisplayConfig follow. #ifdef DISPLAY_CONFIG_1_1 Return setDisplayAnimating(uint64_t display_id, bool animating) override; #endif +#ifdef DISPLAY_CONFIG_1_2 + Return setDisplayIndex(IDisplayConfig::DisplayTypeExt disp_type, + uint32_t base, uint32_t count) override; +#endif +#ifdef DISPLAY_CONFIG_1_3 + Return controlIdlePowerCollapse(bool enable, bool synchronous) override; +#endif +#ifdef DISPLAY_CONFIG_1_4 + Return getWriteBackCapabilities(getWriteBackCapabilities_cb _hidl_cb) override; +#endif +#ifdef DISPLAY_CONFIG_1_5 + Return SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start, uint32_t h_end, + uint32_t v_start, uint32_t v_end, uint32_t factor_in, + uint32_t factor_out) override; +#endif +#ifdef DISPLAY_CONFIG_1_6 + Return updateVSyncSourceOnPowerModeOff() override; + Return updateVSyncSourceOnPowerModeDoze() override; +#endif +#ifdef DISPLAY_CONFIG_1_7 + Return setPowerMode(uint32_t disp_id, PowerMode power_mode) override; + Return isPowerModeOverrideSupported(uint32_t disp_id) override; + Return isHDRSupported(uint32_t disp_id) override; + Return isWCGSupported(uint32_t disp_id) override; + Return setLayerAsMask(uint32_t disp_id, uint64_t layer_id) override; + Return getDebugProperty(const hidl_string &prop_name, + getDebugProperty_cb _hidl_cb) override; +#endif // QClient methods virtual android::status_t notifyCallback(uint32_t command, const android::Parcel *input_parcel, diff --git a/sdm/libs/hwc2/hwc_session_services.cpp b/sdm/libs/hwc2/hwc_session_services.cpp index be1aa7c5..933ca5f3 100644 --- a/sdm/libs/hwc2/hwc_session_services.cpp +++ b/sdm/libs/hwc2/hwc_session_services.cpp @@ -34,6 +34,7 @@ #include "hwc_buffer_sync_handler.h" #include "hwc_session.h" +#include "hwc_debugger.h" #define __CLASS__ "HWCSession" @@ -496,4 +497,113 @@ Return HWCSession::displayBWTransactionPending(displayBWTransactionPending return Void(); } +#ifdef DISPLAY_CONFIG_1_1 +Return HWCSession::setDisplayAnimating(uint64_t display_id, bool animating ) { + return CallDisplayFunction(static_cast(this), display_id, + &HWCDisplay::SetDisplayAnimating, animating); +} +#endif + +#ifdef DISPLAY_CONFIG_1_2 +Return HWCSession::setDisplayIndex(IDisplayConfig::DisplayTypeExt disp_type, + uint32_t base, uint32_t count) { + DLOGW("Not implemented."); + return 0; +} +#endif + +#ifdef DISPLAY_CONFIG_1_3 +Return HWCSession::controlIdlePowerCollapse(bool enable, bool synchronous) { + DLOGW("Not implemented."); + return 0; +} +#endif + +#ifdef DISPLAY_CONFIG_1_4 +Return HWCSession::getWriteBackCapabilities(getWriteBackCapabilities_cb _hidl_cb) { + DLOGW("Not implemented."); + return Void(); +} +#endif + +#ifdef DISPLAY_CONFIG_1_5 +Return HWCSession::SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start, + uint32_t h_end, uint32_t v_start, uint32_t v_end, + uint32_t factor_in, uint32_t factor_out) { + DLOGW("Not implemented."); + return 0; +} +#endif + +#ifdef DISPLAY_CONFIG_1_6 +Return HWCSession::updateVSyncSourceOnPowerModeOff() { + DLOGW("Not implemented."); + return 0; +} + +Return HWCSession::updateVSyncSourceOnPowerModeDoze() { + DLOGW("Not implemented."); + return 0; +} +#endif + +#ifdef DISPLAY_CONFIG_1_7 +Return HWCSession::setPowerMode(uint32_t disp_id, PowerMode power_mode) { + return 0; +} + +Return HWCSession::isPowerModeOverrideSupported(uint32_t disp_id) { + return false; +} + +Return HWCSession::isHDRSupported(uint32_t disp_id) { + SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_id]); + HWCDisplay *hwc_display = hwc_display_[disp_id]; + if (!hwc_display) { + DLOGW("Display = %d is not connected.", disp_id); + return false; + } + + // query number of hdr types + uint32_t out_num_types = 0; + if (hwc_display->GetHdrCapabilities(&out_num_types, nullptr, nullptr, nullptr, nullptr) + != HWC2::Error::None) { + return false; + } + + if (!out_num_types) { + return false; + } + + return true; +} + +Return HWCSession::isWCGSupported(uint32_t disp_id) { + // todo(user): Query wcg from sdm. For now assume them same. + return isHDRSupported(disp_id); +} + +Return HWCSession::setLayerAsMask(uint32_t disp_id, uint64_t layer_id) { + return 0; +} + +Return HWCSession::getDebugProperty(const hidl_string &prop_name, + getDebugProperty_cb _hidl_cb) { + std::string vendor_prop_name = DISP_PROP_PREFIX; + char value[64] = {}; + hidl_string result = ""; + int32_t error = -EINVAL; + + vendor_prop_name += prop_name.c_str(); + if (HWCDebugHandler::Get()->GetProperty(vendor_prop_name.c_str(), value) != kErrorNone) { + result = value; + error = 0; + } + + _hidl_cb(result, error); + + return Void(); +} +#endif + } // namespace sdm