[{"id":11299,"web_url":"https://patchwork.libcamera.org/comment/11299/","msgid":"<8213d64e-9fd9-3bba-2164-488ce1ba2431@collabora.com>","date":"2020-07-09T19:56:16","subject":"Re: [libcamera-devel] [PATCH 16/25] media: ov5647: Add support for\n\tget_selection()","submitter":{"id":46,"url":"https://patchwork.libcamera.org/api/people/46/","name":"Dafna Hirschfeld","email":"dafna.hirschfeld@collabora.com"},"content":"On 23.06.20 18:49, Jacopo Mondi wrote:\n> From: Dave Stevenson <dave.stevenson@raspberrypi.com>\n> \n> Support the get_selection() pad operation to report the device\n> full pixel array size, the currently applied analogue crop rectangle and\n> the active pixel array dimensions.\n> \n> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>   drivers/media/i2c/ov5647.c | 95 ++++++++++++++++++++++++++++----------\n>   1 file changed, 71 insertions(+), 24 deletions(-)\n> \n> diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c\n> index a801ed0249aad..3757f0b10fe93 100644\n> --- a/drivers/media/i2c/ov5647.c\n> +++ b/drivers/media/i2c/ov5647.c\n> @@ -59,25 +59,14 @@\n>   #define VAL_TERM 0xfe\n>   #define REG_DLY  0xffff\n>   \n> -#define OV5647_ROW_START\t\t0x01\n> -#define OV5647_ROW_START_MIN\t\t0\n> -#define OV5647_ROW_START_MAX\t\t2004\n> -#define OV5647_ROW_START_DEF\t\t54\n> -\n> -#define OV5647_COLUMN_START\t\t0x02\n> -#define OV5647_COLUMN_START_MIN\t\t0\n> -#define OV5647_COLUMN_START_MAX\t\t2750\n> -#define OV5647_COLUMN_START_DEF\t\t16\n> -\n> -#define OV5647_WINDOW_HEIGHT\t\t0x03\n> -#define OV5647_WINDOW_HEIGHT_MIN\t2\n> -#define OV5647_WINDOW_HEIGHT_MAX\t2006\n> -#define OV5647_WINDOW_HEIGHT_DEF\t1944\n> -\n> -#define OV5647_WINDOW_WIDTH\t\t0x04\n> -#define OV5647_WINDOW_WIDTH_MIN\t\t2\n> -#define OV5647_WINDOW_WIDTH_MAX\t\t2752\n> -#define OV5647_WINDOW_WIDTH_DEF\t\t2592\n> +/* OV5647 native and active pixel array size */\n> +#define OV5647_NATIVE_WIDTH\t\t2624U\n> +#define OV5647_NATIVE_HEIGHT\t\t1956U\n> +\n> +#define OV5647_PIXEL_ARRAY_LEFT\t\t16U\n> +#define OV5647_PIXEL_ARRAY_TOP\t\t16U\n> +#define OV5647_PIXEL_ARRAY_WIDTH\t2592U\n> +#define OV5647_PIXEL_ARRAY_HEIGHT\t1944U\n>   \n>   struct regval_list {\n>   \tu16 addr;\n> @@ -86,6 +75,7 @@ struct regval_list {\n>   \n>   struct ov5647_mode {\n>   \tstruct v4l2_mbus_framefmt\tformat;\n> +\tstruct v4l2_rect\t\tcrop;\n>   \tstruct regval_list\t\t*reg_list;\n>   \tunsigned int\t\t\tnum_regs;\n>   };\n> @@ -224,6 +214,12 @@ static struct ov5647_mode ov5647_8bit_modes[] = {\n>   \t\t\t.width\t\t= 640,\n>   \t\t\t.height\t\t= 480\n>   \t\t},\n> +\t\t.crop = {\n> +\t\t\t.left\t\t= 0,\n> +\t\t\t.top\t\t= 0,\n> +\t\t\t.width\t\t= 1280,\n> +\t\t\t.height\t\t= 960,\n> +\t\t},\n>   \t\t.reg_list\t= ov5647_640x480,\n>   \t\t.num_regs\t= ARRAY_SIZE(ov5647_640x480)\n>   \t},\n> @@ -412,7 +408,7 @@ static int set_sw_standby(struct v4l2_subdev *sd, bool standby)\n>   static int ov5647_sensor_power(struct v4l2_subdev *sd, int on)\n>   {\n>   \tstruct i2c_client *client = v4l2_get_subdevdata(sd);\n> -\tstruct ov5647 *ov5647 = to_state(sd);\n> +\tstruct ov5647 *sensor = to_sensor(sd);\n\nHi,\nThis is a compilation fix that was introduced in patch\n'media: ov5647: Rationalize driver structure name'\n\nThanks,\nDafna\n\n>   \tint ret = 0;\n>   \n>   \tmutex_lock(&sensor->lock);\n> @@ -507,6 +503,20 @@ static const struct v4l2_subdev_core_ops ov5647_subdev_core_ops = {\n>   #endif\n>   };\n>   \n> +static const struct v4l2_rect *\n> +__ov5647_get_pad_crop(struct ov5647 *ov5647, struct v4l2_subdev_pad_config *cfg,\n> +\t\t      unsigned int pad, enum v4l2_subdev_format_whence which)\n> +{\n> +\tswitch (which) {\n> +\tcase V4L2_SUBDEV_FORMAT_TRY:\n> +\t\treturn v4l2_subdev_get_try_crop(&ov5647->sd, cfg, pad);\n> +\tcase V4L2_SUBDEV_FORMAT_ACTIVE:\n> +\t\treturn &ov5647->mode->crop;\n> +\t}\n> +\n> +\treturn NULL;\n> +}\n> +\n>   static int ov5647_s_stream(struct v4l2_subdev *sd, int enable)\n>   {\n>   \tstruct ov5647 *sensor = to_sensor(sd);\n> @@ -577,11 +587,48 @@ static int ov5647_set_get_fmt(struct v4l2_subdev *sd,\n>   \treturn 0;\n>   }\n>   \n> +static int ov5647_get_selection(struct v4l2_subdev *sd,\n> +\t\t\t\tstruct v4l2_subdev_pad_config *cfg,\n> +\t\t\t\tstruct v4l2_subdev_selection *sel)\n> +{\n> +\tswitch (sel->target) {\n> +\tcase V4L2_SEL_TGT_CROP: {\n> +\t\tstruct ov5647 *sensor = to_sensor(sd);\n> +\n> +\t\tmutex_lock(&sensor->lock);\n> +\t\tsel->r = *__ov5647_get_pad_crop(sensor, cfg, sel->pad,\n> +\t\t\t\t\t\tsel->which);\n> +\t\tmutex_unlock(&sensor->lock);\n> +\n> +\t\treturn 0;\n> +\t}\n> +\n> +\tcase V4L2_SEL_TGT_NATIVE_SIZE:\n> +\t\tsel->r.top = 0;\n> +\t\tsel->r.left = 0;\n> +\t\tsel->r.width = OV5647_NATIVE_WIDTH;\n> +\t\tsel->r.height = OV5647_NATIVE_HEIGHT;\n> +\n> +\t\treturn 0;\n> +\n> +\tcase V4L2_SEL_TGT_CROP_DEFAULT:\n> +\t\tsel->r.top = OV5647_PIXEL_ARRAY_TOP;\n> +\t\tsel->r.left = OV5647_PIXEL_ARRAY_LEFT;\n> +\t\tsel->r.width = OV5647_PIXEL_ARRAY_WIDTH;\n> +\t\tsel->r.height = OV5647_PIXEL_ARRAY_HEIGHT;\n> +\n> +\t\treturn 0;\n> +\t}\n> +\n> +\treturn -EINVAL;\n> +}\n> +\n>   static const struct v4l2_subdev_pad_ops ov5647_subdev_pad_ops = {\n>   \t.enum_mbus_code\t\t= ov5647_enum_mbus_code,\n>   \t.enum_frame_size\t= ov5647_enum_frame_size,\n>   \t.set_fmt\t\t= ov5647_set_get_fmt,\n>   \t.get_fmt\t\t= ov5647_set_get_fmt,\n> +\t.get_selection\t\t= ov5647_get_selection,\n>   };\n>   \n>   static const struct v4l2_subdev_ops ov5647_subdev_ops = {\n> @@ -626,10 +673,10 @@ static int ov5647_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)\n>   \tstruct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd, fh->pad, 0);\n>   \tstruct v4l2_rect *crop = v4l2_subdev_get_try_crop(sd, fh->pad, 0);\n>   \n> -\tcrop->left = OV5647_COLUMN_START_DEF;\n> -\tcrop->top = OV5647_ROW_START_DEF;\n> -\tcrop->width = OV5647_WINDOW_WIDTH_DEF;\n> -\tcrop->height = OV5647_WINDOW_HEIGHT_DEF;\n> +\tcrop->left = OV5647_PIXEL_ARRAY_LEFT;\n> +\tcrop->top = OV5647_PIXEL_ARRAY_TOP;\n> +\tcrop->width = OV5647_PIXEL_ARRAY_WIDTH;\n> +\tcrop->height = OV5647_PIXEL_ARRAY_HEIGHT;\n>   \n>   \t*format = OV5647_DEFAULT_FORMAT;\n>   \n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 3D165BD790\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Jul 2020 19:56:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DFE6461370;\n\tThu,  9 Jul 2020 21:56:21 +0200 (CEST)","from bhuna.collabora.co.uk (bhuna.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6D4B96123A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Jul 2020 21:56:20 +0200 (CEST)","from [IPv6:2003:cb:8737:cf00:f5ff:2fff:89f:f3f4]\n\t(p200300cb8737cf00f5ff2fff089ff3f4.dip0.t-ipconnect.de\n\t[IPv6:2003:cb:8737:cf00:f5ff:2fff:89f:f3f4])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits))\n\t(No client certificate requested) (Authenticated sender: dafna)\n\tby bhuna.collabora.co.uk (Postfix) with ESMTPSA id 10D352A6663;\n\tThu,  9 Jul 2020 20:56:19 +0100 (BST)"],"To":"Jacopo Mondi <jacopo@jmondi.org>, mchehab@kernel.org,\n\tsakari.ailus@linux.intel.com, hverkuil@xs4all.nl,\n\tlaurent.pinchart@ideasonboard.com, roman.kovalivskyi@globallogic.com, \n\tdave.stevenson@raspberrypi.org, naush@raspberrypi.com","References":"<20200623100815.10674-1-jacopo@jmondi.org>\n\t<20200623164911.45147-1-jacopo@jmondi.org>","From":"Dafna Hirschfeld <dafna.hirschfeld@collabora.com>","Message-ID":"<8213d64e-9fd9-3bba-2164-488ce1ba2431@collabora.com>","Date":"Thu, 9 Jul 2020 21:56:16 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20200623164911.45147-1-jacopo@jmondi.org>","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH 16/25] media: ov5647: Add support for\n\tget_selection()","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"andrew_gabbasov@mentor.com, mrodin@de.adit-jv.com, mripard@kernel.org,\n\tlibcamera-devel@lists.libcamera.org, sudipi@jp.adit-jv.com,\n\thugues.fruchet@st.com, erosca@de.adit-jv.com, aford173@gmail.com,\n\tlinux-media@vger.kernel.org","Content-Transfer-Encoding":"7bit","Content-Type":"text/plain; charset=\"us-ascii\"; Format=\"flowed\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]