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.