Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp1723289rda; Tue, 24 Oct 2023 00:53:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFyhj1dUjJ1gEVYDyqRts4id/JcGN9ecgdoTtt7rixttJDHpeX7y4Zpikh6n5u1nHw6bA58 X-Received: by 2002:a05:6a00:1e06:b0:68f:c8b4:1a2b with SMTP id gx6-20020a056a001e0600b0068fc8b41a2bmr20901968pfb.17.1698133999241; Tue, 24 Oct 2023 00:53:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698133999; cv=none; d=google.com; s=arc-20160816; b=pfaugDzhWUXfqP0CwcEP3W7hz2HDMkbGOBgqMN0LGGHryutyzQLKIdX5kJ5iJbhHmo AIcJFd4H1YqJfct/U/jF/RkOuDK7LqX/Ed3QkmvJdan3zlv6StKPCwAIajQzkR766W9v mExpiRhWpl6/dEcaw1CMBhPHVPM+82oxY5yWtqUnwI4jonYvq5LpIwPXS3FBeOxOFvv3 Cshnn3frSbRqp4Y1WwzSrA7RYl7KtQnZfmSJRkawn0sevd8IVqsdePuXIy+bniuMTkP+ IAV3gnh9dAdfOWVVbdfqbBuOG2tU2ognKZzKiAuFjvMiwuVv3ewEZU6osnuJgcY4Bh/A 8Nuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=c6ychmRtHqhKTK8ArLb9o1cJU79oPLwWwULnNGc2F+w=; fh=4qI1tNGp8eUGz2Lsvi0/hPQg0fwF7CY6Vcl0DjjQ1bQ=; b=uVS2UYppra/vqo/5A1Gr1mHlsSRZksgEiMiUc54PrfBZriOk0MyQlb4e2ZmvukH4dr pW4ouJy09LabrAJkt9/GH+KGBO+EAGiStF4G4EmB5mgodPL39p8KFCLPQdfCHX6GWEH6 CUPO3sbqUj1CHJKAS1mx2PZUz73+VyIEQjvfWGRggVgRBNmBLJriTObF+Pa+e+SScowf CYaQT+u36en9VUp9wXY3y9PpAiMZF7zQ4mrwjfTRYqYX0j9XBnBpAkCAdmJRxUl0wJnj FndUbUjirbVbTxBG6pb4XQiVedA4ZAiRjl8MX1AmIj1Huz5olpBCyC9hZsVy7WNM2SEZ a/GQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=Ord7kv3k; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id x9-20020aa79409000000b006bf62739e66si4870654pfo.22.2023.10.24.00.53.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Oct 2023 00:53:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=Ord7kv3k; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id C3921807C5DD; Tue, 24 Oct 2023 00:53:16 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233150AbjJXHxC (ORCPT + 99 others); Tue, 24 Oct 2023 03:53:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232544AbjJXHxA (ORCPT ); Tue, 24 Oct 2023 03:53:00 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4A226E5; Tue, 24 Oct 2023 00:52:58 -0700 (PDT) Received: from ideasonboard.com (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 02F47B53; Tue, 24 Oct 2023 09:52:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1698133966; bh=LNElzporzpCaYnc+Rp+xusVwCai020KivGn+5e/4bF4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Ord7kv3k2vxeOOVOiFf+QDLZTPQWrwSpUUuc9CSCkwirXdoVBGwyo2jvEWf/d7W4a LAGjvLuoopSMwUTVf4/2Cbh92qv0vfwSwowLAbEqa0fzghJ26klbK6QVtX0zdod516 SuW1NPP9Q8spz3S3uizL29f6jSjhXGQa9d/XePjA= Date: Tue, 24 Oct 2023 09:52:44 +0200 From: Jacopo Mondi To: =?utf-8?B?QW5kcsOp?= Apitzsch Cc: Ricardo Ribalda , Sakari Ailus , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht Subject: Re: [PATCH 4/4] media: i2c: imx214: Add sensor's pixel matrix size Message-ID: <56kgwl7zehsxy2pp7nziwk2gt6joax42qpzs6eywufvcto7qxm@ts4i3ccdokjr> References: <20231023-imx214-v1-0-b33f1bbd1fcf@apitzsch.eu> <20231023-imx214-v1-4-b33f1bbd1fcf@apitzsch.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20231023-imx214-v1-4-b33f1bbd1fcf@apitzsch.eu> X-Spam-Status: No, score=1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, PDS_OTHER_BAD_TLD,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 24 Oct 2023 00:53:16 -0700 (PDT) X-Spam-Level: * Hi Andre' On Mon, Oct 23, 2023 at 11:47:53PM +0200, André Apitzsch wrote: > Set effictive and active sensor pixel sizes as shown in product s/effictive/effective > brief[1]. > > [1]: https://www.mouser.com/datasheet/2/897/ProductBrief_IMX214_20150428-1289331.pdf > > Signed-off-by: André Apitzsch > --- > drivers/media/i2c/imx214.c | 39 ++++++++++++++++++++++++++++++++------- > 1 file changed, 32 insertions(+), 7 deletions(-) > > diff --git a/drivers/media/i2c/imx214.c b/drivers/media/i2c/imx214.c > index bef8dc36e2d0..a2d441cd8dcd 100644 > --- a/drivers/media/i2c/imx214.c > +++ b/drivers/media/i2c/imx214.c > @@ -36,6 +36,14 @@ > #define IMX214_EXPOSURE_STEP 1 > #define IMX214_EXPOSURE_DEFAULT 0x0c70 > > +/* IMX214 native and active pixel array size */ > +#define IMX214_NATIVE_WIDTH 4224U > +#define IMX214_NATIVE_HEIGHT 3136U > +#define IMX214_PIXEL_ARRAY_LEFT 8U > +#define IMX214_PIXEL_ARRAY_TOP 8U > +#define IMX214_PIXEL_ARRAY_WIDTH 4208U > +#define IMX214_PIXEL_ARRAY_HEIGHT 3120U > + I do get slightly different numbers from the datasheet version I have The sensor is said to have 4224x3208 total pixels of which 4208x3120 are active ones. The pixel array diagram shows 64 "OPB" (optically black ?) lines, followed by 8 dummy lines, followed by 3120 valid lines. There are 8 dummy columns at each side of the 4208 valid ones. Now, NATIVE which represents the full pixel array size seems to be 4224x3208 (other parts of the datasheet only report 3200 lines though) BOUNDS represents the readabale array area, which I presume corresponds to what is named as 'effective area' by the datasheet. It excludes the OPB lines at the top of the image and seems to be represented by (0, 64, 4224, 3160). CROP_DEFAULT represents the default crop rectangle which covers the active pixel area, so it excludes 8 more lines of dummy pixels and 8 dummy columns, which gives a rectangle (8, 72, 4208, 3120) Also note that the driver always reports a TGT_CROP rectangle with top/left points set to 0. If my understanding is correct, V4L2 selection targets are defined from the most external target (TGT_NATIVE in this case), and the driver should be corrected to initialize the crop rectangle with a top-left corner at (8, 72). Does this make sense ? Thanks j > static const char * const imx214_supply_name[] = { > "vdda", > "vddd", > @@ -634,14 +642,31 @@ static int imx214_get_selection(struct v4l2_subdev *sd, > { > struct imx214 *imx214 = to_imx214(sd); > > - if (sel->target != V4L2_SEL_TGT_CROP) > - return -EINVAL; > + switch (sel->target) { > + case V4L2_SEL_TGT_CROP: > + mutex_lock(&imx214->mutex); > + sel->r = *__imx214_get_pad_crop(imx214, sd_state, sel->pad, > + sel->which); > + mutex_unlock(&imx214->mutex); > + return 0; > > - mutex_lock(&imx214->mutex); > - sel->r = *__imx214_get_pad_crop(imx214, sd_state, sel->pad, > - sel->which); > - mutex_unlock(&imx214->mutex); > - return 0; > + case V4L2_SEL_TGT_NATIVE_SIZE: > + sel->r.top = 0; > + sel->r.left = 0; > + sel->r.width = IMX214_NATIVE_WIDTH; > + sel->r.height = IMX214_NATIVE_HEIGHT; > + return 0; > + > + case V4L2_SEL_TGT_CROP_DEFAULT: > + case V4L2_SEL_TGT_CROP_BOUNDS: > + sel->r.top = IMX214_PIXEL_ARRAY_TOP; > + sel->r.left = IMX214_PIXEL_ARRAY_LEFT; > + sel->r.width = IMX214_PIXEL_ARRAY_WIDTH; > + sel->r.height = IMX214_PIXEL_ARRAY_HEIGHT; > + return 0; > + } > + > + return -EINVAL; > } > > static int imx214_entity_init_cfg(struct v4l2_subdev *subdev, > > -- > 2.42.0 >