diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 1ec8d0f7de03..9274e61462fc 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -250,6 +250,14 @@ int SimpleCameraData::init()
 	SimpleConverter *converter = pipe->converter();
 	int ret;
 
+	/*
+	 * Setup links first as some subdev drivers take active links into
+	 * account to propagate TRY formats. Such is life :-(
+	 */
+	ret = setupLinks();
+	if (ret < 0)
+		return ret;
+
 	/*
 	 * Enumerate the possible pipeline configurations. For each media bus
 	 * format supported by the sensor, propagate the formats through the
@@ -259,14 +267,6 @@ int SimpleCameraData::init()
 	for (unsigned int code : sensor_->mbusCodes()) {
 		V4L2SubdeviceFormat format{ code, sensor_->resolution() };
 
-		/*
-		 * Setup links first as some subdev drivers take active links
-		 * into account to propagate TRY formats. Such is life :-(
-		 */
-		ret = setupLinks();
-		if (ret < 0)
-			return ret;
-
 		ret = setupFormats(&format, V4L2Subdevice::TryFormat);
 		if (ret < 0) {
 			LOG(SimplePipeline, Error)
