Received: by 10.223.185.116 with SMTP id b49csp811558wrg; Wed, 21 Feb 2018 07:17:57 -0800 (PST) X-Google-Smtp-Source: AH8x224x1JSUPl40Rk6SXSDmDXmQehVxff4dXUkv2ITFWxc+qUaYPBEhDqShUAwu57w6ogufQVLt X-Received: by 2002:a17:902:5596:: with SMTP id g22-v6mr3395267pli.4.1519226277601; Wed, 21 Feb 2018 07:17:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519226277; cv=none; d=google.com; s=arc-20160816; b=chhAjgpLjeby2Ea/YNtwUMofND9fB3yzEnnf214DClOIlctdyJkD7dfC0bUOPTFpI0 bZVu4QR1GLlpDrRmJvmzsMgZWXm2+aJJdNlP0zgZilpR828WlCQ7PAfGSLAMbvsvUyNY D4cKLdtDLr1/jWTiocZjxsJnraLUIOJq2QUotiFUXAc5mEnfgsyoNtSv/apq1kCBfqLz tuJS/u657QGdxKlh67boBArW6x4yX36oNeDWPg1MmNCCQwZVzOIibCOc1KydHYFtPGZt QElGpgNAOmJ62RTSweK9y1lni7Lk40OpLAS3jf7vuqz1rDDa/h9VyO12u2/+AO34w8O4 pd7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=/VwJiQVrpRoQMJO22IZIq68bLpGVedyUjM/iHbYK2Kw=; b=Nkn4r4W0Dfg3NwpepX4HCl0V52hMVAFzQv6Kd6saQN8dfXys5iETWbq/HJi37x2m46 nEViJTVjpjo4ZVbekQF86a8+ocSNUKmF5pp+E6H6WRM0KLLLbS4zNZ9di2kriHGcZaVM f2ZvcO29Q7STepGkYqPVPqtncbmJDHhmoRJeomo5Ona8KYG7iGmRWNjzZXCKEw4FYMgj yuFm2gAR5WA4bJ67E4+hZGKm2zgiccy2SxallIG027TcsbvmEwjZBH9pkTezKdgnppfJ XSrI8kUUrP72yOyFNiZLHEx1SuDGNV7kcpd2BYYDMPSeBYwa6gXNJc9wOqvTe+02ntUb 6pUw== 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 v6si626550pgq.146.2018.02.21.07.17.43; Wed, 21 Feb 2018 07:17:57 -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 S966004AbeBUPQ5 (ORCPT + 99 others); Wed, 21 Feb 2018 10:16:57 -0500 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:49624 "EHLO relay3-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754471AbeBUPQx (ORCPT ); Wed, 21 Feb 2018 10:16:53 -0500 Received: from w540 (unknown [IPv6:2001:b07:6442:1ac4:dc0f:9fe1:3acf:e73a]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 7B7FEA80E5; Wed, 21 Feb 2018 16:16:46 +0100 (CET) Date: Wed, 21 Feb 2018 16:16:44 +0100 From: jacopo mondi To: Hans Verkuil Cc: Jacopo Mondi , laurent.pinchart@ideasonboard.com, magnus.damm@gmail.com, geert@glider.be, mchehab@kernel.org, festevam@gmail.com, sakari.ailus@iki.fi, robh+dt@kernel.org, mark.rutland@arm.com, pombredanne@nexb.com, linux-renesas-soc@vger.kernel.org, linux-media@vger.kernel.org, linux-sh@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v9 07/11] media: i2c: ov772x: Support frame interval handling Message-ID: <20180221151644.GI7203@w540> References: <1519059584-30844-1-git-send-email-jacopo+renesas@jmondi.org> <1519059584-30844-8-git-send-email-jacopo+renesas@jmondi.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Hans, On Wed, Feb 21, 2018 at 01:12:14PM +0100, Hans Verkuil wrote: [snip] > > +static int ov772x_g_frame_interval(struct v4l2_subdev *sd, > > + struct v4l2_subdev_frame_interval *ival) > > +{ > > + struct ov772x_priv *priv = to_ov772x(sd); > > + struct v4l2_fract *tpf = &ival->interval; > > + > > + memset(ival->reserved, 0, sizeof(ival->reserved)); > > This memset... > > > + tpf->numerator = 1; > > + tpf->denominator = priv->fps; > > + > > + return 0; > > +} > > + > > +static int ov772x_s_frame_interval(struct v4l2_subdev *sd, > > + struct v4l2_subdev_frame_interval *ival) > > +{ > > + struct ov772x_priv *priv = to_ov772x(sd); > > + struct v4l2_fract *tpf = &ival->interval; > > + > > + memset(ival->reserved, 0, sizeof(ival->reserved)); > > ... and this memset can be dropped. The core code will memset this for you. > > I see! Ok, I'll drop them in v10 > > + > > + return ov772x_set_frame_rate(priv, tpf, priv->cfmt, priv->win); > > +} > > + > > static int ov772x_s_ctrl(struct v4l2_ctrl *ctrl) > > { > > struct ov772x_priv *priv = container_of(ctrl->handler, > > @@ -757,6 +905,7 @@ static int ov772x_set_params(struct ov772x_priv *priv, > > const struct ov772x_win_size *win) > > { > > struct i2c_client *client = v4l2_get_subdevdata(&priv->subdev); > > + struct v4l2_fract tpf; > > int ret; > > u8 val; > > > > @@ -885,6 +1034,13 @@ static int ov772x_set_params(struct ov772x_priv *priv, > > if (ret < 0) > > goto ov772x_set_fmt_error; > > > > + /* COM4, CLKRC: Set pixel clock and framerate. */ > > + tpf.numerator = 1; > > + tpf.denominator = priv->fps; > > + ret = ov772x_set_frame_rate(priv, &tpf, cfmt, win); > > + if (ret < 0) > > + goto ov772x_set_fmt_error; > > + > > /* > > * set COM8 > > */ > > @@ -1043,6 +1199,24 @@ static const struct v4l2_subdev_core_ops ov772x_subdev_core_ops = { > > .s_power = ov772x_s_power, > > }; > > > > +static int ov772x_enum_frame_interval(struct v4l2_subdev *sd, > > + struct v4l2_subdev_pad_config *cfg, > > + struct v4l2_subdev_frame_interval_enum *fie) > > +{ > > + if (fie->pad || fie->index >= OV772X_N_FRAME_INTERVALS) > > + return -EINVAL; > > + > > + if (fie->width != VGA_WIDTH && fie->width != QVGA_WIDTH) > > + return -EINVAL; > > + if (fie->height != VGA_HEIGHT && fie->height != QVGA_HEIGHT) > > + return -EINVAL; > > + > > + fie->interval.numerator = 1; > > + fie->interval.denominator = ov772x_frame_intervals[fie->index]; > > + > > + return 0; > > +} > > + > > static int ov772x_enum_mbus_code(struct v4l2_subdev *sd, > > struct v4l2_subdev_pad_config *cfg, > > struct v4l2_subdev_mbus_code_enum *code) > > @@ -1055,14 +1229,17 @@ static int ov772x_enum_mbus_code(struct v4l2_subdev *sd, > > } > > > > static const struct v4l2_subdev_video_ops ov772x_subdev_video_ops = { > > - .s_stream = ov772x_s_stream, > > + .s_stream = ov772x_s_stream, > > + .s_frame_interval = ov772x_s_frame_interval, > > + .g_frame_interval = ov772x_g_frame_interval, > > }; > > > > static const struct v4l2_subdev_pad_ops ov772x_subdev_pad_ops = { > > - .enum_mbus_code = ov772x_enum_mbus_code, > > - .get_selection = ov772x_get_selection, > > - .get_fmt = ov772x_get_fmt, > > - .set_fmt = ov772x_set_fmt, > > + .enum_frame_interval = ov772x_enum_frame_interval, > > + .enum_mbus_code = ov772x_enum_mbus_code, > > + .get_selection = ov772x_get_selection, > > + .get_fmt = ov772x_get_fmt, > > + .set_fmt = ov772x_set_fmt, > > Shouldn't these last four ops be added in the previous patch? > They don't have anything to do with the frame interval support. > If you look closely you'll notice I have just re-aligned them, since I was at there to add enum_frame_interval operation > Anyway, after taking care of the memsets and these four ops you can add > my: > > Acked-by: Hans Verkuil Thanks j