From patchwork Thu Mar 20 20:51:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 22999 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 1B40BBD7D8 for ; Thu, 20 Mar 2025 20:51:17 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 100B868950; Thu, 20 Mar 2025 21:51:16 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="SZDF0udn"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 61F26617F5 for ; Thu, 20 Mar 2025 21:51:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742503873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=C/C5to5S8pndlB/pdV6NX48+4KJao2rqaAn7Quzx0Uc=; b=SZDF0udnqsjqlRCOhPTm11/tYaDNux85w/Jpza7uMGVsSyDXKdPjucK2/xnHWWEOWiZ6Ax jEcaMBsq9Nc1XT93tISkB0n40gzhD5aILuxJ3cya5fNlGONTqfZzLVPHzJ77Q0d8iy3lYM MgtqkL6yE+Emfp7AySqP0QdZNyjOjZc= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-590-ZySf7tN2M9ChlUWy2NZreQ-1; Thu, 20 Mar 2025 16:51:11 -0400 X-MC-Unique: ZySf7tN2M9ChlUWy2NZreQ-1 X-Mimecast-MFC-AGG-ID: ZySf7tN2M9ChlUWy2NZreQ_1742503871 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D5D9C180AB1C; Thu, 20 Mar 2025 20:51:10 +0000 (UTC) Received: from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.102]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 280041800370; Thu, 20 Mar 2025 20:51:08 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , Laurent Pinchart Subject: [PATCH] apps: cam: Skip devices without connectors Date: Thu, 20 Mar 2025 21:51:05 +0100 Message-ID: <20250320205105.195858-1-mzamazal@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 0DB6NzJ6O7jKye3HEVwgyM9EOZ49TgmckwUZvDCY-SE_1742503871 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 --- src/apps/cam/drm.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 resources{ + drmModeGetResources(fd_), + &drmModeFreeResources + }; + if (!resources || resources->count_connectors <= 0) { + resources.reset(); + drmClose(fd_); + fd_ = -1; + continue; + } + found = true; break; }