diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index bf2c13b6..708adfc9 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -52,7 +52,7 @@ private:
 			      const rkisp1_stat_buffer *stats);
 
 	void setControls(unsigned int frame);
-	void metadataReady(unsigned int frame, unsigned int aeState);
+	void metadataReady(unsigned int frame, int aeState);
 
 	std::map<unsigned int, FrameBuffer> buffers_;
 	std::map<unsigned int, MappedFrameBuffer> mappedBuffers_;
@@ -221,8 +221,9 @@ void IPARkISP1::queueRequest(unsigned int frame, rkisp1_params_cfg *params,
 	memset(params, 0, sizeof(*params));
 
 	/* Auto Exposure on/off. */
-	if (controls.contains(controls::AeEnable)) {
-		autoExposure_ = controls.get(controls::AeEnable);
+	if (controls.contains(controls::ExposureTimeMode)) {
+		autoExposure_ = (controls.get(controls::ExposureTimeMode) ==
+				 controls::ExposureTimeModeAuto);
 		if (autoExposure_)
 			params->module_ens = RKISP1_CIF_ISP_MODULE_AEC;
 
@@ -239,7 +240,7 @@ void IPARkISP1::updateStatistics(unsigned int frame,
 				 const rkisp1_stat_buffer *stats)
 {
 	const rkisp1_cif_isp_stat *params = &stats->params;
-	unsigned int aeState = 0;
+	int aeState = controls::AeStateInactive;
 
 	if (stats->meas_type & RKISP1_CIF_ISP_STAT_AUTOEXP) {
 		const rkisp1_cif_isp_ae_stat *ae = &params->ae;
@@ -274,7 +275,9 @@ void IPARkISP1::updateStatistics(unsigned int frame,
 			setControls(frame + 1);
 		}
 
-		aeState = fabs(factor - 1.0f) < 0.05f ? 2 : 1;
+		aeState = fabs(factor - 1.0f) < 0.05f ?
+			  controls::AeStateConverged :
+			  controls::AeStateSearching;
 	}
 
 	metadataReady(frame, aeState);
@@ -293,12 +296,11 @@ void IPARkISP1::setControls(unsigned int frame)
 	queueFrameAction.emit(frame, op);
 }
 
-void IPARkISP1::metadataReady(unsigned int frame, unsigned int aeState)
+void IPARkISP1::metadataReady(unsigned int frame, int aeState)
 {
 	ControlList ctrls(controls::controls);
 
-	if (aeState)
-		ctrls.set(controls::AeLocked, aeState == 2);
+	ctrls.set(controls::AeState, aeState);
 
 	RkISP1Action op;
 	op.op = ActionMetadata;
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 98008862..1ed4522f 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -935,8 +935,8 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
 
 	ControlInfoMap::Map ctrls;
 	ctrls.emplace(std::piecewise_construct,
-		      std::forward_as_tuple(&controls::AeEnable),
-		      std::forward_as_tuple(false, true));
+		      std::forward_as_tuple(&controls::ExposureTimeMode),
+		      std::forward_as_tuple(ControlInfo(controls::AeExposureModeValues)));
 
 	data->controlInfo_ = ControlInfoMap(std::move(ctrls),
 					    controls::controls);
