From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B6813AC0C5 for ; Fri, 10 Apr 2026 08:41:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775810501; cv=none; b=QoF6NDqzv0luWZ+2zoTykh3sWSdsIKATwgZdctd7FePwPjIgRNpl6cY2Aivk1dGx9sJJMoM+EguvX4kIq+oBD6xaNxI+Y4JnI+tC6igdIWKDCr5XpjiqqN6NJrioiGv3SyqAG7L6tKTRSQuRN3lA91y7mfYPHFetKADemXZXZlY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775810501; c=relaxed/simple; bh=Z7KgBBOUoUMLPbt+YbdLHM5E1BqIDzVMno95Kqpzs60=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=r5JUjnXMb4C4u82jX0YQFDrn22SXrMf6xfTGg15x+mHYltMXoMcShnRe47p6wgTjMPlFSzRBCmlsCwEZlH/zAjRndwbA5o0/6CgpzZsD6TMjKMHKKg1jn9JfnXj/y9xZ/69k468u0MmRE31xkT12Y44+GneIpS1dXTLQeF6avGk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=fZW17W/F; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="fZW17W/F" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1775810499; x=1807346499; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=Z7KgBBOUoUMLPbt+YbdLHM5E1BqIDzVMno95Kqpzs60=; b=fZW17W/F6oJNMHyt3JjN+XTB/1KxHtjzX4Cj0+DwOAiN2s6dstFmdQyJ domIQ4pLcAMjGUhZS9LOsAi4QkY3vgofK4TmGp5JQL9cd9DQ2fA/LwimC TO/fDugsnay06y9EvyW5rwpDWoKVhqkNEXk7DeOCpMGfzGVTMVTx+/so7 CslKkUlnJ526Su5vw/uXC6xjSDo8nAw3EMGl5HTrVDyx3X4D1TWXcctgT hy6wA9dWTWBy+z5JxtUftLIkfYUPmVFzD0FsmYCEDa4XlgFe10VNHK7dl 8cm9JoOX9m4pkvPohJOLzLUPFrEL5L/lP+IJcnqEm+FC8HKO4Y5IkVWC5 Q==; X-CSE-ConnectionGUID: K8bknsyFRnSrNvLJ6bz9Sg== X-CSE-MsgGUID: pBEKwYvRQuGkpqJ+++ZUvA== X-IronPort-AV: E=McAfee;i="6800,10657,11754"; a="76900394" X-IronPort-AV: E=Sophos;i="6.23,171,1770624000"; d="scan'208";a="76900394" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2026 01:41:39 -0700 X-CSE-ConnectionGUID: kFhb9wPRROiwivchJomiZQ== X-CSE-MsgGUID: Ws9dzCwcTa+aENlTQfBwBA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,171,1770624000"; d="scan'208";a="228193006" Received: from dalessan-mobl3.ger.corp.intel.com (HELO kekkonen.fi.intel.com) ([10.245.244.73]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2026 01:41:32 -0700 Received: from kekkonen.localdomain (localhost [IPv6:::1]) by kekkonen.fi.intel.com (Postfix) with SMTP id 87644120F00; Fri, 10 Apr 2026 11:41:45 +0300 (EEST) Date: Fri, 10 Apr 2026 11:41:45 +0300 Organization: Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo From: Sakari Ailus To: Jacopo Mondi Cc: linux-media@vger.kernel.org, hans@jjverkuil.nl, laurent.pinchart@ideasonboard.com, Prabhakar , Kate Hsuan , Dave Stevenson , Tommaso Merciai , Benjamin Mugnier , Sylvain Petinot , Christophe JAILLET , Julien Massot , Naushir Patuck , "Yan, Dongcheng" , "Cao, Bingbu" , "Qiu, Tian Shu" , Stefan Klug , Mirela Rabulea , =?iso-8859-1?Q?Andr=E9?= Apitzsch , Heimir Thor Sverrisson , Kieran Bingham , Mehdi Djait , Ricardo Ribalda Delgado , Hans de Goede , Tomi Valkeinen , David Plowman , "Yu, Ong Hock" , "Ng, Khai Wen" , Jai Luthra , Rishikesh Donadkar Subject: Re: [PATCH v4 04/29] media: imx219: Scale the vblank limits according to rate_factor Message-ID: References: <20260408153939.969381-1-sakari.ailus@linux.intel.com> <20260408153939.969381-5-sakari.ailus@linux.intel.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Hi Jacopo, On Fri, Apr 10, 2026 at 10:28:27AM +0200, Jacopo Mondi wrote: > Hi Sakari > > On Wed, Apr 08, 2026 at 06:39:13PM +0300, Sakari Ailus wrote: > > The limits for vertical blanking (and frame length in pixels) is related > > to the properties of the hardware, it's not in half-line units the driver > > uses. Multiply the vertical blanking limits by the rate_factor to satisty > > hardware requirements. > > > > Fixes: f513997119f4 ("media: i2c: imx219: Scale the pixel rate for analog binning") > > Cc: stable@vger.kernel.org > > Signed-off-by: Sakari Ailus > > I'm not sure I understand this change. > > I think we have clarified the imx219 has a "special" binning mode > where the ADC consumes two lines at a time, allowing an higher > framerate. > > The driver accounts for that by doubling the PIXEL_RATE control value > and halving the VBLANK and EXPOSURE controls values when writing them > to registers. > > Userspace is not concerned with the special binning mode and is not > required to halve the values it writes to the VBLANK and EXPOSURE controls. > > Doesn't the same apply to the limits ? Also, I presume but special > binning mode is not well documented, the actual maximum register value > for the frame length is still 0xfffe. > > What have I missed ? This patch indeed changes the limits of the VBLANK control. The maximum frame length (in hardware) indeed is 0xfffe but the driver only allowed frames up to 0x7fff lines before this patch. > > > --- > > drivers/media/i2c/imx219.c | 10 ++++++---- > > 1 file changed, 6 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c > > index 62a23541b1dc..6819a2fa3262 100644 > > --- a/drivers/media/i2c/imx219.c > > +++ b/drivers/media/i2c/imx219.c > > @@ -878,14 +878,17 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd, > > crop->top = (IMX219_NATIVE_HEIGHT - crop->height) / 2; > > > > if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) { > > + unsigned int rate_factor = imx219_get_rate_factor(state); > > int exposure_max; > > int exposure_def; > > int llp_min; > > int pixel_rate; > > > > /* Update limits and set FPS to default */ > > - ret = __v4l2_ctrl_modify_range(imx219->vblank, IMX219_VBLANK_MIN, > > - IMX219_FLL_MAX - mode->height, 1, > > + ret = __v4l2_ctrl_modify_range(imx219->vblank, > > + IMX219_VBLANK_MIN * rate_factor, > > + (IMX219_FLL_MAX - mode->height) * > > + rate_factor, rate_factor, > > mode->fll_def - mode->height); > > if (ret) > > return ret; > > @@ -928,8 +931,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd, > > return ret; > > > > /* Scale the pixel rate based on the mode specific factor */ > > - pixel_rate = imx219_get_pixel_rate(imx219) * > > - imx219_get_rate_factor(state); > > + pixel_rate = imx219_get_pixel_rate(imx219) * rate_factor; > > ret = __v4l2_ctrl_modify_range(imx219->pixel_rate, pixel_rate, > > pixel_rate, 1, pixel_rate); > > if (ret) -- Regards, Sakari Ailus