diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index b9f4d786..c97b5698 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -68,6 +68,8 @@ public:
 
 	CameraLens *focusLens() { return focusLens_.get(); }
 
+	int resetHblank();
+
 protected:
 	std::string logPrefix() const override;
 
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index 572a313a..589e9736 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -176,6 +176,11 @@ int CameraSensor::init()
 	if (ret)
 		return ret;
 
+	return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
+}
+
+int CameraSensor::resetHblank()
+{
 	/*
 	 * Set HBLANK to the minimum to start with a well-defined line length,
 	 * allowing IPA modules that do not modify HBLANK to use the sensor
@@ -192,17 +197,16 @@ int CameraSensor::init()
 	const ControlInfo hblank = ctrls.infoMap()->at(V4L2_CID_HBLANK);
 	const int32_t hblankMin = hblank.min().get<int32_t>();
 	const int32_t hblankMax = hblank.max().get<int32_t>();
+	int ret = 0;
 
 	if (hblankMin != hblankMax) {
 		ControlList ctrl(subdev_->controls());
 
 		ctrl.set(V4L2_CID_HBLANK, hblankMin);
 		ret = subdev_->setControls(&ctrl);
-		if (ret)
-			return ret;
 	}
 
-	return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
+	return ret;
 }
 
 int CameraSensor::validateSensorDriver()
