diff --git a/include/ipa/ipa_interface.h b/include/ipa/ipa_interface.h
index c393b64f6aa1..dfb1bcbee516 100644
--- a/include/ipa/ipa_interface.h
+++ b/include/ipa/ipa_interface.h
@@ -33,7 +33,6 @@ struct IPAOperationData {
 	unsigned int operation;
 	std::vector<uint32_t> data;
 	std::vector<ControlList> controls;
-	std::vector<V4L2ControlList> v4l2controls;
 };
 
 class IPAInterface
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 69ced840585f..13059d99036c 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -215,7 +215,7 @@ void IPARkISP1::setControls(unsigned int frame)
 	V4L2ControlList ctrls(ctrls_);
 	ctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure_));
 	ctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain_));
-	op.v4l2controls.push_back(ctrls);
+	op.controls.push_back(ctrls);
 
 	queueFrameAction.emit(frame, op);
 }
diff --git a/src/libcamera/ipa_interface.cpp b/src/libcamera/ipa_interface.cpp
index 4fb178298f4c..0571b8e6bf8b 100644
--- a/src/libcamera/ipa_interface.cpp
+++ b/src/libcamera/ipa_interface.cpp
@@ -120,14 +120,6 @@ namespace libcamera {
  * by the IPA protocol.
  */
 
-/**
- * \var IPAOperationData::v4l2controls
- * \brief Operation V4L2 controls data
- *
- * The interpretation and position of different values in the array are defined
- * by the IPA protocol.
- */
-
 /**
  * \class IPAInterface
  * \brief Interface for IPA implementation
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 32b023730009..9b19bde8a274 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -324,7 +324,7 @@ RkISP1FrameInfo *RkISP1Frames::find(Request *request)
 class RkISP1ActionSetSensor : public FrameAction
 {
 public:
-	RkISP1ActionSetSensor(unsigned int frame, CameraSensor *sensor, V4L2ControlList controls)
+	RkISP1ActionSetSensor(unsigned int frame, CameraSensor *sensor, const ControlList &controls)
 		: FrameAction(frame, SetSensor), sensor_(sensor), controls_(controls) {}
 
 protected:
@@ -335,7 +335,7 @@ protected:
 
 private:
 	CameraSensor *sensor_;
-	V4L2ControlList controls_;
+	ControlList controls_;
 };
 
 class RkISP1ActionQueueBuffers : public FrameAction
@@ -387,7 +387,7 @@ void RkISP1CameraData::queueFrameAction(unsigned int frame,
 {
 	switch (action.operation) {
 	case RKISP1_IPA_ACTION_V4L2_SET: {
-		V4L2ControlList controls = action.v4l2controls[0];
+		const ControlList &controls = action.controls[0];
 		timeline_.scheduleAction(utils::make_unique<RkISP1ActionSetSensor>(frame,
 										   sensor_,
 										   controls));
