camera: intel: ipu6: Fail HAL init when no sensor available

When all sensors were not properly initialized in the IPU6 HAL,
hal_init() should fail so there's chance for CrOS camera service to
restart and re-trigger HAL initialization for the sensors.

Also some minor fixes around the camera number check with CrOS config.

BUG=b:149069716
TEST=Deploy and check HAL initialization during boot.

Change-Id: I90e33b58e4e7bd0326cb3306bd40843903b88831
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2563511
Reviewed-by: Qingwu Zhang <qingwu.zhang@intel.com>
Reviewed-by: Hung-yu Wu <hywu@chromium.org>
Tested-by: Tianshu Qiu <tian.shu.qiu@intel.com>
Commit-Queue: Ren-Pei Zeng <kamesan@chromium.org>
diff --git a/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp b/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp
index 74fdb01..c191558 100644
--- a/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp
+++ b/camera/hal/intel/ipu6/aal/Camera3HALModule.cpp
@@ -205,20 +205,19 @@
                "%s, Connect to algo service fails", __func__);
 #endif
 
-    // Check if sensor is available
-    if (!icamera::PlatformData::isSensorAvailable()) {
-        LOG2("There is no sensor available");
-        return 0;
-    }
-
     int crosCameraNum = camera3::HalV3Utils::getCrosConfigCameraNumber();
     int xmlCameraNum = icamera::PlatformData::getXmlCameraNumber();
     int currentCameraNum = icamera::PlatformData::numberOfCameras();
 
-    sCameraNumber = (xmlCameraNum != -1) ? xmlCameraNum : crosCameraNum;
-    CheckError(currentCameraNum < sCameraNumber, -EINVAL,
-               "@%s, expected cameras number: %d, found: %d", __func__, sCameraNumber,
-               currentCameraNum);
+    if (xmlCameraNum == -1 && crosCameraNum == -1) {
+        LOGW("static camera number is not available");
+        sCameraNumber = currentCameraNum;
+    } else {
+        sCameraNumber = (xmlCameraNum != -1) ? xmlCameraNum : crosCameraNum;
+        CheckError(currentCameraNum < sCameraNumber, -EINVAL,
+                   "@%s, expected cameras number: %d, found: %d", __func__,
+                   sCameraNumber, currentCameraNum);
+    }
 
     if (sCameraNumber != 0) {
         // Initialize PlatformData
diff --git a/camera/hal/intel/ipu6/aal/HALv3Utils.cpp b/camera/hal/intel/ipu6/aal/HALv3Utils.cpp
index 65b7f45..9f8b66d 100644
--- a/camera/hal/intel/ipu6/aal/HALv3Utils.cpp
+++ b/camera/hal/intel/ipu6/aal/HALv3Utils.cpp
@@ -176,7 +176,7 @@
     int cameraNumber = 0;
     brillo::CrosConfig crosConfig;
     bool status = crosConfig.Init();
-    CheckWarning(!status, 0, "@%s, Failed to initialize CrOS config", __func__);
+    CheckWarning(!status, -1, "@%s, Failed to initialize CrOS config", __func__);
 
     // Get MIPI camera count from "devices" array in Chrome OS config. The structure looks like:
     //     camera - devices + 0 + interface (mipi, usb)
@@ -185,21 +185,16 @@
     //                      |   ...
     //                      + 1 + interface
     //                          ...
-    bool isCameraNumberAvailable = false;
     for (int i = 0;; ++i) {
         std::string interface;
         if (!crosConfig.GetString(base::StringPrintf("/camera/devices/%i", i), "interface",
                                   &interface)) {
             break;
         }
-        isCameraNumberAvailable = true;
         if (interface == "mipi") {
             ++cameraNumber;
         }
     }
-    CheckWarning(!isCameraNumberAvailable, 0,
-                 "@%s, Can't get MIPI camera count from CrOS config", __func__);
-
     return cameraNumber;
 }
 }  // namespace HalV3Utils
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
index 743492b..7286650 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
@@ -84,12 +84,6 @@
     mAiqInitData.clear();
 }
 
-bool PlatformData::isSensorAvailable() {
-    LOG2("@%s", __func__);
-
-    return !getInstance()->mStaticCfg.mCommonConfig.availableSensors.empty();
-}
-
 int PlatformData::init() {
     LOG2("@%s", __func__);
 
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
index bb3ac89..5b1f76a 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
@@ -289,13 +289,6 @@
     static void releaseInstance();
 
     /**
-     * Check if avaibleSensors is empty
-     *
-     * \return true if has sensor ,otherwise return false.
-     */
-    static bool isSensorAvailable();
-
-    /**
      * init PlatformData
      *
      * \return OK if init PlatformData successfully, otherwise return ERROR.