Received: by 10.223.176.5 with SMTP id f5csp937423wra; Wed, 7 Feb 2018 09:53:56 -0800 (PST) X-Google-Smtp-Source: AH8x226l6YRHtvx4U21HoR+WULBfc3vN7JDOjGE6D4Z2K9X+ZBk8yE38zrrJ2BekRAkuEEqQ6QJB X-Received: by 10.99.123.92 with SMTP id k28mr5438419pgn.71.1518026035923; Wed, 07 Feb 2018 09:53:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518026035; cv=none; d=google.com; s=arc-20160816; b=uv+CKRcCNRv8wVrexNBiNIidFAqDDpAFFqA/Xmhj1hj17v+0SJQbaeChqSCcN840QU yBjVJilnX2BxbBQYyq7AfKqQnRw+Z5A5iPq+zHp73lCQiFFBhk6K1U8LlcWLMkrY8jPg MGleoSo82DSXLmGCwBkNWJleXdvJ72r0FPjng7JFZgxcwHFJQvTCIHviG6gf9Y/ZhrIW 83kenIbOv9ZDjNEJYAZ7uv+0eA0YDZ9Du+9IkvfQ+bWF3IoEL+yRgJYBNQ1OXYmU8vgV 59NCf56CBnx1grmEsclFt3iBY2o24Zk8I4/mQ+CFVvwkynRKih8agNqml+0U8vkncQyV 2AOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=0O1U/pbSHbcy603KQUpxnNvPfArV5FkYoSQpi0ofVmI=; b=yWBh1jOcW9DvCDmec4Km2+3Yb3VzhwiQkis7pCXBZqbDLQiXenCQhJeryF+N/IPjRR aZhSCG3LyqMOEQxet6JfRuggsii8d6YiLXO5BX86g7lJZZ0hucSf1UMZrEgNkCs10MTO R+1pJQhHzF8wzechIWQB1UKnYmU+d35kLy8VlYPoYfaoZFCpPifYAkJGR/bKQRZjYayG tmO9ejV+Yyl7lVQSzL4D1Y/2956EzwZ6Q3DiElC7QG843M4Nz9fkAQpc3FYLuY8VIub3 EGNmYLflS3afAIqUAhDNDLz/6rS7nZ74ZKNojhFxdT6fdmiUUo1p7xmjde9jXjAJ0eZl jfgQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y5si1419326pfg.267.2018.02.07.09.53.41; Wed, 07 Feb 2018 09:53:55 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754215AbeBGRw2 (ORCPT + 99 others); Wed, 7 Feb 2018 12:52:28 -0500 Received: from lb2-smtp-cloud9.xs4all.net ([194.109.24.26]:49148 "EHLO lb2-smtp-cloud9.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753761AbeBGRw1 (ORCPT ); Wed, 7 Feb 2018 12:52:27 -0500 Received: from [192.168.2.10] ([212.251.195.8]) by smtp-cloud9.xs4all.net with ESMTPA id jTtMebYCJoWCOjTtQe1SeC; Wed, 07 Feb 2018 18:52:25 +0100 Subject: Re: [PATCH] media: stm32-dcmi: add g/s_parm framerate support To: Hugues Fruchet , Maxime Coquelin , Alexandre Torgue , Mauro Carvalho Chehab Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Benjamin Gaignard , Yannick Fertre References: <1518025389-3677-1-git-send-email-hugues.fruchet@st.com> From: Hans Verkuil Message-ID: <727ee222-20f1-23d3-fdff-4b985e24593d@xs4all.nl> Date: Wed, 7 Feb 2018 18:52:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <1518025389-3677-1-git-send-email-hugues.fruchet@st.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-CMAE-Envelope: MS4wfJu1tQKDX4q+0vjLGv2QHRvov3fXPUu5rgAF+ZL/0KfXi0/GrfpZfeSQ73qTrlVJuVj4GKzH6HhHZs9iLnjwYS9c3qaLWj4qe2WYHwtpadFVX6WH8HZA 2HegJ3POEezCe/V6HTDoqGl3J1eqgXn1YfK0dFbm77rElXOIbg5YKkPQ++FxtSvhF5m3g+8UlTvEXn051YfTKzn9vExpV6c66hlyKHL7KGkljm9jcGLbMyXm ODqR13xZ+H24FW4JWRR8/X2dZvY7hY7Aax+RxenRzY35GurcVl9Ce6kdRq0ktzqVBmBGzsyW5LEfSJGcwcjgpfJgoHZOQJYlAjfoWY3+Ra/ldjuUKnk8kX+t LCNB+Yrj2o2mupJThF0HcWknwsb6saLhg3qM69/uRzdAGrgL1pz2ODZfH/qx6IVaM9SvddlghIIcQtvNEGliGBb6Il11+HL/vvjeA7zQ+ogXVW9IA7p+P+Bq Fl5jH+W9xog768/b Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/07/2018 06:43 PM, Hugues Fruchet wrote: > Add g/s_parm framerate support by calling subdev > g/s_frame_interval ops. > This allows user to control sensor framerate by > calling ioctl G/S_PARM. > > Signed-off-by: Hugues Fruchet > --- > drivers/media/platform/stm32/stm32-dcmi.c | 49 +++++++++++++++++++++++++++++++ > 1 file changed, 49 insertions(+) > > diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c > index ab555d4..8197554 100644 > --- a/drivers/media/platform/stm32/stm32-dcmi.c > +++ b/drivers/media/platform/stm32/stm32-dcmi.c > @@ -1151,6 +1151,52 @@ static int dcmi_enum_framesizes(struct file *file, void *fh, > return 0; > } > > +static int dcmi_g_parm(struct file *file, void *priv, > + struct v4l2_streamparm *p) > +{ > + struct stm32_dcmi *dcmi = video_drvdata(file); > + struct v4l2_subdev_frame_interval ival = { 0 }; > + int ret; > + > + if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) > + return -EINVAL; > + > + p->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; > + ret = v4l2_subdev_call(dcmi->entity.subdev, video, > + g_frame_interval, &ival); > + if (ret) > + return ret; > + > + p->parm.capture.timeperframe = ival.interval; > + > + return ret; > +} This function and the next can be simplified by using the help functions introduced here: https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=parm I'll make a pull request for this later this week, so it's probably a good idea to base your code on this as well. Regards, Hans > + > +static int dcmi_s_parm(struct file *file, void *priv, > + struct v4l2_streamparm *p) > +{ > + struct stm32_dcmi *dcmi = video_drvdata(file); > + struct v4l2_subdev_frame_interval ival = { > + 0, > + p->parm.capture.timeperframe > + }; > + int ret; > + > + if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) > + return -EINVAL; > + > + memset(&p->parm, 0, sizeof(p->parm)); > + p->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; > + ret = v4l2_subdev_call(dcmi->entity.subdev, video, > + s_frame_interval, &ival); > + if (ret) > + return ret; > + > + p->parm.capture.timeperframe = ival.interval; > + > + return ret; > +} > + > static int dcmi_enum_frameintervals(struct file *file, void *fh, > struct v4l2_frmivalenum *fival) > { > @@ -1253,6 +1299,9 @@ static int dcmi_release(struct file *file) > .vidioc_g_input = dcmi_g_input, > .vidioc_s_input = dcmi_s_input, > > + .vidioc_g_parm = dcmi_g_parm, > + .vidioc_s_parm = dcmi_s_parm, > + > .vidioc_enum_framesizes = dcmi_enum_framesizes, > .vidioc_enum_frameintervals = dcmi_enum_frameintervals, > >