From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Cc: dave.stevenson@raspberrypi.com, devicetree@vger.kernel.org,
kernel-list@raspberrypi.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-rpi-kernel@lists.infradead.org, lukasz@jany.st,
mchehab@kernel.org, naush@raspberrypi.com, robh@kernel.org,
tomi.valkeinen@ideasonboard.com,
bcm-kernel-feedback-list@broadcom.com, stefan.wahren@i2se.com
Subject: Re: [PATCH v5 09/11] media: imx219: Introduce the set_routing operation
Date: Mon, 21 Feb 2022 09:17:16 +0200 [thread overview]
Message-ID: <YhM8fFae+Zmxymd3@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20220208155027.891055-10-jeanmichel.hautbois@ideasonboard.com>
Hi Jean-Michel,
Thank you for the patch.
On Tue, Feb 08, 2022 at 04:50:25PM +0100, Jean-Michel Hautbois wrote:
> As we want to use multiplexed streams API, we need to be able to set the
> pad routing. Introduce the set_routing operation.
>
> As this operation is required for a multiplexed able sensor, add the
> V4L2_SUBDEV_FL_MULTIPLEXED flag.
>
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
> ---
> drivers/media/i2c/imx219.c | 82 ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 79 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
> index abcaee15c4a0..35b61fad8e35 100644
> --- a/drivers/media/i2c/imx219.c
> +++ b/drivers/media/i2c/imx219.c
> @@ -118,6 +118,10 @@
> #define IMX219_PIXEL_ARRAY_WIDTH 3280U
> #define IMX219_PIXEL_ARRAY_HEIGHT 2464U
>
> +/* Embedded metadata stream structure */
> +#define IMX219_EMBEDDED_LINE_WIDTH 16384
> +#define IMX219_NUM_EMBEDDED_LINES 1
> +
> struct imx219_reg {
> u16 address;
> u8 val;
> @@ -784,15 +788,85 @@ static void imx219_init_formats(struct v4l2_subdev_state *state)
> format->height = supported_modes[0].height;
> format->field = V4L2_FIELD_NONE;
> format->colorspace = V4L2_COLORSPACE_RAW;
> +
> + if (state->routing.routes[1].flags & V4L2_SUBDEV_ROUTE_FL_ACTIVE) {
There's no guarantee the routing table will have 2 entries.
> + format = v4l2_state_get_stream_format(state, 0, 1);
> + format->code = MEDIA_BUS_FMT_METADATA_8;
> + format->width = IMX219_EMBEDDED_LINE_WIDTH;
> + format->height = 1;
> + format->field = V4L2_FIELD_NONE;
> + format->colorspace = V4L2_COLORSPACE_DEFAULT;
> + }
> }
>
> -static int imx219_init_cfg(struct v4l2_subdev *sd,
> - struct v4l2_subdev_state *state)
> +static int __imx219_set_routing(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state)
> {
> + struct v4l2_subdev_route routes[] = {
> + {
> + .source_pad = 0,
> + .source_stream = 0,
> + .flags = V4L2_SUBDEV_ROUTE_FL_IMMUTABLE |
> + V4L2_SUBDEV_ROUTE_FL_SOURCE |
> + V4L2_SUBDEV_ROUTE_FL_ACTIVE,
> + },
> + {
}, {
> + .source_pad = 0,
> + .source_stream = 1,
> + .flags = V4L2_SUBDEV_ROUTE_FL_SOURCE |
> + V4L2_SUBDEV_ROUTE_FL_ACTIVE,
> + }
> + };
That doesn't look right. You're hardcoding the routes, disregarding
completely what userspace wants to program. This default configuration
must move to .init_cfg().
> +
> + struct v4l2_subdev_krouting routing = {
> + .num_routes = ARRAY_SIZE(routes),
> + .routes = routes,
> + };
> +
> + int ret;
> +
> + ret = v4l2_subdev_set_routing(sd, state, &routing);
> + if (ret)
> + return ret;
> +
> imx219_init_formats(state);
> +
> return 0;
> }
>
> +static int imx219_set_routing(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state,
> + enum v4l2_subdev_format_whence which,
> + struct v4l2_subdev_krouting *routing)
> +{
> + int ret;
> +
> + if (routing->num_routes == 0 || routing->num_routes > 2)
> + return -EINVAL;
> +
> + v4l2_subdev_lock_state(state);
Note for the future: v11 of the V4L2 streams series will handle locking
in the code, so you'll have to drop this (same in .init_cfg()).
> +
> + ret = __imx219_set_routing(sd, state);
> +
> + v4l2_subdev_unlock_state(state);
> +
> + return ret;
> +}
> +
> +static int imx219_init_cfg(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state)
> +{
> + int ret;
> +
> + v4l2_subdev_lock_state(state);
> +
> + ret = __imx219_set_routing(sd, state);
> +
> + v4l2_subdev_unlock_state(state);
> +
> + return ret;
> +}
> +
> static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
> struct v4l2_subdev_state *sd_state,
> struct v4l2_subdev_mbus_code_enum *code)
> @@ -1251,6 +1325,7 @@ static const struct v4l2_subdev_pad_ops imx219_pad_ops = {
> .get_fmt = imx219_get_pad_format,
> .set_fmt = imx219_set_pad_format,
> .get_selection = imx219_get_selection,
> + .set_routing = imx219_set_routing,
> .enum_frame_size = imx219_enum_frame_size,
> };
>
> @@ -1509,7 +1584,8 @@ static int imx219_probe(struct i2c_client *client)
>
> /* Initialize subdev */
> imx219->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
> - V4L2_SUBDEV_FL_HAS_EVENTS;
> + V4L2_SUBDEV_FL_HAS_EVENTS |
> + V4L2_SUBDEV_FL_MULTIPLEXED;
> imx219->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
>
> /* Initialize source pad */
--
Regards,
Laurent Pinchart
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Cc: dave.stevenson@raspberrypi.com, devicetree@vger.kernel.org,
kernel-list@raspberrypi.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-rpi-kernel@lists.infradead.org, lukasz@jany.st,
mchehab@kernel.org, naush@raspberrypi.com, robh@kernel.org,
tomi.valkeinen@ideasonboard.com,
bcm-kernel-feedback-list@broadcom.com, stefan.wahren@i2se.com
Subject: Re: [PATCH v5 09/11] media: imx219: Introduce the set_routing operation
Date: Mon, 21 Feb 2022 09:17:16 +0200 [thread overview]
Message-ID: <YhM8fFae+Zmxymd3@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20220208155027.891055-10-jeanmichel.hautbois@ideasonboard.com>
Hi Jean-Michel,
Thank you for the patch.
On Tue, Feb 08, 2022 at 04:50:25PM +0100, Jean-Michel Hautbois wrote:
> As we want to use multiplexed streams API, we need to be able to set the
> pad routing. Introduce the set_routing operation.
>
> As this operation is required for a multiplexed able sensor, add the
> V4L2_SUBDEV_FL_MULTIPLEXED flag.
>
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
> ---
> drivers/media/i2c/imx219.c | 82 ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 79 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
> index abcaee15c4a0..35b61fad8e35 100644
> --- a/drivers/media/i2c/imx219.c
> +++ b/drivers/media/i2c/imx219.c
> @@ -118,6 +118,10 @@
> #define IMX219_PIXEL_ARRAY_WIDTH 3280U
> #define IMX219_PIXEL_ARRAY_HEIGHT 2464U
>
> +/* Embedded metadata stream structure */
> +#define IMX219_EMBEDDED_LINE_WIDTH 16384
> +#define IMX219_NUM_EMBEDDED_LINES 1
> +
> struct imx219_reg {
> u16 address;
> u8 val;
> @@ -784,15 +788,85 @@ static void imx219_init_formats(struct v4l2_subdev_state *state)
> format->height = supported_modes[0].height;
> format->field = V4L2_FIELD_NONE;
> format->colorspace = V4L2_COLORSPACE_RAW;
> +
> + if (state->routing.routes[1].flags & V4L2_SUBDEV_ROUTE_FL_ACTIVE) {
There's no guarantee the routing table will have 2 entries.
> + format = v4l2_state_get_stream_format(state, 0, 1);
> + format->code = MEDIA_BUS_FMT_METADATA_8;
> + format->width = IMX219_EMBEDDED_LINE_WIDTH;
> + format->height = 1;
> + format->field = V4L2_FIELD_NONE;
> + format->colorspace = V4L2_COLORSPACE_DEFAULT;
> + }
> }
>
> -static int imx219_init_cfg(struct v4l2_subdev *sd,
> - struct v4l2_subdev_state *state)
> +static int __imx219_set_routing(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state)
> {
> + struct v4l2_subdev_route routes[] = {
> + {
> + .source_pad = 0,
> + .source_stream = 0,
> + .flags = V4L2_SUBDEV_ROUTE_FL_IMMUTABLE |
> + V4L2_SUBDEV_ROUTE_FL_SOURCE |
> + V4L2_SUBDEV_ROUTE_FL_ACTIVE,
> + },
> + {
}, {
> + .source_pad = 0,
> + .source_stream = 1,
> + .flags = V4L2_SUBDEV_ROUTE_FL_SOURCE |
> + V4L2_SUBDEV_ROUTE_FL_ACTIVE,
> + }
> + };
That doesn't look right. You're hardcoding the routes, disregarding
completely what userspace wants to program. This default configuration
must move to .init_cfg().
> +
> + struct v4l2_subdev_krouting routing = {
> + .num_routes = ARRAY_SIZE(routes),
> + .routes = routes,
> + };
> +
> + int ret;
> +
> + ret = v4l2_subdev_set_routing(sd, state, &routing);
> + if (ret)
> + return ret;
> +
> imx219_init_formats(state);
> +
> return 0;
> }
>
> +static int imx219_set_routing(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state,
> + enum v4l2_subdev_format_whence which,
> + struct v4l2_subdev_krouting *routing)
> +{
> + int ret;
> +
> + if (routing->num_routes == 0 || routing->num_routes > 2)
> + return -EINVAL;
> +
> + v4l2_subdev_lock_state(state);
Note for the future: v11 of the V4L2 streams series will handle locking
in the code, so you'll have to drop this (same in .init_cfg()).
> +
> + ret = __imx219_set_routing(sd, state);
> +
> + v4l2_subdev_unlock_state(state);
> +
> + return ret;
> +}
> +
> +static int imx219_init_cfg(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state)
> +{
> + int ret;
> +
> + v4l2_subdev_lock_state(state);
> +
> + ret = __imx219_set_routing(sd, state);
> +
> + v4l2_subdev_unlock_state(state);
> +
> + return ret;
> +}
> +
> static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
> struct v4l2_subdev_state *sd_state,
> struct v4l2_subdev_mbus_code_enum *code)
> @@ -1251,6 +1325,7 @@ static const struct v4l2_subdev_pad_ops imx219_pad_ops = {
> .get_fmt = imx219_get_pad_format,
> .set_fmt = imx219_set_pad_format,
> .get_selection = imx219_get_selection,
> + .set_routing = imx219_set_routing,
> .enum_frame_size = imx219_enum_frame_size,
> };
>
> @@ -1509,7 +1584,8 @@ static int imx219_probe(struct i2c_client *client)
>
> /* Initialize subdev */
> imx219->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
> - V4L2_SUBDEV_FL_HAS_EVENTS;
> + V4L2_SUBDEV_FL_HAS_EVENTS |
> + V4L2_SUBDEV_FL_MULTIPLEXED;
> imx219->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
>
> /* Initialize source pad */
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2022-02-21 7:18 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-08 15:50 [PATCH v5 00/11] Add support for BCM2835 camera interface (unicam) Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 15:50 ` [PATCH v5 01/11] media: v4l: Add V4L2-PIX-FMT-Y12P format Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 15:50 ` [PATCH v5 02/11] media: v4l: Add V4L2-PIX-FMT-Y14P format Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 15:50 ` [PATCH v5 03/11] dt-bindings: media: Add bindings for bcm2835-unicam Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-09 18:56 ` Rob Herring
2022-02-09 18:56 ` Rob Herring
2022-02-13 15:48 ` Stefan Wahren
2022-02-13 15:48 ` Stefan Wahren
2022-02-14 9:39 ` Maxime Ripard
2022-02-14 9:39 ` Maxime Ripard
2022-02-14 9:54 ` Laurent Pinchart
2022-02-14 9:54 ` Laurent Pinchart
2022-02-14 11:32 ` Stefan Wahren
2022-02-14 11:32 ` Stefan Wahren
2022-02-21 7:10 ` Laurent Pinchart
2022-02-21 7:10 ` Laurent Pinchart
2022-02-21 10:03 ` Maxime Ripard
2022-02-21 10:03 ` Maxime Ripard
2022-02-21 12:45 ` Stefan Wahren
2022-02-21 12:45 ` Stefan Wahren
2022-02-21 12:52 ` Laurent Pinchart
2022-02-21 12:52 ` Laurent Pinchart
2022-02-25 8:19 ` Sakari Ailus
2022-02-25 8:19 ` Sakari Ailus
2022-02-08 15:50 ` [PATCH v5 04/11] media: bcm2835-unicam: Add support for CCP2/CSI2 camera interface Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 21:00 ` Stefan Wahren
2022-02-08 21:00 ` Stefan Wahren
2022-02-13 12:52 ` Laurent Pinchart
2022-02-13 12:52 ` Laurent Pinchart
2022-02-13 11:17 ` Stefan Wahren
2022-02-13 11:17 ` Stefan Wahren
2022-02-13 12:49 ` Laurent Pinchart
2022-02-13 12:49 ` Laurent Pinchart
2022-02-20 10:01 ` Stefan Wahren
2022-02-20 10:01 ` Stefan Wahren
2022-02-20 10:08 ` Laurent Pinchart
2022-02-20 10:08 ` Laurent Pinchart
2022-02-21 9:55 ` Laurent Pinchart
2022-02-21 9:55 ` Laurent Pinchart
2022-02-25 9:29 ` Sakari Ailus
2022-02-25 9:29 ` Sakari Ailus
2023-07-02 15:23 ` Laurent Pinchart
2023-07-02 15:23 ` Laurent Pinchart
2023-07-02 18:18 ` Sakari Ailus
2023-07-02 18:18 ` Sakari Ailus
2023-07-02 21:45 ` Laurent Pinchart
2023-07-02 21:45 ` Laurent Pinchart
2023-07-02 21:47 ` Laurent Pinchart
2023-07-02 21:47 ` Laurent Pinchart
2023-07-02 21:56 ` Sakari Ailus
2023-07-02 21:56 ` Sakari Ailus
2023-07-02 22:01 ` Laurent Pinchart
2023-07-02 22:01 ` Laurent Pinchart
2023-07-02 22:20 ` Sakari Ailus
2023-07-02 22:20 ` Sakari Ailus
2023-07-02 22:28 ` Laurent Pinchart
2023-07-02 22:28 ` Laurent Pinchart
2023-07-02 22:33 ` Sakari Ailus
2023-07-02 22:33 ` Sakari Ailus
2023-07-02 21:53 ` Sakari Ailus
2023-07-02 21:53 ` Sakari Ailus
2023-07-02 21:58 ` Laurent Pinchart
2023-07-02 21:58 ` Laurent Pinchart
2022-02-08 15:50 ` [PATCH v5 05/11] media: MAINTAINERS: add bcm2835 unicam driver Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 15:58 ` Laurent Pinchart
2022-02-08 15:58 ` Laurent Pinchart
2022-02-08 15:50 ` [PATCH v5 06/11] ARM: dts: bcm2711: Add unicam CSI nodes Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-13 10:35 ` Stefan Wahren
2022-02-13 10:35 ` Stefan Wahren
2022-02-13 13:51 ` Stefan Wahren
2022-02-13 13:51 ` Stefan Wahren
2022-02-23 14:34 ` [PATCH v5.1 1/2] ARM: dts: bcm2835-rpi: Move the firmware clocks Jean-Michel Hautbois
2022-02-23 14:34 ` Jean-Michel Hautbois
2022-02-23 14:34 ` [PATCH v5.1 2/2] ARM: dts: bcm2711: Add unicam CSI nodes Jean-Michel Hautbois
2022-02-23 14:34 ` Jean-Michel Hautbois
2022-02-24 17:03 ` Stefan Wahren
2022-02-24 17:03 ` Stefan Wahren
2022-02-24 17:07 ` Jean-Michel Hautbois
2022-02-24 17:07 ` Jean-Michel Hautbois
2022-02-24 21:26 ` Stefan Wahren
2022-02-24 21:26 ` Stefan Wahren
2022-02-23 14:41 ` [PATCH v5.1 1/2] ARM: dts: bcm2835-rpi: Move the firmware clocks Maxime Ripard
2022-02-23 14:41 ` Maxime Ripard
2022-02-08 15:50 ` [PATCH v5 07/11] media: imx219: Rename mbus codes array Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 15:50 ` [PATCH v5 08/11] media: imx219: Switch from open to init_cfg Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 16:02 ` Laurent Pinchart
2022-02-08 16:02 ` Laurent Pinchart
2022-02-08 16:05 ` Laurent Pinchart
2022-02-08 16:05 ` Laurent Pinchart
2022-02-08 15:50 ` [PATCH v5 09/11] media: imx219: Introduce the set_routing operation Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-21 7:17 ` Laurent Pinchart [this message]
2022-02-21 7:17 ` Laurent Pinchart
2022-02-08 15:50 ` [PATCH v5 10/11] media: imx219: use a local v4l2_subdev to simplify reading Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-08 15:50 ` [PATCH v5 11/11] media: imx219: Add support for the V4L2 subdev active state Jean-Michel Hautbois
2022-02-08 15:50 ` Jean-Michel Hautbois
2022-02-21 7:25 ` Laurent Pinchart
2022-02-21 7:25 ` Laurent Pinchart
2022-02-16 20:57 ` [PATCH v5 00/11] Add support for BCM2835 camera interface (unicam) Stefan Wahren
2022-02-16 20:57 ` Stefan Wahren
2022-02-20 14:30 ` Jean-Michel Hautbois
2022-02-20 14:30 ` Jean-Michel Hautbois
2022-02-26 17:18 ` Stefan Wahren
2022-02-26 17:18 ` Stefan Wahren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YhM8fFae+Zmxymd3@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=devicetree@vger.kernel.org \
--cc=jeanmichel.hautbois@ideasonboard.com \
--cc=kernel-list@raspberrypi.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=lukasz@jany.st \
--cc=mchehab@kernel.org \
--cc=naush@raspberrypi.com \
--cc=robh@kernel.org \
--cc=stefan.wahren@i2se.com \
--cc=tomi.valkeinen@ideasonboard.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.