Message ID | 20250320205105.195858-1-mzamazal@redhat.com |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
diff --git a/src/apps/cam/drm.cpp b/src/apps/cam/drm.cpp index 47bbb6b0..e19e848c 100644 --- a/src/apps/cam/drm.cpp +++ b/src/apps/cam/drm.cpp @@ -479,6 +479,18 @@ int Device::openCard() continue; } + /* Skip devices without connectors. */ + std::unique_ptr<drmModeRes, decltype(&drmModeFreeResources)> resources{ + drmModeGetResources(fd_), + &drmModeFreeResources + }; + if (!resources || resources->count_connectors <= 0) { + resources.reset(); + drmClose(fd_); + fd_ = -1; + continue; + } + found = true; break; }
Device::openCard() in the cam DRM helpers looks for a /dev/dri/card* device that can be opened and that doesn't fail when asked about DRM_CAP_DUMB_BUFFER capability (regardless whether the capability is supported by the device). There can be matching devices that are not display devices. This can lead to selection of such a device and inability to use KMS output with `cam' application. The ultimate goal is to display something on the device and later the KMS sink will fail if there is no connector attached to the device (although it can actually fail earlier, when trying to set DRM_CLIENT_CAP_ATOMIC capability if this is not supported). Let's avoid selecting devices without connectors. A question is whether the added check makes the check for DRM_CAP_DUMB_BUFFER API redundant or not. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> --- src/apps/cam/drm.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+)