diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index d7ebf63811b4..c4d40d7d0842 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -97,8 +97,6 @@ int V4L2Device::open(unsigned int flags)
 
 	setFd(std::move(fd));
 
-	listControls();
-
 	return 0;
 }
 
@@ -129,6 +127,8 @@ int V4L2Device::setFd(UniqueFD fd)
 	fdEventNotifier_->activated.connect(this, &V4L2Device::eventAvailable);
 	fdEventNotifier_->setEnabled(false);
 
+	listControls();
+
 	return 0;
 }
 
