camera: intel: ipu6: Use the fixed saturation factor for manual ccm test

The dynamic saturation factor in tuning file causes unexpected
result during manual ccm ITS test, so needs to use one fixed value
override it

BUG=b:175983388
TEST=Full tested pass for camera functions.

Change-Id: Ia98ddbce59622e6e908479e1adb2dc16070398f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2677157
Tested-by: Zong Li <zong.li@intel.com>
Reviewed-by: Raymond Wong <wongraymond@google.com>
Reviewed-by: YH Lin <yueherngl@chromium.org>
Commit-Queue: YH Lin <yueherngl@chromium.org>
diff --git a/camera/hal/intel/ipu6/src/core/IspParamAdaptor.cpp b/camera/hal/intel/ipu6/src/core/IspParamAdaptor.cpp
index e8611f8..561e514 100644
--- a/camera/hal/intel/ipu6/src/core/IspParamAdaptor.cpp
+++ b/camera/hal/intel/ipu6/src/core/IspParamAdaptor.cpp
@@ -829,6 +829,13 @@
     }
     LOG2("%s, media format: 0x%x", __func__, inputParams.media_format);
 
+    float saturationFactor = PlatformData::getManualSaturationFactor(mCameraId);
+    if (saturationFactor > 0.0f &&
+        aiqResults->mAiqParam.awbMode == AWB_MODE_MANUAL_COLOR_TRANSFORM) {
+        inputParams.pa_results->saturation_factor = saturationFactor;
+    }
+    LOG2("%s, saturation_factor: %f", __func__, inputParams.pa_results->saturation_factor);
+
     if (VIDEO_STREAM_ID == streamId) {
         inputParams.call_rate_control.mode = ia_isp_call_rate_never_on_converged;
     } else {
diff --git a/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp b/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
index d5cffdd..3d063de 100644
--- a/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
@@ -483,6 +483,8 @@
     } else if (strcmp(name, "tnrExtraFrameNum") == 0) {
         int val = atoi(atts[1]);
         pCurrentCam->mTnrExtraFrameNum = val > 0 ? val : DEFAULT_TNR_EXTRA_FRAME_NUM;
+    } else if (strcmp(name, "saturationFactor") == 0) {
+        pCurrentCam->mSaturationFactor = atof(atts[1]);
     }
 }
 
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
index 59c03dd..322d702 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
@@ -1405,4 +1405,9 @@
 {
     return getInstance()->mStaticCfg.mCameras[cameraId].mTnrExtraFrameNum;
 }
+
+float PlatformData::getManualSaturationFactor(int cameraId)
+{
+    return getInstance()->mStaticCfg.mCameras[cameraId].mSaturationFactor;
+}
 } // namespace icamera
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
index 1e33187..e82de38 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
@@ -143,7 +143,8 @@
                 mSwProcessingAlignWithIsp(false),
                 mMaxNvmDataSize(0),
                 mVideoStreamNum(DEFAULT_VIDEO_STREAM_NUM),
-                mTnrExtraFrameNum(DEFAULT_TNR_EXTRA_FRAME_NUM)
+                mTnrExtraFrameNum(DEFAULT_TNR_EXTRA_FRAME_NUM),
+                mSaturationFactor(-1.0f)
             {
             }
 
@@ -235,6 +236,7 @@
             std::vector<IGraphType::ScalerInfo> mScalerInfo;
             int mVideoStreamNum;
             int mTnrExtraFrameNum;
+            float mSaturationFactor;
         };
 
         std::vector<CameraInfo> mCameras;
@@ -1197,5 +1199,13 @@
      * the extra frame count for still stream
      */
      static int getTnrExtraFrameCount(int cameraId);
+
+     /**
+     * Get saturation factor for manual CCM
+     *
+     * \param cameraId: [0, MAX_CAMERA_NUMBER - 1]
+     * \return manual saturation factor
+     */
+     static float getManualSaturationFactor(int cameraId);
 };
 } /* namespace icamera */