diff --git a/src/libcamera/device_enumerator_sysfs.cpp b/src/libcamera/device_enumerator_sysfs.cpp
index ad26affb38a3..197ca235879b 100644
--- a/src/libcamera/device_enumerator_sysfs.cpp
+++ b/src/libcamera/device_enumerator_sysfs.cpp
@@ -33,7 +33,6 @@ int DeviceEnumeratorSysfs::enumerate()
 {
 	struct dirent *ent;
 	DIR *dir;
-	int ret = 0;
 
 	static const char * const sysfs_dirs[] = {
 		"/sys/subsystem/media/devices",
@@ -74,14 +73,15 @@ int DeviceEnumeratorSysfs::enumerate()
 		}
 
 		std::shared_ptr<MediaDevice> media = createDevice(devnode);
-		if (!media) {
-			ret = -ENODEV;
-			break;
-		}
+		if (!media)
+			continue;
 
 		if (populateMediaDevice(media) < 0) {
-			ret = -ENODEV;
-			break;
+			LOG(DeviceEnumerator, Warning)
+				<< "Failed to populate media device "
+				<< media->deviceNode()
+				<< " (" << media->driver() << "), skipping";
+			continue;
 		}
 
 		addDevice(media);
@@ -89,7 +89,7 @@ int DeviceEnumeratorSysfs::enumerate()
 
 	closedir(dir);
 
-	return ret;
+	return 0;
 }
 
 int DeviceEnumeratorSysfs::populateMediaDevice(const std::shared_ptr<MediaDevice> &media)
diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp
index b2c5fd221dcd..87638c59761c 100644
--- a/src/libcamera/device_enumerator_udev.cpp
+++ b/src/libcamera/device_enumerator_udev.cpp
@@ -82,8 +82,15 @@ int DeviceEnumeratorUdev::addUdevDevice(struct udev_device *dev)
 			return -ENODEV;
 
 		int ret = populateMediaDevice(media);
-		if (ret == 0)
-			addDevice(media);
+		if (ret < 0) {
+			LOG(DeviceEnumerator, Warning)
+				<< "Failed to populate media device "
+				<< media->deviceNode()
+				<< " (" << media->driver() << "), skipping";
+			return ret;
+		}
+
+		addDevice(media);
 		return 0;
 	}
 
@@ -141,14 +148,18 @@ int DeviceEnumeratorUdev::enumerate()
 		devnode = udev_device_get_devnode(dev);
 		if (!devnode) {
 			udev_device_unref(dev);
-			ret = -ENODEV;
-			goto done;
+			LOG(DeviceEnumerator, Warning)
+				<< "Failed to get device node for '"
+				<< syspath << "', skipping";
+			continue;
 		}
 
-		ret = addUdevDevice(dev);
+		if (addUdevDevice(dev) < 0)
+			LOG(DeviceEnumerator, Warning)
+				<< "Failed to add device for '"
+				<< syspath << "', skipping";
+
 		udev_device_unref(dev);
-		if (ret < 0)
-			break;
 	}
 
 done:
