From patchwork Sat Nov 12 13:12:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9424159 X-Patchwork-Delegate: geert@linux-m68k.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0CCF760484 for ; Sat, 12 Nov 2016 13:14:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 02767296DC for ; Sat, 12 Nov 2016 13:14:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EBB91298C0; Sat, 12 Nov 2016 13:14:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9BA28296DC for ; Sat, 12 Nov 2016 13:14:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965865AbcKLNOM (ORCPT ); Sat, 12 Nov 2016 08:14:12 -0500 Received: from smtp-4.sys.kth.se ([130.237.48.193]:33621 "EHLO smtp-4.sys.kth.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965873AbcKLNNy (ORCPT ); Sat, 12 Nov 2016 08:13:54 -0500 Received: from smtp-4.sys.kth.se (localhost.localdomain [127.0.0.1]) by smtp-4.sys.kth.se (Postfix) with ESMTP id 5CEB4339E; Sat, 12 Nov 2016 14:13:52 +0100 (CET) X-Virus-Scanned: by amavisd-new at kth.se Received: from smtp-4.sys.kth.se ([127.0.0.1]) by smtp-4.sys.kth.se (smtp-4.sys.kth.se [127.0.0.1]) (amavisd-new, port 10024) with LMTP id wtcRkb2-Sz-w; Sat, 12 Nov 2016 14:13:51 +0100 (CET) X-KTH-Auth: niso [89.233.230.99] X-KTH-mail-from: niklas.soderlund+renesas@ragnatech.se Received: from bismarck.berto.se (unknown [89.233.230.99]) by smtp-4.sys.kth.se (Postfix) with ESMTPSA id 3D5E43219; Sat, 12 Nov 2016 14:13:51 +0100 (CET) From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= To: Laurent Pinchart , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, tomoharu.fukawa.eb@renesas.com, Sakari Ailus , Geert Uytterhoeven , =?UTF-8?q?Niklas=20S=C3=B6derlund?= Subject: [PATCHv2 29/32] media: rcar-vin: attach to CSI2 group when the video device is opened Date: Sat, 12 Nov 2016 14:12:13 +0100 Message-Id: <20161112131216.22635-30-niklas.soderlund+renesas@ragnatech.se> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161112131216.22635-1-niklas.soderlund+renesas@ragnatech.se> References: <20161112131216.22635-1-niklas.soderlund+renesas@ragnatech.se> MIME-Version: 1.0 Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Attempt to attach to the subdevices pointed out by the routing from the CSI2 group when the video device is opened. This is the last piece missing to enable CSI2 groups on Gen3. If the current CSI2 routing for the group points ta a set of subdevices which are not present (not all routings are available on all boards) the open fall will fail with a -EBUSY error. The VIN instance will be unavailable with this error until the group routing is changed to one which provides it with a available set of subdevices. Signed-off-by: Niklas Söderlund --- drivers/media/platform/rcar-vin/rcar-v4l2.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c index d363531..1801c6e 100644 --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c @@ -846,6 +846,7 @@ static const struct v4l2_ioctl_ops rvin_ioctl_ops = { static int rvin_open(struct file *file) { struct rvin_dev *vin = video_drvdata(file); + struct v4l2_subdev *source, *bridge; int ret; mutex_lock(&vin->lock); @@ -857,12 +858,28 @@ static int rvin_open(struct file *file) goto err_out; /* If there is no subdevice there is not much we can do */ - if (!vin_to_source(vin)) { + source = vin_to_source(vin); + if (!source) { ret = -EBUSY; goto err_open; } if (v4l2_fh_is_singular_file(file)) { + if (vin_have_bridge(vin)) { + + /* If there are no bridge not much we can do */ + bridge = vin_to_bridge(vin); + if (!bridge) { + ret = -EBUSY; + goto err_open; + } + + v4l2_pipeline_pm_use(&vin->vdev.entity, 1); + + vin_dbg(vin, "Group source: %s bridge: %s\n", + source->name, + bridge->name); + } pm_runtime_get_sync(vin->dev); ret = rvin_attach_subdevices(vin); if (ret) { @@ -876,6 +893,8 @@ static int rvin_open(struct file *file) return 0; err_power: pm_runtime_put(vin->dev); + if (vin_have_bridge(vin)) + v4l2_pipeline_pm_use(&vin->vdev.entity, 0); err_open: v4l2_fh_release(file); err_out: @@ -904,6 +923,8 @@ static int rvin_release(struct file *file) if (fh_singular) { rvin_detach_subdevices(vin); pm_runtime_put(vin->dev); + if (vin_have_bridge(vin)) + v4l2_pipeline_pm_use(&vin->vdev.entity, 0); } mutex_unlock(&vin->lock);