diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 7f7e5b8f..cc4f52bf 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -621,7 +621,11 @@ void V4L2Device::updateControls(ControlList *ctrls,
 		const unsigned int id = v4l2Ctrl.id;
 
 		ControlValue value = ctrls->get(id);
-		switch (value.type()) {
+
+		auto iter = controls_.find(id);
+		ASSERT(iter != controls_.end());
+		const ControlType type = iter->first->type();
+		switch (type) {
 		case ControlTypeInteger64:
 			value.set<int64_t>(v4l2Ctrl.value64);
 			break;
