From patchwork Thu May 15 16:25:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 23378 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 16857C3200 for ; Thu, 15 May 2025 16:25:46 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 30ABF68B70; Thu, 15 May 2025 18:25:45 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="fVXTf30k"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id D893668B4F for ; Thu, 15 May 2025 18:25:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747326342; 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=1GIWu2wcaqWEm4hRg2MYgy/ypeO2bopATJGV54VDXjs=; b=fVXTf30kGFMCsIxZ7rzyAPRjL100/pUDdcqi0Ve6TT0OVQ1SyExK1slRGW1JZ8U5Io1vQ1 bpkaxWFj7unnoesVkUVf1EkaXyg1i6bGLm7V8nND/KMHo863XoUA/1V8wXLVoG9noM0vXP d50hyV9V6qaCq3kim5gj68Rat5UEnEg= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-257-Ti6XJqbeNcOQcQp5y89Z6Q-1; Thu, 15 May 2025 12:25:41 -0400 X-MC-Unique: Ti6XJqbeNcOQcQp5y89Z6Q-1 X-Mimecast-MFC-AGG-ID: Ti6XJqbeNcOQcQp5y89Z6Q_1747326340 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BC282195608C for ; Thu, 15 May 2025 16:25:40 +0000 (UTC) Received: from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.124]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9B2CF18003FD; Thu, 15 May 2025 16:25:39 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal Subject: [PATCH v2] apps: cam: Skip devices without connectors Date: Thu, 15 May 2025 18:25:36 +0200 Message-ID: <20250515162536.131131-1-mzamazal@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: jhEB66hSQ2iSvG82qnwClKTrxi-ii2hUj1qRdn4xdsI_1747326340 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. Changes in v2: - Rebased on current master. 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; }