From patchwork Tue Nov 10 14:42:36 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: p.wiesner@gmx.net X-Patchwork-Id: 59059 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id nAAEgfhn027953 for ; Tue, 10 Nov 2009 14:42:41 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756380AbZKJOme (ORCPT ); Tue, 10 Nov 2009 09:42:34 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756398AbZKJOme (ORCPT ); Tue, 10 Nov 2009 09:42:34 -0500 Received: from mail.gmx.net ([213.165.64.20]:52026 "HELO mail.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1756360AbZKJOmd (ORCPT ); Tue, 10 Nov 2009 09:42:33 -0500 Received: (qmail 3611 invoked by uid 0); 10 Nov 2009 14:42:38 -0000 Received: from 217.6.246.34 by www072.gmx.net with HTTP; Tue, 10 Nov 2009 15:42:36 +0100 (CET) Date: Tue, 10 Nov 2009 15:42:36 +0100 From: "Philipp Wiesner" Message-ID: <20091110144236.322090@gmx.net> MIME-Version: 1.0 Subject: [PATCH] soc_camera: multiple input capable enum, g & s To: linux-media@vger.kernel.org X-Authenticated: #486415 X-Flags: 0001 X-Mailer: WWW-Mail 6100 (Global Message Exchange) X-Priority: 3 X-Provags-ID: V01U2FsdGVkX1/KqucBa0rKWqRu1aFbU0VygO+7DTnYMBjs7gwZa9 UkFDzAGfsYWbnUftrsQrgMI8evnUrnBaSqkQ== X-GMX-UID: uQqQJaNFMydhWlg5bWplW2NjaGRhZhqo X-FuHaFi: 0.51 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org diff -r 43878f8dbfb0 -r a5254e7d306a linux/drivers/media/video/soc_camera.c --- a/linux/drivers/media/video/soc_camera.c Sun Nov 01 07:17:46 2009 -0200 +++ b/linux/drivers/media/video/soc_camera.c Tue Nov 03 17:17:49 2009 +0100 @@ -119,11 +119,10 @@ struct soc_camera_device *icd = icf->icd; int ret = 0; - if (inp->index != 0) - return -EINVAL; - if (icd->ops->enum_input) ret = icd->ops->enum_input(icd, inp); + else if (inp->index != 0) + return -EINVAL; else { /* default is camera */ inp->type = V4L2_INPUT_TYPE_CAMERA; @@ -136,17 +135,30 @@ static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i) { - *i = 0; + struct soc_camera_file *icf = file->private_data; + struct soc_camera_device *icd = icf->icd; + int ret = 0; - return 0; + if (icd->ops->g_input) + ret = icd->ops->g_input(icd, i); + else + *i = 0; + + return ret; } static int soc_camera_s_input(struct file *file, void *priv, unsigned int i) { - if (i > 0) + struct soc_camera_file *icf = file->private_data; + struct soc_camera_device *icd = icf->icd; + int ret = 0; + + if (icd->ops->s_input) + ret = icd->ops->s_input(icd, i); + else if (i > 0) return -EINVAL; - return 0; + return ret; } static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id *a) diff -r 43878f8dbfb0 -r a5254e7d306a linux/include/media/soc_camera.h --- a/linux/include/media/soc_camera.h Sun Nov 01 07:17:46 2009 -0200 +++ b/linux/include/media/soc_camera.h Tue Nov 03 17:17:49 2009 +0100 @@ -197,6 +197,8 @@ unsigned long (*query_bus_param)(struct soc_camera_device *); int (*set_bus_param)(struct soc_camera_device *, unsigned long); int (*enum_input)(struct soc_camera_device *, struct v4l2_input *); + int (*g_input)(struct soc_camera_device *, unsigned int *); + int (*s_input)(struct soc_camera_device *, unsigned int); const struct v4l2_queryctrl *controls; int num_controls; };