diff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp
index 67a497b8c829..d6e04af21470 100644
--- a/src/android/camera3_hal.cpp
+++ b/src/android/camera3_hal.cpp
@@ -32,7 +32,7 @@ static int hal_get_camera_info(int id, struct camera_info *info)
 	return cameraManager.getCameraInfo(id, info);
 }
 
-static int hal_set_callbacks([[maybe_unused]] const camera_module_callbacks_t *callbacks)
+static int hal_set_callbacks(const camera_module_callbacks_t *callbacks)
 {
 	cameraManager.setCallbacks(callbacks);
 
diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
index a1805ebccf24..05b474010b1d 100644
--- a/src/android/camera_hal_manager.cpp
+++ b/src/android/camera_hal_manager.cpp
@@ -29,7 +29,7 @@ LOG_DECLARE_CATEGORY(HAL);
  */
 
 CameraHalManager::CameraHalManager()
-	: cameraManager_(nullptr), numInternalCameras_(0),
+	: cameraManager_(nullptr), callbacks_(nullptr), numInternalCameras_(0),
 	  nextExternalCameraId_(firstExternalCameraId_)
 {
 }
@@ -70,6 +70,11 @@ CameraDevice *CameraHalManager::open(unsigned int id,
 {
 	MutexLocker locker(mutex_);
 
+	if (!callbacks_) {
+		LOG(HAL, Error) << "Can't open camera before callbacks are set";
+		return nullptr;
+	}
+
 	CameraDevice *camera = cameraDeviceFromHalId(id);
 	if (!camera) {
 		LOG(HAL, Error) << "Invalid camera id '" << id << "'";
