lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56kgwl7zehsxy2pp7nziwk2gt6joax42qpzs6eywufvcto7qxm@ts4i3ccdokjr>
Date:   Tue, 24 Oct 2023 09:52:44 +0200
From:   Jacopo Mondi <jacopo.mondi@...asonboard.com>
To:     André Apitzsch <git@...tzsch.eu>
Cc:     Ricardo Ribalda <ribalda@...nel.org>,
        Sakari Ailus <sakari.ailus@...ux.intel.com>,
        Mauro Carvalho Chehab <mchehab@...nel.org>,
        linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
        ~postmarketos/upstreaming@...ts.sr.ht
Subject: Re: [PATCH 4/4] media: i2c: imx214: Add sensor's pixel matrix size

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 <git@...tzsch.eu>
> ---
>  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
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ