Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp462589imu; Wed, 16 Jan 2019 02:00:13 -0800 (PST) X-Google-Smtp-Source: ALg8bN6qXoXIm7ksv8rhZMVIcUL9wuY4jCO+6wIGuaPf7x0y+E3mpn1RmKBtB3TL81elmMfUntyB X-Received: by 2002:a63:5252:: with SMTP id s18mr8055495pgl.326.1547632813084; Wed, 16 Jan 2019 02:00:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547632813; cv=none; d=google.com; s=arc-20160816; b=ERLkcQbgQptltjojOABR8IMmJwuYPUWgzSUn4QbkT7QQwH3sGfzPJwGSc+zjuadZ3T +SM1jjXISIlJeSoaP9/9SXP9LS9mv2S89iLOPkODYGmYShKkSTdCOhscuA5wASGygJCf IWPemBjWTa/WCGc1hdPhCLLGVe/+Q6YmA+YrC9wTt2ibrhwjJ5smdPYY28EsZgcCWn00 Uq2KOijbfFmH4Wd5RZf8GAEHt6EqasJSnexpbp9M6WseFjflQOwPEoXjjrFT4N0NmenA FYpPNKzhXAj0Fw2ffnTBbvROgHlsG4dQ8YXMamCDObtvuTz+pWbIhD+jhEGecIIkhoDW 5IwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=LSIvMbrzQ+UiCLW5oK5dOF6+LjL9c2wUmS0an25CZk0=; b=QGfXM1Zi6DUq02yvsuXU1yosuTXaGihj342XdOS9YIltDsbvCqvAt6FLYqNHttAdod u+5fJDzzYhMRTyXeBOumoONRgQOtebKjCNaVXrkz4X7ylPAkJxBW49wJQFz9RkxXlp9R 2WP1jH6o50f0xHPivpfzCQ6C7EIqliyjutXNn9JugqG7B18XqBhpEsrj/AtbeYmHaPuY 6YOegRNbVulp1rX0bc1GmgjHZE4R6PKfLzqwjRHbpRwOeu7ouPqw9tnoCA96xIRLg7io z4FDqaW2WqcB5vCqhneHzA5TRddsH8DaOUE+Jz3pHAQrsiLGQ+bROepSdb6ARMQLBTVG Jnig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="Vk/w5vgp"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z20si5384157pgv.159.2019.01.16.01.59.54; Wed, 16 Jan 2019 02:00:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="Vk/w5vgp"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389234AbfAOTQC (ORCPT + 99 others); Tue, 15 Jan 2019 14:16:02 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:43751 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729645AbfAOTQB (ORCPT ); Tue, 15 Jan 2019 14:16:01 -0500 Received: by mail-pg1-f195.google.com with SMTP id v28so1628070pgk.10; Tue, 15 Jan 2019 11:16:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=LSIvMbrzQ+UiCLW5oK5dOF6+LjL9c2wUmS0an25CZk0=; b=Vk/w5vgpkw7oegUt97yOlHTwWb8RpKjY4HlMUTaMJw91+UNjZv73B8Rvdc8PVeB/Gc XEJRiNUBMVmRFiZA4YONkfqn5an8kaQu5tJLGTaBoCdVnCbOTSwrKZqqCjDdPtCBb+UA TEi/agUCriR1iYk9wj1St9VD7I1e5LNpzSdPgF8jEWvWMKdYoVGQC80MD3lbtHo2mf55 g0f3VGzvMKliIW4Mg0lQT3kl0tm9ggqNHbH+55ftc1k4i7tvH0T7zLMsmepfEdpSQg6G B2nNmVgYTqgD9MaCi07yJW6/D4Ic+aMKJd2FUiW9ybMc1g8iSss/1GX4I4bGWbpIQJUG GHwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=LSIvMbrzQ+UiCLW5oK5dOF6+LjL9c2wUmS0an25CZk0=; b=oAOh05hubw/x5KXtn8Evc0lTZYhTO0Uy1eKFySxJziBqDijQEl2ySx5sKHxbMFXuGq ODO74y7uuJmAbckHGqlo6sOmrljv7teb/OBVmIytP37a0nSWj0+UsfeTPO99AgYgCcmu XuCQWDwIOzdaM859AmBgxLl9xkjPbxuMPbUAuBhh6fi1YFS4m1mUm75Pjyu0s0B/xdub 1ZbaPn2623gxP3Xr8dovHBOR1dMu5yCrRyro+cNfgjimSsTG2xZ7VBvUBoyBwWgcBjiE jHDnT3oYbXebHe1ZzU5NIenZ6ODRftAsbCgZNj4XjJu0q1MnFNtsjbWD22xDh5koA1g0 ReyA== X-Gm-Message-State: AJcUukd8q5sd9m4hVw2sTPtGR4S+Q4S20uGhh8RAcHSLRHnksFKz+Hqj toMAik861k2kVhQuAQdDeRHC2TpriJw= X-Received: by 2002:a63:5ec6:: with SMTP id s189mr4939295pgb.357.1547579759906; Tue, 15 Jan 2019 11:15:59 -0800 (PST) Received: from majic.sklembedded.com (c-73-202-231-77.hsd1.ca.comcast.net. [73.202.231.77]) by smtp.googlemail.com with ESMTPSA id r80sm5452724pfa.111.2019.01.15.11.15.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Jan 2019 11:15:59 -0800 (PST) From: Steve Longerbeam To: linux-media@vger.kernel.org Cc: Steve Longerbeam , Philipp Zabel , Mauro Carvalho Chehab , Greg Kroah-Hartman , devel@driverdev.osuosl.org (open list:STAGING SUBSYSTEM), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2] media: imx: queue subdev events to reachable video devices Date: Tue, 15 Jan 2019 11:15:46 -0800 Message-Id: <20190115191546.12975-1-slongerbeam@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to receive events generated by subdevices on the video capture nodes, those events need to be forwarded to the subdevice's list of reachable video capture devices. Note this will queue the event to a video device even if there is no actual _enabled_ media path from the sub-device to the video device. So a future improvement is to skip the video device if there is no enabled path to it from the sub-device. The entity->pipe pointer can't be used for this check because in imx-media a sub-device can be a member to more than one streaming pipeline at a time. Signed-off-by: Steve Longerbeam --- Changes in v2: - split out the implementation of (un)subscribe_event on the video capture device to a separate patch. --- drivers/staging/media/imx/imx-media-dev.c | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/staging/media/imx/imx-media-dev.c b/drivers/staging/media/imx/imx-media-dev.c index 4b344a4a3706..25e916562c66 100644 --- a/drivers/staging/media/imx/imx-media-dev.c +++ b/drivers/staging/media/imx/imx-media-dev.c @@ -442,6 +442,29 @@ static const struct media_device_ops imx_media_md_ops = { .link_notify = imx_media_link_notify, }; +static void imx_media_notify(struct v4l2_subdev *sd, + unsigned int notification, + void *arg) +{ + struct media_entity *entity = &sd->entity; + int i; + + if (notification != V4L2_DEVICE_NOTIFY_EVENT) + return; + + for (i = 0; i < entity->num_pads; i++) { + struct media_pad *pad = &entity->pads[i]; + struct imx_media_pad_vdev *pad_vdev; + struct list_head *pad_vdev_list; + + pad_vdev_list = to_pad_vdev_list(sd, pad->index); + if (!pad_vdev_list) + continue; + list_for_each_entry(pad_vdev, pad_vdev_list, list) + v4l2_event_queue(pad_vdev->vdev->vfd, arg); + } +} + static int imx_media_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -462,6 +485,7 @@ static int imx_media_probe(struct platform_device *pdev) mutex_init(&imxmd->mutex); imxmd->v4l2_dev.mdev = &imxmd->md; + imxmd->v4l2_dev.notify = imx_media_notify; strscpy(imxmd->v4l2_dev.name, "imx-media", sizeof(imxmd->v4l2_dev.name)); -- 2.17.1