diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 047123ab..fed82e22 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -389,21 +389,26 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,
 	/* Pass the camera mode to the CamHelper to setup algorithms. */
 	helper_->SetCameraMode(mode_);
 
+	/*
+	 * Initialise this ControlList correctly, even if empty, in case the IPA is
+	 * running is isolation mode (passing the ControlList through the IPC layer).
+	 */
+	ControlList ctrls(sensorCtrls_);
+
 	if (firstStart_) {
 		/* Supply initial values for frame durations. */
 		applyFrameDurations(defaultMinFrameDuration, defaultMaxFrameDuration);
 
 		/* Supply initial values for gain and exposure. */
-		ControlList ctrls(sensorCtrls_);
 		AgcStatus agcStatus;
 		agcStatus.shutter_time = defaultExposureTime;
 		agcStatus.analogue_gain = defaultAnalogueGain;
 		applyAGC(&agcStatus, ctrls);
-
-		ASSERT(controls);
-		*controls = std::move(ctrls);
 	}
 
+	ASSERT(controls);
+	*controls = std::move(ctrls);
+
 	return 0;
 }
 
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 0bdfa727..1634ca98 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -825,7 +825,8 @@ int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)
 
 	/* Start the IPA. */
 	ipa::RPi::StartConfig startConfig;
-	data->ipa_->start(controls ? *controls : ControlList{}, &startConfig);
+	data->ipa_->start(controls ? *controls : ControlList{ controls::controls },
+			  &startConfig);
 
 	/* Apply any gain/exposure settings that the IPA may have passed back. */
 	if (!startConfig.controls.empty())
