Merge "sdm: drm: return default feature info for all the PP features"
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index 08895ee..14ec40f 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -157,6 +157,7 @@
static const uint32_t kSDEPADitherV17 = 16;
static const uint32_t kSDEIgcV30 = 17;
static const uint32_t kSDEGamutV4 = 18;
+ static const uint32_t kSDEPccV4 = 19;
uint32_t version[kMaxNumPPFeatures];
PPFeatureVersion() { memset(version, 0, sizeof(version)); }
@@ -327,6 +328,29 @@
SDEPccCfg *GetConfig() { return this; }
};
+struct SDEPccV4Coeff {
+ uint32_t c = 0;
+ uint32_t r = 0;
+ uint32_t g = 0;
+ uint32_t b = 0;
+ uint32_t rg = 0;
+ uint32_t gb = 0;
+ uint32_t rb = 0;
+ uint32_t rgb = 0;
+ uint32_t rr = 0;
+ uint32_t gg = 0;
+ uint32_t bb = 0;
+};
+
+struct SDEPccV4Cfg {
+ SDEPccV4Coeff red;
+ SDEPccV4Coeff green;
+ SDEPccV4Coeff blue;
+
+ static SDEPccV4Cfg *Init(uint32_t arg __attribute__((__unused__)));
+ SDEPccV4Cfg *GetConfig() { return this; }
+};
+
struct SDEDitherCfg {
uint32_t g_y_depth;
uint32_t r_cr_depth;
diff --git a/sdm/libs/core/drm/hw_color_manager_drm.cpp b/sdm/libs/core/drm/hw_color_manager_drm.cpp
index 67478c9..2000f9a 100644
--- a/sdm/libs/core/drm/hw_color_manager_drm.cpp
+++ b/sdm/libs/core/drm/hw_color_manager_drm.cpp
@@ -77,6 +77,11 @@
switch (feature.id) {
case kFeaturePcc:
+ if (feature.version == 1) {
+ version = PPFeatureVersion::kSDEPccV17;
+ } else if (feature.version == 4) {
+ version = PPFeatureVersion::kSDEPccV4;
+ }
break;
case kFeatureIgc:
if (feature.version == 3)
@@ -87,10 +92,13 @@
version = PPFeatureVersion::kSDEPgcV17;
break;
case kFeatureMixerGc:
+ version = PPFeatureVersion::kSDEPgcV17;
break;
case kFeaturePaV2:
+ version = PPFeatureVersion::kSDEPaV17;
break;
case kFeatureDither:
+ version = PPFeatureVersion::kSDEDitherV17;
break;
case kFeatureGamut:
if (feature.version == 1)
@@ -99,6 +107,7 @@
version = PPFeatureVersion::kSDEGamutV4;
break;
case kFeaturePADither:
+ version = PPFeatureVersion::kSDEPADitherV17;
break;
default:
break;
@@ -143,6 +152,84 @@
DisplayError HWColorManagerDrm::GetDrmPCC(const PPFeatureInfo &in_data,
DRMPPFeatureInfo *out_data) {
DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ struct SDEPccV4Cfg *sde_pcc = NULL;
+ struct SDEPccV4Coeff *sde_pcc_coeffs = NULL;
+ struct drm_msm_pcc *mdp_pcc = NULL;
+ struct drm_msm_pcc_coeff *mdp_pcc_coeffs = NULL;
+ uint32_t i = 0;
+
+ if (!out_data) {
+ DLOGE("Invalid input parameter for pcc");
+ return kErrorParameters;
+ }
+
+ switch (in_data.feature_version_) {
+ case PPFeatureVersion::kSDEPccV4:
+ sde_pcc = (struct SDEPccV4Cfg *) in_data.GetConfigData();
+ break;
+ default:
+ DLOGE("Unsupported pcc feature version: %d", in_data.feature_version_);
+ return kErrorParameters;
+ }
+
+ out_data->id = kFeaturePcc;
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_pcc);
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* feature disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ mdp_pcc = new drm_msm_pcc();
+ if (!mdp_pcc) {
+ DLOGE("Failed to allocate memory for pcc");
+ return kErrorMemory;
+ }
+
+ mdp_pcc->flags = 0;
+
+ for (i = 0; i < kMaxPCCChanel; i++) {
+ switch (i) {
+ case 0:
+ sde_pcc_coeffs = &sde_pcc->red;
+ mdp_pcc_coeffs = &mdp_pcc->r;
+ mdp_pcc->r_rr = sde_pcc_coeffs->rr;
+ mdp_pcc->r_gg = sde_pcc_coeffs->gg;
+ mdp_pcc->r_bb = sde_pcc_coeffs->bb;
+ break;
+ case 1:
+ sde_pcc_coeffs = &sde_pcc->green;
+ mdp_pcc_coeffs = &mdp_pcc->g;
+ mdp_pcc->g_rr = sde_pcc_coeffs->rr;
+ mdp_pcc->g_gg = sde_pcc_coeffs->gg;
+ mdp_pcc->g_bb = sde_pcc_coeffs->bb;
+ break;
+ case 2:
+ sde_pcc_coeffs = &sde_pcc->blue;
+ mdp_pcc_coeffs = &mdp_pcc->b;
+ mdp_pcc->b_rr = sde_pcc_coeffs->rr;
+ mdp_pcc->b_gg = sde_pcc_coeffs->gg;
+ mdp_pcc->b_bb = sde_pcc_coeffs->bb;
+ break;
+ }
+ mdp_pcc_coeffs->c = sde_pcc_coeffs->c;
+ mdp_pcc_coeffs->r = sde_pcc_coeffs->r;
+ mdp_pcc_coeffs->g = sde_pcc_coeffs->g;
+ mdp_pcc_coeffs->b = sde_pcc_coeffs->b;
+ mdp_pcc_coeffs->rg = sde_pcc_coeffs->rg;
+ mdp_pcc_coeffs->gb = sde_pcc_coeffs->gb;
+ mdp_pcc_coeffs->rb = sde_pcc_coeffs->rb;
+ mdp_pcc_coeffs->rgb = sde_pcc_coeffs->rgb;
+ }
+ out_data->payload = mdp_pcc;
+#endif
return ret;
}
@@ -266,18 +353,49 @@
DisplayError HWColorManagerDrm::GetDrmMixerGC(const PPFeatureInfo &in_data,
DRMPPFeatureInfo *out_data) {
DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ if (!out_data) {
+ DLOGE("Invalid input parameter for Mixer GC");
+ return kErrorParameters;
+ }
+
+ out_data->id = kPPFeaturesMax;
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+#endif
return ret;
}
DisplayError HWColorManagerDrm::GetDrmPAV2(const PPFeatureInfo &in_data,
DRMPPFeatureInfo *out_data) {
DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ if (!out_data) {
+ DLOGE("Invalid input parameter for PA V2");
+ return kErrorParameters;
+ }
+
+ out_data->id = kPPFeaturesMax;
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+
+#endif
return ret;
}
DisplayError HWColorManagerDrm::GetDrmDither(const PPFeatureInfo &in_data,
DRMPPFeatureInfo *out_data) {
DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ if (!out_data) {
+ DLOGE("Invalid input parameter for dither");
+ return kErrorParameters;
+ }
+
+ out_data->id = kPPFeaturesMax;
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+#endif
return ret;
}
@@ -360,6 +478,16 @@
DisplayError HWColorManagerDrm::GetDrmPADither(const PPFeatureInfo &in_data,
DRMPPFeatureInfo *out_data) {
DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ if (!out_data) {
+ DLOGE("Invalid input parameter for PA dither");
+ return kErrorParameters;
+ }
+
+ out_data->id = kPPFeaturesMax;
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+#endif
return ret;
}
diff --git a/sdm/libs/core/drm/hw_color_manager_drm.h b/sdm/libs/core/drm/hw_color_manager_drm.h
index a10d00b..290c606 100644
--- a/sdm/libs/core/drm/hw_color_manager_drm.h
+++ b/sdm/libs/core/drm/hw_color_manager_drm.h
@@ -38,6 +38,8 @@
namespace sdm {
+static const uint32_t kMaxPCCChanel = 3;
+
class HWColorManagerDrm {
public:
static DisplayError (*GetDrmFeature[kMaxNumPPFeatures])(const PPFeatureInfo &in_data,