diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index 3d4a17ff..2b7c6fda 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -244,6 +244,13 @@ void Agc::process(IPAContext &context, const rkisp1_stat_buffer *stats)
 	frameCount_++;
 }
 
+void Agc::prepare([[maybe_unused]] IPAContext &context,
+		  rkisp1_params_cfg *params)
+{
+	params->module_ens |= RKISP1_CIF_ISP_MODULE_AEC;
+	params->module_en_update |= RKISP1_CIF_ISP_MODULE_AEC;
+}
+
 } /* namespace ipa::rkisp1::algorithms */
 
 } /* namespace libcamera */
diff --git a/src/ipa/rkisp1/algorithms/agc.h b/src/ipa/rkisp1/algorithms/agc.h
index fbb8ea98..934a455e 100644
--- a/src/ipa/rkisp1/algorithms/agc.h
+++ b/src/ipa/rkisp1/algorithms/agc.h
@@ -28,6 +28,7 @@ public:
 	~Agc() = default;
 
 	int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override;
+	void prepare(IPAContext &context, rkisp1_params_cfg *params) override;
 	void process(IPAContext &context, const rkisp1_stat_buffer *stats) override;
 
 private:
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 1783f91f..b1bfb8b6 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -271,19 +271,13 @@ void IPARkISP1::processEvent(const RkISP1Event &event)
 }
 
 void IPARkISP1::queueRequest(unsigned int frame, rkisp1_params_cfg *params,
-			     const ControlList &controls)
+			     [[maybe_unused]] const ControlList &controls)
 {
 	/* Prepare parameters buffer. */
 	memset(params, 0, sizeof(*params));
 
-	/* Auto Exposure on/off. */
-	if (controls.contains(controls::AeEnable)) {
-		autoExposure_ = controls.get(controls::AeEnable);
-		if (autoExposure_)
-			params->module_ens = RKISP1_CIF_ISP_MODULE_AEC;
-
-		params->module_en_update = RKISP1_CIF_ISP_MODULE_AEC;
-	}
+	for (auto const &algo : algorithms_)
+		algo->prepare(context_, params);
 
 	RkISP1Action op;
 	op.op = ActionParamFilled;
