summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/device_enumerator_sysfs.cpp16
-rw-r--r--src/libcamera/device_enumerator_udev.cpp25
2 files changed, 26 insertions, 15 deletions
diff --git a/src/libcamera/device_enumerator_sysfs.cpp b/src/libcamera/device_enumerator_sysfs.cpp
index ad26affb..197ca235 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 b2c5fd22..87638c59 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: