libhwc2.1: determine panel calibration status

A function to calculate a panel's calibration status was added to HWC.
This is exposed over an AIDL interface to other services.

Bug: 228113713
Change-Id: Ib14589ac8bb5e56d4fb24d837f1721b49f2c5d55
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
index a8425c4..a6ec3c1 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
@@ -1058,6 +1058,24 @@
     return mCurrentLbeState;
 }
 
+PanelCalibrationStatus ExynosPrimaryDisplayModule::getPanelCalibrationStatus() {
+    auto displayColorInterface = getDisplayColorInterface();
+    if (displayColorInterface == nullptr) {
+        return PanelCalibrationStatus::UNCALIBRATED;
+    }
+
+    auto displayType = getBuiltInDisplayType();
+    auto calibrationInfo = displayColorInterface->GetCalibrationInfo(displayType);
+
+    if (calibrationInfo.factory_cal_loaded) {
+        return PanelCalibrationStatus::ORIGINAL;
+    } else if (calibrationInfo.golden_cal_loaded) {
+        return PanelCalibrationStatus::GOLDEN;
+    } else {
+        return PanelCalibrationStatus::UNCALIBRATED;
+    }
+}
+
 int32_t ExynosPrimaryDisplayModule::setAtcStDimming(uint32_t value) {
     Mutex::Autolock lock(mAtcStMutex);
     int32_t strength = mAtcStrength.value.get();
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
index 8489f28..ada69f6 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
@@ -134,6 +134,8 @@
         virtual void setLbeAmbientLight(int value);
         virtual LbeState getLbeState();
 
+        virtual PanelCalibrationStatus getPanelCalibrationStatus();
+
         class DisplaySceneInfo {
             public:
                 struct LayerMappingInfo {