diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
index 9af1c0ab..37bafb9b 100644
--- a/src/libcamera/v4l2_subdevice.cpp
+++ b/src/libcamera/v4l2_subdevice.cpp
@@ -354,10 +354,10 @@ V4L2Subdevice::Formats V4L2Subdevice::formats(unsigned int pad)
 		return {};
 	}
 
+	std::vector<SizeRange> sizes = {};
 	for (unsigned int code : enumPadCodes(pad)) {
-		std::vector<SizeRange> sizes = enumPadSizes(pad, code);
-		if (sizes.empty())
-			return {};
+		std::vector<SizeRange> codeSizeRange = enumPadSizes(pad, code);
+		sizes.insert(sizes.end(), codeSizeRange.begin(), codeSizeRange.end());
 
 		const auto inserted = formats.insert({ code, sizes });
 		if (!inserted.second) {
