diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
index b0d89541da8550bd50472779da7fa8e33b96e2f0..e303d724ab165bac03ac6bb9d3891a76049cff47 100644
--- a/src/ipa/ipu3/algorithms/agc.cpp
+++ b/src/ipa/ipu3/algorithms/agc.cpp
@@ -115,9 +115,17 @@ int Agc::configure(IPAContext &context,
 	context.activeState.agc.constraintMode = constraintModes().begin()->first;
 	context.activeState.agc.exposureMode = exposureModeHelpers().begin()->first;
 
-	/* \todo Run this again when FrameDurationLimits is passed in */
-	setLimits(minExposureTime_, maxExposureTime_, minAnalogueGain_,
-		  maxAnalogueGain_, {});
+	AgcMeanLuminance::AgcSensorConfiguration sensorConfig;
+	sensorConfig.lineDuration = context.configuration.sensor.lineDuration;
+	sensorConfig.minExposureTime = minExposureTime_;
+	sensorConfig.maxExposureTime = maxExposureTime_;
+	sensorConfig.minAnalogueGain = minAnalogueGain_;
+	sensorConfig.maxAnalogueGain = maxAnalogueGain_;
+
+	AgcMeanLuminance::configure(sensorConfig, context.camHelper.get());
+
+	/* \todo Update AGC limits when FrameDurationLimits is passed in */
+
 	resetFrameCount();
 
 	return 0;
diff --git a/src/ipa/libipa/agc_mean_luminance.cpp b/src/ipa/libipa/agc_mean_luminance.cpp
index 64f36bd75dd213671b5a2e6810245096ed001f21..9886864fc42514040eadb4c0b424796df1f1b6e1 100644
--- a/src/ipa/libipa/agc_mean_luminance.cpp
+++ b/src/ipa/libipa/agc_mean_luminance.cpp
@@ -95,6 +95,42 @@ static constexpr double kMaxRelativeLuminanceTarget = 0.95;
  * \brief The luminance target for the constraint
  */
 
+/**
+ * \struct AgcMeanLuminance::AgcSensorConfiguration
+ * \brief The sensor configuration parameters
+ *
+ * This structure collects the sensor configuration parameters which need
+ * to be provided to the AGC algorithm at configure() time.
+ *
+ * Each time configure() is called the sensor configuration need to be updated
+ * with new parameters.
+ */
+
+/**
+ * \var AgcMeanLuminance::AgcSensorConfiguration::lineDuration
+ * \brief The line duration in microseconds
+ */
+
+/**
+ * \var AgcMeanLuminance::AgcSensorConfiguration::minExposureTime
+ * \brief The sensor minimum exposure time in microseconds
+ */
+
+/**
+ * \var AgcMeanLuminance::AgcSensorConfiguration::maxExposureTime
+ * \brief The sensor maximum exposure time in microseconds
+ */
+
+/**
+ * \var AgcMeanLuminance::AgcSensorConfiguration::minAnalogueGain
+ * \brief The sensor minimum analogue gain absolute value
+ */
+
+/**
+ * \var AgcMeanLuminance::AgcSensorConfiguration::maxAnalogueGain
+ * \brief The sensor maximum analogue gain absolute value
+ */
+
 /**
  * \class AgcMeanLuminance
  * \brief A mean-based auto-exposure algorithm
@@ -314,17 +350,21 @@ int AgcMeanLuminance::parseExposureModes(const YamlObject &tuningData)
 
 /**
  * \brief Configure the exposure mode helpers
- * \param[in] lineDuration The sensor line length
+ * \param[in] config The sensor configuration
  * \param[in] sensorHelper The sensor helper
  *
- * This function configures the exposure mode helpers so they can correctly
+ * This function configures the exposure mode helpers by providing them the
+ * sensor configuration parameters and the sensor helper, so they can correctly
  * take quantization effects into account.
  */
-void AgcMeanLuminance::configure(utils::Duration lineDuration,
+void AgcMeanLuminance::configure(const AgcSensorConfiguration &config,
 				 const CameraSensorHelper *sensorHelper)
 {
 	for (auto &[id, helper] : exposureModeHelpers_)
-		helper->configure(lineDuration, sensorHelper);
+		helper->configure(config.lineDuration,
+				  config.minExposureTime, config.maxExposureTime,
+				  config.minAnalogueGain, config.maxAnalogueGain,
+				  sensorHelper);
 }
 
 /**
diff --git a/src/ipa/libipa/agc_mean_luminance.h b/src/ipa/libipa/agc_mean_luminance.h
index d7ec548e3e585e28fd03b956c8de7eaac5dc6e99..5ab75a3ac6c550a655f4bb7c8c30419ad8249183 100644
--- a/src/ipa/libipa/agc_mean_luminance.h
+++ b/src/ipa/libipa/agc_mean_luminance.h
@@ -42,7 +42,16 @@ public:
 		double yTarget;
 	};
 
-	void configure(utils::Duration lineDuration, const CameraSensorHelper *sensorHelper);
+	struct AgcSensorConfiguration {
+		utils::Duration lineDuration;
+		utils::Duration minExposureTime;
+		utils::Duration maxExposureTime;
+		double minAnalogueGain;
+		double maxAnalogueGain;
+	};
+
+	void configure(const AgcSensorConfiguration &config,
+		       const CameraSensorHelper *sensorHelper);
 	int parseTuningData(const YamlObject &tuningData);
 
 	void setExposureCompensation(double gain)
diff --git a/src/ipa/libipa/exposure_mode_helper.cpp b/src/ipa/libipa/exposure_mode_helper.cpp
index 29e316d9d09181cd65cb08f26babb1a680bee62a..557e14230ba4e0f120653bc09ea23a29a54cb4c8 100644
--- a/src/ipa/libipa/exposure_mode_helper.cpp
+++ b/src/ipa/libipa/exposure_mode_helper.cpp
@@ -82,22 +82,32 @@ ExposureModeHelper::ExposureModeHelper(const Span<std::pair<utils::Duration, dou
 /**
  * \brief Configure sensor details
  * \param[in] lineDuration The current line length of the sensor
+ * \param[in] minExposureTime The minimum exposure time supported
+ * \param[in] maxExposureTime The maximum exposure time supported
+ * \param[in] minGain The minimum analogue gain supported
+ * \param[in] maxGain The maximum analogue gain supported
  * \param[in] sensorHelper The sensor helper
  *
- * This function sets the line length and sensor helper. These are used in
- * splitExposure() to take the quantization of the exposure and gain into
- * account.
+ * This function initializes the exposure helper settings using the sensor
+ * configuration parameters.
  *
- * When this has not been called, it is assumed that exposure is in micro second
- * granularity and gain has no quantization at all.
+ * The sensor parameters' min and max limits are used in splitExposure() to take
+ * the quantization of the exposure and gain into account.
  *
  * ExposureModeHelper keeps a pointer to the CameraSensorHelper, so the caller
  * has to ensure that sensorHelper is valid until the next call to configure().
  */
 void ExposureModeHelper::configure(utils::Duration lineDuration,
+				   utils::Duration minExposureTime,
+				   utils::Duration maxExposureTime,
+				   double minGain, double maxGain,
 				   const CameraSensorHelper *sensorHelper)
 {
 	lineDuration_ = lineDuration;
+	minExposureTime_ = minExposureTime;
+	maxExposureTime_ = maxExposureTime;
+	minGain_ = minGain;
+	maxGain_ = maxGain;
 	sensorHelper_ = sensorHelper;
 }
 
diff --git a/src/ipa/libipa/exposure_mode_helper.h b/src/ipa/libipa/exposure_mode_helper.h
index 968192ddc5af768ae0de58aca6c7230c7b3bd507..bb0a692c99b3128a2ee3f15304f125e073721536 100644
--- a/src/ipa/libipa/exposure_mode_helper.h
+++ b/src/ipa/libipa/exposure_mode_helper.h
@@ -26,7 +26,9 @@ public:
 	ExposureModeHelper(const Span<std::pair<utils::Duration, double>> stages);
 	~ExposureModeHelper() = default;
 
-	void configure(utils::Duration lineLength, const CameraSensorHelper *sensorHelper);
+	void configure(utils::Duration lineLength, utils::Duration minExposureTime,
+		       utils::Duration maxExposureTime, double minGain, double maxGain,
+		       const CameraSensorHelper *sensorHelper);
 	void setLimits(utils::Duration minExposureTime, utils::Duration maxExposureTime,
 		       double minGain, double maxGain);
 
diff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp
index f60fddac3f04fd6f09dc782e929ff1593758c29b..ccf72cc9e8c33b1a516322c2445efa1684b7f751 100644
--- a/src/ipa/mali-c55/algorithms/agc.cpp
+++ b/src/ipa/mali-c55/algorithms/agc.cpp
@@ -169,12 +169,16 @@ int Agc::configure(IPAContext &context,
 	context.activeState.agc.constraintMode = constraintModes().begin()->first;
 	context.activeState.agc.exposureMode = exposureModeHelpers().begin()->first;
 
-	/* \todo Run this again when FrameDurationLimits is passed in */
-	setLimits(context.configuration.agc.minShutterSpeed,
-		  context.configuration.agc.maxShutterSpeed,
-		  context.configuration.agc.minAnalogueGain,
-		  context.configuration.agc.maxAnalogueGain,
-		  {});
+	AgcMeanLuminance::AgcSensorConfiguration sensorConfig;
+	sensorConfig.lineDuration = context.configuration.sensor.lineDuration;
+	sensorConfig.minExposureTime = context.configuration.agc.minShutterSpeed;
+	sensorConfig.maxExposureTime = context.configuration.agc.maxShutterSpeed;
+	sensorConfig.minAnalogueGain = context.configuration.agc.minAnalogueGain;
+	sensorConfig.maxAnalogueGain = context.configuration.agc.maxAnalogueGain;
+
+	AgcMeanLuminance::configure(sensorConfig, context.camHelper.get());
+
+	/* \todo Update AGC limits when FrameDurationLimits is passed in */
 
 	resetFrameCount();
 
diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index f5a3c917cb6909f6ef918e5ee8e46cf97ba55010..8c07e6a6eac091d949ad71ee967c893897313cc8 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -200,13 +200,14 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)
 	context.configuration.agc.measureWindow.h_size = configInfo.outputSize.width;
 	context.configuration.agc.measureWindow.v_size = configInfo.outputSize.height;
 
-	AgcMeanLuminance::configure(context.configuration.sensor.lineDuration,
-				    context.camHelper.get());
-
-	setLimits(context.configuration.sensor.minExposureTime,
-		  context.configuration.sensor.maxExposureTime,
-		  context.configuration.sensor.minAnalogueGain,
-		  context.configuration.sensor.maxAnalogueGain, {});
+	AgcMeanLuminance::AgcSensorConfiguration sensorConfig;
+	sensorConfig.lineDuration = context.configuration.sensor.lineDuration;
+	sensorConfig.minExposureTime = context.configuration.sensor.minExposureTime;
+	sensorConfig.maxExposureTime = context.configuration.sensor.maxExposureTime;
+	sensorConfig.minAnalogueGain = context.configuration.sensor.minAnalogueGain;
+	sensorConfig.maxAnalogueGain = context.configuration.sensor.maxAnalogueGain;
+
+	AgcMeanLuminance::configure(sensorConfig, context.camHelper.get());
 
 	context.activeState.agc.automatic.yTarget = effectiveYTarget();
 
