From patchwork Tue Sep 18 10:53:12 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 1471871 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 33D45400EC for ; Tue, 18 Sep 2012 10:53:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758001Ab2IRKxc (ORCPT ); Tue, 18 Sep 2012 06:53:32 -0400 Received: from ams-iport-3.cisco.com ([144.254.224.146]:42705 "EHLO ams-iport-3.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757996Ab2IRKxa (ORCPT ); Tue, 18 Sep 2012 06:53:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=2947; q=dns/txt; s=iport; t=1347965610; x=1349175210; h=from:to:cc:subject:date:message-id; bh=LYQnu4V+krtZrUAIkS4Jsqvv2GFI/+IoqwPfn2PsowU=; b=NwLCY+GDrdj3byeUTqS0dr6sF0WJcBpRI1lycxydO7RVdSOYRlCHIGhs tmp0kKikS7+VGLb2iSZmP48S7hiIfxb1QTe4ABWBXa/eZWXZ16K1Sm+th rXGTqOTNp7QWE55F+/vzEYEH+htGbGUKC2Z3uxlvqeVIyra8MdtQrlfsI w=; X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EALJRWFCQ/khR/2dsb2JhbABFvDOBB4IhAQEEEgEUUhBRVxkih16aIqA1jmqDHwOVYok1hQOBaYJo X-IronPort-AV: E=Sophos;i="4.80,442,1344211200"; d="scan'208";a="8120099" Received: from ams-core-1.cisco.com ([144.254.72.81]) by ams-iport-3.cisco.com with ESMTP; 18 Sep 2012 10:53:29 +0000 Received: from cobaltpc1.cisco.com (dhcp-10-54-92-107.cisco.com [10.54.92.107]) by ams-core-1.cisco.com (8.14.5/8.14.5) with ESMTP id q8IArQ4Y012350; Tue, 18 Sep 2012 10:53:29 GMT From: Hans Verkuil To: linux-media@vger.kernel.org Cc: Prabhakar Lad , DLOS Subject: [RFCv1 PATCH 10/11] vpif_display: use a v4l2_subdev pointer to call a subdev. Date: Tue, 18 Sep 2012 12:53:12 +0200 Message-Id: <65a795e86372648bb126c35048b749a9be1c68ad.1347965140.git.hans.verkuil@cisco.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1347965593-16746-1-git-send-email-hans.verkuil@cisco.com> References: <1347965593-16746-1-git-send-email-hans.verkuil@cisco.com> In-Reply-To: References: Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org This makes it easier to have outputs without subdevs. This needs more work. The way the outputs are configured should be identical to how inputs are configured. Signed-off-by: Hans Verkuil --- drivers/media/video/davinci/vpif_display.c | 17 +++++++++-------- drivers/media/video/davinci/vpif_display.h | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c index a6e8ddd..5f1d736 100644 --- a/drivers/media/video/davinci/vpif_display.c +++ b/drivers/media/video/davinci/vpif_display.c @@ -1232,6 +1232,8 @@ static int vpif_s_output(struct file *file, void *priv, unsigned int i) vpif_err("Failed to set output standard\n"); ch->output_idx = i; + if (vpif_obj.sd[i]) + ch->sd = vpif_obj.sd[i]; return ret; } @@ -1302,14 +1304,13 @@ static int vpif_s_dv_timings(struct file *file, void *priv, } /* Configure subdevice timings, if any */ - ret = v4l2_subdev_call(vpif_obj.sd[ch->output_idx], - video, s_dv_timings, timings); + ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings); if (ret == -ENOIOCTLCMD) { vpif_dbg(2, debug, "Custom DV timings not supported by " "subdevice\n"); - return -EINVAL; + return -ENODATA; } - if (ret < 0) { + if (ret < 0 && ret != -ENODEV) { vpif_dbg(2, debug, "Error setting custom DV timings\n"); return ret; } @@ -1434,8 +1435,7 @@ static int vpif_dbg_g_register(struct file *file, void *priv, struct vpif_fh *fh = priv; struct channel_obj *ch = fh->channel; - return v4l2_subdev_call(vpif_obj.sd[ch->output_idx], core, - g_register, reg); + return v4l2_subdev_call(ch->sd, core, g_register, reg); } /* @@ -1452,8 +1452,7 @@ static int vpif_dbg_s_register(struct file *file, void *priv, struct vpif_fh *fh = priv; struct channel_obj *ch = fh->channel; - return v4l2_subdev_call(vpif_obj.sd[ch->output_idx], core, - s_register, reg); + return v4l2_subdev_call(ch->sd, core, s_register, reg); } #endif @@ -1721,6 +1720,8 @@ static __init int vpif_probe(struct platform_device *pdev) } ch->initialized = 0; + if (subdev_count) + ch->sd = vpif_obj.sd[0]; ch->channel_id = j; if (j < 2) ch->common[VPIF_VIDEO_INDEX].numbuffers = diff --git a/drivers/media/video/davinci/vpif_display.h b/drivers/media/video/davinci/vpif_display.h index b602def..1e436ac 100644 --- a/drivers/media/video/davinci/vpif_display.h +++ b/drivers/media/video/davinci/vpif_display.h @@ -126,6 +126,7 @@ struct channel_obj { u8 initialized; /* flag to indicate whether * encoder is initialized */ u32 output_idx; /* Current output index */ + struct v4l2_subdev *sd; /* Current output subdev (may be NULL) */ enum vpif_channel_id channel_id;/* Identifies channel */ struct vpif_params vpifparams;