QCamera3: Suspend Easel is openCamera fails

Test: Camera CTS
Bug: 62073170
Change-Id: Ia4059e40e47970d5bf531861592407034df6d353
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 777bf30..1c58f89 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -858,11 +858,40 @@
     LOGI("[KPI Perf]: E PROFILE_OPEN_CAMERA camera id %d",
              mCameraId);
 
+    if (mCameraHandle) {
+        LOGE("Failure: Camera already opened");
+        return ALREADY_EXISTS;
+    }
+
+    {
+        Mutex::Autolock l(gHdrPlusClientLock);
+        if (gEaselManagerClient.isEaselPresentOnDevice()) {
+            logEaselEvent("EASEL_STARTUP_LATENCY", "Resume");
+            rc = gEaselManagerClient.resume();
+            if (rc != 0) {
+                ALOGE("%s: Resuming Easel failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
+                return rc;
+            }
+        }
+    }
+
     rc = openCamera();
     if (rc == 0) {
         *hw_device = &mCameraDevice.common;
     } else {
         *hw_device = NULL;
+
+        // Suspend Easel because opening camera failed.
+        {
+            Mutex::Autolock l(gHdrPlusClientLock);
+            if (gEaselManagerClient.isEaselPresentOnDevice()) {
+                status_t suspendErr = gEaselManagerClient.suspend();
+                if (suspendErr != 0) {
+                    ALOGE("%s: Suspending Easel failed: %s (%d)", __FUNCTION__,
+                            strerror(-suspendErr), suspendErr);
+                }
+            }
+        }
     }
 
     LOGI("[KPI Perf]: X PROFILE_OPEN_CAMERA camera id %d, rc: %d",
@@ -892,22 +921,6 @@
     char value[PROPERTY_VALUE_MAX];
 
     KPI_ATRACE_CAMSCOPE_CALL(CAMSCOPE_HAL3_OPENCAMERA);
-    if (mCameraHandle) {
-        LOGE("Failure: Camera already opened");
-        return ALREADY_EXISTS;
-    }
-
-    {
-        Mutex::Autolock l(gHdrPlusClientLock);
-        if (gEaselManagerClient.isEaselPresentOnDevice()) {
-            logEaselEvent("EASEL_STARTUP_LATENCY", "Resume");
-            rc = gEaselManagerClient.resume();
-            if (rc != 0) {
-                ALOGE("%s: Resuming Easel failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
-                return rc;
-            }
-        }
-    }
 
     rc = QCameraFlash::getInstance().reserveFlashForCamera(mCameraId);
     if (rc < 0) {