diff --git a/src/ipa/libipa/exposure_mode_helper.cpp b/src/ipa/libipa/exposure_mode_helper.cpp
index 7a810a3673..cadd1903d8 100644
--- a/src/ipa/libipa/exposure_mode_helper.cpp
+++ b/src/ipa/libipa/exposure_mode_helper.cpp
@@ -203,8 +203,9 @@ double ExposureModeHelper::clampGain(double gain, double *quantizationGain) cons
  * value.
  *
  * If no combination of exposure time and gain limits is found that meets the
- * required exposure, the helper falls-back to simply maximising the exposure
- * time first, followed by analogue gain, followed by digital gain.
+ * required exposure, then the exposure and gain of the last stage will be used,
+ * unless there are no stages, in which case first the exposure, then the
+ * analogue gain, then the digital gain will be maximized as necessary.
  *
  * During the calculations the gain missed due to quantization is recorded and
  * returned as quantization gain. The quantization gain is not included in the
@@ -295,12 +296,11 @@ ExposureModeHelper::splitExposure(utils::Duration exposure) const
 	}
 
 	/*
-	 * From here on all we can do is max out the exposure time, followed by
-	 * the analogue gain. If we still haven't achieved the target we send
-	 * the rest of the exposure time to digital gain.
+	 * If no stages could satisfy the desired exposure, then use the last
+	 * stage's exposure time and gain.
 	 */
-	exposureTime = clampExposureTime(exposure / lastStageGain, &quantGain);
-	gain = clampGain(exposure / exposureTime, &quantGain2);
+	exposureTime = clampExposureTime(stages_.back().exposureTime, &quantGain);
+	gain = clampGain(stages_.back().gain, &quantGain2);
 	quantGain *= quantGain2;
 
 	return { exposureTime, gain, quantGain,
