diff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp
index 70667db34f1e..818cea35afa9 100644
--- a/src/ipa/mali-c55/algorithms/agc.cpp
+++ b/src/ipa/mali-c55/algorithms/agc.cpp
@@ -137,6 +137,7 @@ int Agc::init(IPAContext &context, const YamlObject &tuningData)
 	if (ret)
 		return ret;
 
+	/* \todo Support AnalogueGainMode and ExposureTimeMode */
 	context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true);
 	context.ctrlMap[&controls::DigitalGain] = ControlInfo(
 		static_cast<float>(kMinDigitalGain),
diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index 137a0750017b..8a890d387efb 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -155,8 +155,6 @@ int Agc::init(IPAContext &context, const YamlObject &tuningData)
 		ControlInfo({ { ControlValue(controls::AnalogueGainModeAuto),
 				ControlValue(controls::AnalogueGainModeManual) } },
 			    ControlValue(controls::AnalogueGainModeAuto));
-	/* \todo Move this to the Camera class */
-	context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true, true);
 	context.ctrlMap.merge(controls());
 
 	return 0;
diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp
index 6565f5366312..059b1bd5942e 100644
--- a/src/ipa/rpi/common/ipa_base.cpp
+++ b/src/ipa/rpi/common/ipa_base.cpp
@@ -55,8 +55,6 @@ constexpr Duration controllerMinFrameDuration = 1.0s / 30.0;
 
 /* List of controls handled by the Raspberry Pi IPA */
 const ControlInfoMap::Map ipaControls{
-	/* \todo Move this to the Camera class */
-	{ &controls::AeEnable, ControlInfo(false, true, true) },
 	{ &controls::ExposureTimeMode,
 	  ControlInfo({ { ControlValue(controls::ExposureTimeModeAuto),
 			  ControlValue(controls::ExposureTimeModeManual) } },
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 665fc5157349..3d0782a9eed2 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -1374,25 +1374,6 @@ int Camera::queueRequest(Request *request)
 		}
 	}
 
-	/* Pre-process AeEnable. */
-	ControlList &controls = request->controls();
-	const auto &aeEnable = controls.get(controls::AeEnable);
-	if (aeEnable) {
-		if (_d()->controlInfo_.count(controls::AnalogueGainMode.id()) &&
-		    !controls.contains(controls::AnalogueGainMode.id())) {
-			controls.set(controls::AnalogueGainMode,
-				     *aeEnable ? controls::AnalogueGainModeAuto
-					       : controls::AnalogueGainModeManual);
-		}
-
-		if (_d()->controlInfo_.count(controls::ExposureTimeMode.id()) &&
-		    !controls.contains(controls::ExposureTimeMode.id())) {
-			controls.set(controls::ExposureTimeMode,
-				     *aeEnable ? controls::ExposureTimeModeAuto
-					       : controls::ExposureTimeModeManual);
-		}
-	}
-
 	LayerManager *layerManager = d->pipe()->cameraManager()->_d()->layerManager();
 	layerManager->queueRequest(this, request);
 
diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
index 4b5816dfdde0..ab12d5b5ae9a 100644
--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
@@ -607,11 +607,6 @@ int UVCCameraData::init(MediaDevice *media)
 		addControl(cid, info, &ctrls);
 	}
 
-	if (autoExposureMode_ && manualExposureMode_) {
-		/* \todo Move this to the Camera class */
-		ctrls[&controls::AeEnable] = ControlInfo(false, true, true);
-	}
-
 	controlInfo_ = ControlInfoMap(std::move(ctrls), controls::controls);
 
 	/*
