diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 31e5ae103209..a3b78bf4dc6b 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -1470,8 +1470,6 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
 	data->delayedCtrls_ =
 		std::make_unique<DelayedControls>(data->sensor_->device(),
 						  params);
-	isp_->frameStart.connect(data->delayedCtrls_.get(),
-				 &DelayedControls::applyControls);
 
 	uint32_t supportedBlocks = kDefaultExtParamsBlocks;
 
@@ -1506,6 +1504,15 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
 	return 0;
 }
 
+void PipelineHandlerRkISP1::frameStart(uint32_t sequence)
+{
+	if (!activeCamera_)
+		return;
+
+	RkISP1CameraData *data = cameraData(activeCamera_);
+	data->delayedCtrls_->applyControls(sequence);
+}
+
 bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
 {
 	DeviceMatch dm("rkisp1");
@@ -1548,6 +1555,7 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
 	if (hasSelfPath_ && !selfPath_.init(media_))
 		return false;
 
+	isp_->frameStart.connect(this, &PipelineHandlerRkISP1::frameStart);
 	mainPath_.bufferReady().connect(this, &PipelineHandlerRkISP1::imageBufferReady);
 	if (hasSelfPath_)
 		selfPath_.bufferReady().connect(this, &PipelineHandlerRkISP1::imageBufferReady);
