From patchwork Tue Feb 2 14:49:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 12061921 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 06913C433E9 for ; Tue, 2 Feb 2021 14:51:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B6D2D64F5D for ; Tue, 2 Feb 2021 14:51:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234853AbhBBOvA (ORCPT ); Tue, 2 Feb 2021 09:51:00 -0500 Received: from lb3-smtp-cloud7.xs4all.net ([194.109.24.31]:48815 "EHLO lb3-smtp-cloud7.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234831AbhBBOu0 (ORCPT ); Tue, 2 Feb 2021 09:50:26 -0500 Received: from cust-b5b5937f ([IPv6:fc0c:c16d:66b8:757f:c639:739b:9d66:799d]) by smtp-cloud7.xs4all.net with ESMTPA id 6wzel32bSefbk6wzilkQkK; Tue, 02 Feb 2021 15:49:30 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s2; t=1612277370; bh=7fv3oSjetGMiecAfJ8yFAEP1Zr8uuFlogaKHZOSilug=; h=From:To:Subject:Date:Message-Id:MIME-Version:From:Subject; b=QFNkZgkGV+RMkj2IxfH4nMXaf22kJdEE3toYQ14cq7j3tMEX/x0UpB9XyUB+5S7UR oEelsO/KlDiCBGWV8mp/OtFKO3jUD25ltX15vow6ofe59m0khXss5u4ghLKP33Hziv /DXPJXw6BKiocEwqNd6nRvWIjbFh1BMA/oRrE8xE0u45EGhS1BTiHKaokilP7CKbpb n9d/rwGgdjWLBlq5EhE93wmkSgGJ8wmQyu9Z6Nt4xc0coBQtt5rSOvk4G98vExc13d xvOILWQsy/VRGeGUBwgfPpIyog/nwygoYBVebf00NWdGDTZeqCbCEN8dYunTMTJYHE 2TzFdbC+eKmLQ== From: Hans Verkuil To: linux-media@vger.kernel.org Cc: Laurent Pinchart , Sakari Ailus , Hans Verkuil Subject: [PATCHv3 1/4] vim2m: intialize the media device earlier Date: Tue, 2 Feb 2021 15:49:23 +0100 Message-Id: <20210202144926.620104-2-hverkuil-cisco@xs4all.nl> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> References: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfO6uUqsrEFiRjNa9Fmoiux1SKkZGu29xct5yio4NBYpPxUio4i0ClHkEH02a0rxTf92NXZD4hF2cH/ag9FdD1gze7AtjVHLHAB3yg+lHDjYGKwwPGDrT G5p2XsTB3uYWbWk/WErBqoHJ6NF6Y5mxseZbJFg6kxOa/fxEPTiNWq6ahu3ujHYhehOSn2LxXwXk2ZbA75L9xKpKApdTHeq0l5lLbxV6uV5fv7frSNzKDyKJ gYxcYYObeIBrOe9/csgblz7hyWglNKCJAYGykC+U5YhRBi1uqnIZkdP62Fym9hI2CJYhNEwwoZWoCG0wT+chG5XpHV2OcDFRScXYzBJ7ypc= Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Before the video device node is registered, the v4l2_dev.mdev pointer must be set in order to correctly associate the video device with the media device. Move the initialization of the media device up. Signed-off-by: Hans Verkuil --- drivers/media/test-drivers/vim2m.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/media/test-drivers/vim2m.c b/drivers/media/test-drivers/vim2m.c index 331a9053a0ed..a24624353f9e 100644 --- a/drivers/media/test-drivers/vim2m.c +++ b/drivers/media/test-drivers/vim2m.c @@ -1339,12 +1339,6 @@ static int vim2m_probe(struct platform_device *pdev) goto error_dev; } - ret = video_register_device(vfd, VFL_TYPE_VIDEO, 0); - if (ret) { - v4l2_err(&dev->v4l2_dev, "Failed to register video device\n"); - goto error_m2m; - } - #ifdef CONFIG_MEDIA_CONTROLLER dev->mdev.dev = &pdev->dev; strscpy(dev->mdev.model, "vim2m", sizeof(dev->mdev.model)); @@ -1353,7 +1347,15 @@ static int vim2m_probe(struct platform_device *pdev) media_device_init(&dev->mdev); dev->mdev.ops = &m2m_media_ops; dev->v4l2_dev.mdev = &dev->mdev; +#endif + ret = video_register_device(vfd, VFL_TYPE_VIDEO, 0); + if (ret) { + v4l2_err(&dev->v4l2_dev, "Failed to register video device\n"); + goto error_m2m; + } + +#ifdef CONFIG_MEDIA_CONTROLLER ret = v4l2_m2m_register_media_controller(dev->m2m_dev, vfd, MEDIA_ENT_F_PROC_VIDEO_SCALER); if (ret) { From patchwork Tue Feb 2 14:49:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 12061917 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E2ABC43381 for ; Tue, 2 Feb 2021 14:51:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DBD4764F4D for ; Tue, 2 Feb 2021 14:51:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234856AbhBBOvB (ORCPT ); Tue, 2 Feb 2021 09:51:01 -0500 Received: from lb3-smtp-cloud7.xs4all.net ([194.109.24.31]:56973 "EHLO lb3-smtp-cloud7.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234830AbhBBOuW (ORCPT ); Tue, 2 Feb 2021 09:50:22 -0500 Received: from cust-b5b5937f ([IPv6:fc0c:c16d:66b8:757f:c639:739b:9d66:799d]) by smtp-cloud7.xs4all.net with ESMTPA id 6wzel32bSefbk6wzilkQkT; Tue, 02 Feb 2021 15:49:30 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s2; t=1612277370; bh=UJOSA/AlptaPsHccog6qnCSI+XcbZdNBw0WGpS/T4qY=; h=From:To:Subject:Date:Message-Id:MIME-Version:From:Subject; b=sr1ynB0rRTJBocNf8sihu8U5WkLTM2BLXEAVC69giodxXLPmgSveGcmpISi1S94S1 jsyIy7XGGveoeypboQ0em1atYeX7EUlzzv8IQg/fO0PqRCBTgzp2r712GpqH6QsDP3 d230hA90lGfc2rotvlocoVwrP/cOFrVLOZf7lJQjTy8Rab2JGJO/WKdV09BGRXgKA/ 9m5mfNZ+m4+Z0pqQvaPuoLz7RKItkFQvXGDEVTDZ2A+vlVis/Jwpqw3MC0q/UK20Xn y9MdhrRvIF3TFdEAwb8JTbVVrU3upcmPEuNw8Pf6avIUDmiX99uFjUxkesiTBfjNWO gBaYfl+9xMgFQ== From: Hans Verkuil To: linux-media@vger.kernel.org Cc: Laurent Pinchart , Sakari Ailus , Hans Verkuil Subject: [PATCHv3 2/4] media-device: add media_device_devt function Date: Tue, 2 Feb 2021 15:49:24 +0100 Message-Id: <20210202144926.620104-3-hverkuil-cisco@xs4all.nl> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> References: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfO6uUqsrEFiRjNa9Fmoiux1SKkZGu29xct5yio4NBYpPxUio4i0ClHkEH02a0rxTf92NXZD4hF2cH/ag9FdD1gze7AtjVHLHAB3yg+lHDjYGKwwPGDrT G5p2XsTB3uYWbWk/WErBqoHJ6NF6Y5mxseZbJFg6kxOa/fxEPTiNWq6ahu3ujHYhehOSn2LxXwXk2ZbA75L9xKpKApdTHeq0l5lLbxV6uV5fv7frSNzKDyKJ gYxcYYObeIBrOe9/csgblz7hyWglNKCJAYGykC+U5YhRBi1uqnIZkdP62Fym9hI2CJYhNEwwoZWoCG0wT+chG5XpHV2OcDFRScXYzBJ7ypc= Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Add a helper function for use by the DVB and V4L2 core frameworks that safely returns the major and minor numbers of the media device node, or 0 if the device node is not registered. Signed-off-by: Hans Verkuil --- drivers/media/mc/mc-device.c | 16 ++++++++++++++++ include/media/media-device.h | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/media/mc/mc-device.c b/drivers/media/mc/mc-device.c index 9e56d2ad6b94..2207f1b01456 100644 --- a/drivers/media/mc/mc-device.c +++ b/drivers/media/mc/mc-device.c @@ -850,6 +850,22 @@ void media_device_unregister(struct media_device *mdev) } EXPORT_SYMBOL_GPL(media_device_unregister); +dev_t media_device_devt(struct media_device *mdev) +{ + dev_t devt = 0; + + if (!mdev) + return 0; + + mutex_lock(&mdev->graph_mutex); + /* Check if mdev is registered */ + if (media_devnode_is_registered(mdev->devnode)) + devt = mdev->devnode->dev.devt; + mutex_unlock(&mdev->graph_mutex); + return devt; +} +EXPORT_SYMBOL_GPL(media_device_devt); + #if IS_ENABLED(CONFIG_PCI) void media_device_pci_init(struct media_device *mdev, struct pci_dev *pci_dev, diff --git a/include/media/media-device.h b/include/media/media-device.h index 1345e6da688a..af089b1c55ef 100644 --- a/include/media/media-device.h +++ b/include/media/media-device.h @@ -300,6 +300,16 @@ int __must_check __media_device_register(struct media_device *mdev, */ void media_device_unregister(struct media_device *mdev); +/** + * media_device_devt() - return media device major/minor numbers + * + * @mdev: pointer to struct &media_device + * + * Returns 0 if the media device node is not registered, otherwise + * it will return the major/minor number of the media device node. + */ +dev_t media_device_devt(struct media_device *mdev); + /** * media_device_register_entity() - registers a media entity inside a * previously registered media device. From patchwork Tue Feb 2 14:49:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 12061919 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 972C5C433E0 for ; Tue, 2 Feb 2021 14:51:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6101364F53 for ; Tue, 2 Feb 2021 14:51:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234860AbhBBOvD (ORCPT ); Tue, 2 Feb 2021 09:51:03 -0500 Received: from lb1-smtp-cloud7.xs4all.net ([194.109.24.24]:48399 "EHLO lb1-smtp-cloud7.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234833AbhBBOu0 (ORCPT ); Tue, 2 Feb 2021 09:50:26 -0500 Received: from cust-b5b5937f ([IPv6:fc0c:c16d:66b8:757f:c639:739b:9d66:799d]) by smtp-cloud7.xs4all.net with ESMTPA id 6wzel32bSefbk6wzilkQkd; Tue, 02 Feb 2021 15:49:30 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s2; t=1612277370; bh=VO6+AXb+Nercoa8KoJR2JJWDUrCSDX7GwlJX/EvE4J4=; h=From:To:Subject:Date:Message-Id:MIME-Version:From:Subject; b=aJDJFZ63SckH3Yx6KFmacso/D2ncNsUYiRUsUxM88aI3DHbBVzvYZPxgl2+xm0SUk pme75OUxSi1nayRX+yF57hltDinOCivS0q4+cltjnneXi4bsRO3EQeLMIzbsgQQJb9 qy/mw4q1GcCJs2l6nGggNz/VppgPcAq8TPOhyo4hzyiN3tiopWQcyqu0eS1xz/BF9N 1WM35WomVWapdMsZBNM6rRH/smsWCbAUtOwRCniBagkf8d50Ef772kyvr6AxXkiGW5 Hgj98hg51XDqRUhCi33b3f3hNRN5yLBPS8GmNCoMIHopQ9gddIg8DccmiNhZmdcRP2 XzEjPZ7xYfpIw== From: Hans Verkuil To: linux-media@vger.kernel.org Cc: Laurent Pinchart , Sakari Ailus , Hans Verkuil Subject: [PATCHv3 3/4] v4l2-dev: add /sys media_dev attr for V4L2 devices Date: Tue, 2 Feb 2021 15:49:25 +0100 Message-Id: <20210202144926.620104-4-hverkuil-cisco@xs4all.nl> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> References: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfO6uUqsrEFiRjNa9Fmoiux1SKkZGu29xct5yio4NBYpPxUio4i0ClHkEH02a0rxTf92NXZD4hF2cH/ag9FdD1gze7AtjVHLHAB3yg+lHDjYGKwwPGDrT G5p2XsTB3uYWbWk/WErBqoHJ6NF6Y5mxseZbJFg6kxOa/fxEPTiNWq6ahu3ujHYhehOSn2LxXwXk2ZbA75L9xKpKApdTHeq0l5lLbxV6uV5fv7frSNzKDyKJ gYxcYYObeIBrOe9/csgblz7hyWglNKCJAYGykC+U5YhRBi1uqnIZkdP62Fym9hI2CJYhNEwwoZWoCG0wT+chG5XpHV2OcDFRScXYzBJ7ypc= Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org For each V4L2 device node create a media_dev attribute in /sys which contains the media device major and minor number. It is not created if the CONFIG_MEDIA_CONTROLLER is not defined or if there is no associated media device. This makes it possible for applications like v4l2-compliance to find the associated media controller of a V4L2 device node. Signed-off-by: Hans Verkuil --- drivers/media/v4l2-core/v4l2-dev.c | 49 +++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index b6a72d297775..7a38176259ad 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c @@ -87,13 +87,60 @@ static ssize_t name_show(struct device *cd, } static DEVICE_ATTR_RO(name); +#if defined(CONFIG_MEDIA_CONTROLLER) +static ssize_t media_dev_show(struct device *cd, + struct device_attribute *attr, char *buf) +{ + struct video_device *vdev = to_video_device(cd); + struct v4l2_device *v4l2_dev = vdev->v4l2_dev; + dev_t devt = 0; + + buf[0] = '\0'; + if (v4l2_dev) + devt = media_device_devt(v4l2_dev->mdev); + if (!devt) + return 0; + return sprintf(buf, "%u:%u\n", MAJOR(devt), MINOR(devt)); +} + +static DEVICE_ATTR_RO(media_dev); +#endif + +static umode_t video_device_attr_is_visible(struct kobject *kobj, + struct attribute *attr, int n) +{ + struct video_device *vdev = to_video_device(kobj_to_dev(kobj)); + +#if defined(CONFIG_MEDIA_CONTROLLER) + if (attr == &dev_attr_media_dev.attr) { + struct v4l2_device *v4l2_dev = vdev->v4l2_dev; + + if (!v4l2_dev->mdev) + return 0; + } +#endif + return attr->mode; +} + static struct attribute *video_device_attrs[] = { &dev_attr_name.attr, &dev_attr_dev_debug.attr, &dev_attr_index.attr, +#if defined(CONFIG_MEDIA_CONTROLLER) + &dev_attr_media_dev.attr, +#endif NULL, }; -ATTRIBUTE_GROUPS(video_device); + +static const struct attribute_group video_device_group = { + .is_visible = video_device_attr_is_visible, + .attrs = video_device_attrs, +}; + +static const struct attribute_group *video_device_groups[] = { + &video_device_group, + NULL +}; /* * Active devices From patchwork Tue Feb 2 14:49:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 12061923 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C206C433E0 for ; Tue, 2 Feb 2021 14:51:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BE83664F4D for ; Tue, 2 Feb 2021 14:51:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231788AbhBBOvO (ORCPT ); Tue, 2 Feb 2021 09:51:14 -0500 Received: from lb2-smtp-cloud7.xs4all.net ([194.109.24.28]:59921 "EHLO lb2-smtp-cloud7.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234807AbhBBOu0 (ORCPT ); Tue, 2 Feb 2021 09:50:26 -0500 Received: from cust-b5b5937f ([IPv6:fc0c:c16d:66b8:757f:c639:739b:9d66:799d]) by smtp-cloud7.xs4all.net with ESMTPA id 6wzel32bSefbk6wzilkQkx; Tue, 02 Feb 2021 15:49:31 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s2; t=1612277371; bh=7BxqW813mVLNphWaKrrp2cW22dwtJIYqDxQvwDRAjqg=; h=From:To:Subject:Date:Message-Id:MIME-Version:From:Subject; b=dljx19JZtVwRVnJV0g9R//nzelYldzhjzABjzLDNAvD4SeUY4Tz/0Yj+AH2zU/wIi 0qUiSbfsS3RBfdR9zF8xhnJMx8L1ReZwkbg8kEjGtxAuZmhXih/3vcJvpfZ6aWz4Yt I1Vxi4at8pY8YuLHCGRVJmzxM9wc9rztZe/5L6JGLFwcpEPjeap0gn4/U5JM3kCBAr gaJI7yC0gdko16o/jjr4ItDmty0YGZDZKjoXOzvPei9SD4JWlshrDH+9ILZHVRq667 fAex8iKK5yCpYu1l3n1dbOq5wpU87mFSN34x8zHOihKL40bo24Ttnb9huB3lJyr0VB z/jGUtm8T7VuQ== From: Hans Verkuil To: linux-media@vger.kernel.org Cc: Laurent Pinchart , Sakari Ailus , Hans Verkuil Subject: [PATCHv3 4/4] dvbdev: add /sys media_dev attr for DVB devices Date: Tue, 2 Feb 2021 15:49:26 +0100 Message-Id: <20210202144926.620104-5-hverkuil-cisco@xs4all.nl> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> References: <20210202144926.620104-1-hverkuil-cisco@xs4all.nl> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfM3JNz5zsqwFUQMlaY8tQtjoapRDEUHcBXMu6hnLJGsRH12NeqaJpHrr8411zJH8r5j63qv/eYZvJ/WvuqS0eTjrz0UC8um4c9uXH1zTeuza3C+aSnUG sLRzEkXxYGRBBI2MKvAH2mWMxNl1IhpkcPOX6fiyzy3m0RVlN52PX+wdl2g+xT5lbHBak31kL6CB2eOYjD9pQCltLlNccwHxDB0IEgES8IWC+rrMg3WRzOeu 44qiVLmssbmaRNgMDaISnbo2pRu5uhEkSgOMTesSGN9F1RTArJiHv5BPbkmUtXxtRsuMO+q25P8iaiZ8enjcDYXzsKTrcPeLTFW0L5y9oYA= Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org For each DVB device node create a media_dev attribute in /sys which contains the media device major and minor number. It is not created if the CONFIG_MEDIA_CONTROLLER_DVB is not defined or if there is no associated media device. This makes it possible for applications like v4l2-compliance to find the associated media controller of a DVB device. Signed-off-by: Hans Verkuil --- drivers/media/dvb-core/dvbdev.c | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c index 5ff7bedee247..db8bddcc5780 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -452,6 +452,48 @@ static int dvb_register_media_device(struct dvb_device *dvbdev, return 0; } +#if defined(CONFIG_MEDIA_CONTROLLER_DVB) +static ssize_t media_dev_show(struct device *cd, + struct device_attribute *attr, char *buf) +{ + struct dvb_device *dvbdev = dev_get_drvdata(cd); + dev_t devt = media_device_devt(dvbdev->adapter->mdev); + + buf[0] = '\0'; + if (!devt) + return 0; + return sprintf(buf, "%u:%u\n", MAJOR(devt), MINOR(devt)); +} +static DEVICE_ATTR_RO(media_dev); + +static umode_t dvb_device_attr_is_visible(struct kobject *kobj, + struct attribute *attr, int n) +{ + struct dvb_device *dvbdev = dev_get_drvdata(kobj_to_dev(kobj)); + + if (attr == &dev_attr_media_dev.attr) { + if (!dvbdev->adapter->mdev) + return 0; + } + return attr->mode; +} + +static struct attribute *dvb_device_attrs[] = { + &dev_attr_media_dev.attr, + NULL, +}; + +static const struct attribute_group dvb_device_group = { + .is_visible = dvb_device_attr_is_visible, + .attrs = dvb_device_attrs, +}; + +static const struct attribute_group *dvb_device_groups[] = { + &dvb_device_group, + NULL +}; +#endif + int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, const struct dvb_device *template, void *priv, enum dvb_device_type type, int demux_sink_pads) @@ -1056,6 +1098,9 @@ static int __init init_dvbdev(void) } dvb_class->dev_uevent = dvb_uevent; dvb_class->devnode = dvb_devnode; +#if defined(CONFIG_MEDIA_CONTROLLER_DVB) + dvb_class->dev_groups = dvb_device_groups; +#endif return 0; error: