* [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-02-03 16:15 ` Jacopo Mondi
2026-01-23 8:09 ` [RFC v1 02/11] media: v4l2-isp: Add helper function to compute extended stats size Antoine Bouyer
` (10 subsequent siblings)
11 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Extend the v4l2-isp extensible format introduced for isp parameters buffer
to the statistics buffer as well.
Like for ISP configuration purpose, that will help supporting various ISP
hardware versions reporting different statistics data with less impact on
userspace.
The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
definitions, with similar header, versions and flags. V0 and V1 versions
are provided to match with params versions. On the other side, ENABLE and
DISABLE flags are not really meaningfull for statistics purpose. So VALID
and INVALID flags are introduced. Purpose is to force ISP driver to
validate a statistics buffer, before it is consumed by userspace.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
index 779168f9058e..ed1279b86694 100644
--- a/include/uapi/linux/media/v4l2-isp.h
+++ b/include/uapi/linux/media/v4l2-isp.h
@@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
__u8 data[] __counted_by(data_size);
};
+/**
+ * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
+ *
+ * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
+ * (for compatibility)
+ * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
+ *
+ * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
+ * both V0 and V1 refers to the first version of the V4L2 ISP statistics
+ * format.
+ *
+ * Future revisions of the V4L2 ISP statistics format should start from the
+ * value of 2.
+ */
+enum v4l2_isp_stats_version {
+ V4L2_ISP_STATS_VERSION_V0 = 0,
+ V4L2_ISP_STATS_VERSION_V1,
+};
+
+#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
+#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
+
+/*
+ * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
+ *
+ * Driver-specific flags should be defined as:
+ * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
+ * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
+ */
+#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
+
+/**
+ * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
+ * @type: The statistics block type (driver-specific)
+ * @flags: A bitmask of block flags (driver-specific)
+ * @size: Size (in bytes) of the statistics block, including this header
+ *
+ * This structure represents the common part of all the ISP statistics blocks.
+ * Each statistics block shall embed an instance of this structure type as its
+ * first member, followed by the block-specific statistics data.
+ *
+ * The @type field is an ISP driver-specific value that identifies the block
+ * type. The @size field specifies the size of the parameters block.
+ *
+ * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
+ * driver-specific flags specified by the driver header.
+ */
+struct v4l2_isp_stats_block_header {
+ __u16 type;
+ __u16 flags;
+ __u32 size;
+} __attribute__((aligned(8)));
+
+/**
+ * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
+ * @version: The statistics buffer version (driver-specific)
+ * @data_size: The statistics data effective size, excluding this header
+ * @data: The statistics data
+ *
+ * This structure contains the statistics information of the ISP hardware,
+ * serialized for userspace into a data buffer. Each statistics block is
+ * represented by a block-specific structure which contains a
+ * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
+ * populates the @data buffer with statistics information of the ISP blocks it
+ * intends to share to userspace. As a consequence, the data buffer effective
+ * size changes according to the number of ISP blocks that driver intends to
+ * provide and is set by the driver in the @data_size field.
+ *
+ * The statistics buffer is versioned by the @version field to allow modifying
+ * and extending its definition. Driver shall populate the @version field to
+ * inform the userpsace about the version it intends to use. The userspace will
+ * parse and handle the @data buffer according to the data layout specific to
+ * the indicated version.
+ *
+ * For each ISP block that driver wants to report, a block-specific structure
+ * is appended to the @data buffer, one after the other without gaps in
+ * between. Driver shall populate the @data_size field with the effective
+ * size, in bytes, of the @data buffer.
+ */
+struct v4l2_isp_stats_buffer {
+ __u32 version;
+ __u32 data_size;
+ __u8 data[] __counted_by(data_size);
+};
+
#endif /* _UAPI_V4L2_ISP_H_ */
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* Re: [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-01-23 8:09 ` [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions Antoine Bouyer
@ 2026-02-03 16:15 ` Jacopo Mondi
2026-02-04 11:07 ` Antoine Bouyer
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-03 16:15 UTC (permalink / raw)
To: Antoine Bouyer
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
Hi Antoine
thanks a lot for extendable stats
On Fri, Jan 23, 2026 at 09:09:28AM +0100, Antoine Bouyer wrote:
> Extend the v4l2-isp extensible format introduced for isp parameters buffer
> to the statistics buffer as well.
>
> Like for ISP configuration purpose, that will help supporting various ISP
> hardware versions reporting different statistics data with less impact on
> userspace.
>
> The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
> definitions, with similar header, versions and flags. V0 and V1 versions
Why do you need two flags ?
Params had to introduce two because we had two drivers already
mainlined using the pre-v4l2-isp version of extensible params which
had defined their version identifier as 1 and 0 and we didn't want to
break existing userspace using those identifiers. So we had to accept
both V0 and V1 as "first version of the v4l2-isp extensible parameters
format".
For stats we don't have users, so I guess we can start with V1 == 0 ?
> are provided to match with params versions. On the other side, ENABLE and
> DISABLE flags are not really meaningfull for statistics purpose. So VALID
> and INVALID flags are introduced. Purpose is to force ISP driver to
> validate a statistics buffer, before it is consumed by userspace.
Interesting. What do you mean with "validate a statistics buffer" ?
And if a driver has to do validation, why would it send upstream a
non-validated buffer ?
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
> 1 file changed, 85 insertions(+)
>
> diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
> index 779168f9058e..ed1279b86694 100644
> --- a/include/uapi/linux/media/v4l2-isp.h
> +++ b/include/uapi/linux/media/v4l2-isp.h
> @@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
> __u8 data[] __counted_by(data_size);
> };
>
> +/**
> + * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
> + *
> + * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
> + * (for compatibility)
> + * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
> + *
> + * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
> + * both V0 and V1 refers to the first version of the V4L2 ISP statistics
> + * format.
> + *
> + * Future revisions of the V4L2 ISP statistics format should start from the
> + * value of 2.
> + */
> +enum v4l2_isp_stats_version {
> + V4L2_ISP_STATS_VERSION_V0 = 0,
> + V4L2_ISP_STATS_VERSION_V1,
As suggested I would make V1 == 0
> +};
> +
> +#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
> +#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
> +
> +/*
> + * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
> + *
> + * Driver-specific flags should be defined as:
> + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
> + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
> + */
> +#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
Currently we have no users of V4L2_ISP_PARAMS_FL_DRIVER_FLAGS so we
could even consider making it a V4L2_ISP_FL_DRIVER_FLAGS
Or do you think it is worth creating a new symbol ?
> +
> +/**
> + * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
> + * @type: The statistics block type (driver-specific)
> + * @flags: A bitmask of block flags (driver-specific)
> + * @size: Size (in bytes) of the statistics block, including this header
> + *
> + * This structure represents the common part of all the ISP statistics blocks.
> + * Each statistics block shall embed an instance of this structure type as its
> + * first member, followed by the block-specific statistics data.
> + *
> + * The @type field is an ISP driver-specific value that identifies the block
> + * type. The @size field specifies the size of the parameters block.
> + *
> + * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
> + * driver-specific flags specified by the driver header.
> + */
> +struct v4l2_isp_stats_block_header {
> + __u16 type;
> + __u16 flags;
> + __u32 size;
> +} __attribute__((aligned(8)));
> +
This is currently identical to v4l2_isp_params_block_header.
Can we create a single header for both stats and params and provide a
#define v4l2_isp_params_block_header v4l2_isp_block_header
for maintaining compatibility with existing users ?
Or do you expect stats and params to eventually need different headers ?
> +/**
> + * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
> + * @version: The statistics buffer version (driver-specific)
> + * @data_size: The statistics data effective size, excluding this header
> + * @data: The statistics data
> + *
> + * This structure contains the statistics information of the ISP hardware,
> + * serialized for userspace into a data buffer. Each statistics block is
> + * represented by a block-specific structure which contains a
> + * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
> + * populates the @data buffer with statistics information of the ISP blocks it
> + * intends to share to userspace. As a consequence, the data buffer effective
> + * size changes according to the number of ISP blocks that driver intends to
> + * provide and is set by the driver in the @data_size field.
> + *
> + * The statistics buffer is versioned by the @version field to allow modifying
> + * and extending its definition. Driver shall populate the @version field to
> + * inform the userpsace about the version it intends to use. The userspace will
> + * parse and handle the @data buffer according to the data layout specific to
> + * the indicated version.
> + *
> + * For each ISP block that driver wants to report, a block-specific structure
> + * is appended to the @data buffer, one after the other without gaps in
> + * between. Driver shall populate the @data_size field with the effective
> + * size, in bytes, of the @data buffer.
> + */
> +struct v4l2_isp_stats_buffer {
> + __u32 version;
> + __u32 data_size;
> + __u8 data[] __counted_by(data_size);
> +};
> +
Same question. Should we introduce a struct v4l2_isp_buffer ?
Thanks!
> #endif /* _UAPI_V4L2_ISP_H_ */
> --
> 2.52.0
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: Re: [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-02-03 16:15 ` Jacopo Mondi
@ 2026-02-04 11:07 ` Antoine Bouyer
2026-02-04 13:14 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-02-04 11:07 UTC (permalink / raw)
To: Jacopo Mondi
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, laurent.pinchart, mchehab, robh, krzk+dt, conor+dt,
shawnguo, s.hauer, kernel, festevam, linux-kernel, linux-media,
devicetree, linux-arm-kernel
Hi Jacopo
On 2/3/26 5:15 PM, Jacopo Mondi wrote:
>
>
> Hi Antoine
> thanks a lot for extendable stats
>
> On Fri, Jan 23, 2026 at 09:09:28AM +0100, Antoine Bouyer wrote:
>> Extend the v4l2-isp extensible format introduced for isp parameters buffer
>> to the statistics buffer as well.
>>
>> Like for ISP configuration purpose, that will help supporting various ISP
>> hardware versions reporting different statistics data with less impact on
>> userspace.
>>
>> The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
>> definitions, with similar header, versions and flags. V0 and V1 versions
>
> Why do you need two flags ?
>
> Params had to introduce two because we had two drivers already
> mainlined using the pre-v4l2-isp version of extensible params which
> had defined their version identifier as 1 and 0 and we didn't want to
> break existing userspace using those identifiers. So we had to accept
> both V0 and V1 as "first version of the v4l2-isp extensible parameters
> format".
>
> For stats we don't have users, so I guess we can start with V1 == 0 ?
I wanted to keep it aligned with params, so that any driver/userspace
can use the same API version value for both params and stats buffers,
and limit headache.
>
>> are provided to match with params versions. On the other side, ENABLE and
>> DISABLE flags are not really meaningfull for statistics purpose. So VALID
>> and INVALID flags are introduced. Purpose is to force ISP driver to
>> validate a statistics buffer, before it is consumed by userspace.
>
> Interesting. What do you mean with "validate a statistics buffer" ?
> And if a driver has to do validation, why would it send upstream a
> non-validated buffer ?
Like for version, I wanted to keep same header structure, including
flags. Since ENABLE/DISABLE is not relevant for statistics, I thought
about using a "validation" flag, to force driver confirming statistics
blocks are valid or not.
If you feel it is useless, I'm fine with removing it. Should I keep a
flag field anyway to stay aligned with params then ?
>
>>
>> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
>> ---
>> include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
>> 1 file changed, 85 insertions(+)
>>
>> diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
>> index 779168f9058e..ed1279b86694 100644
>> --- a/include/uapi/linux/media/v4l2-isp.h
>> +++ b/include/uapi/linux/media/v4l2-isp.h
>> @@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
>> __u8 data[] __counted_by(data_size);
>> };
>>
>> +/**
>> + * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
>> + *
>> + * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
>> + * (for compatibility)
>> + * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
>> + *
>> + * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
>> + * both V0 and V1 refers to the first version of the V4L2 ISP statistics
>> + * format.
>> + *
>> + * Future revisions of the V4L2 ISP statistics format should start from the
>> + * value of 2.
>> + */
>> +enum v4l2_isp_stats_version {
>> + V4L2_ISP_STATS_VERSION_V0 = 0,
>> + V4L2_ISP_STATS_VERSION_V1,
>
> As suggested I would make V1 == 0
>
>> +};
>> +
>> +#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
>> +#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
>> +
>> +/*
>> + * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
>> + *
>> + * Driver-specific flags should be defined as:
>> + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
>> + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
>> + */
>> +#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
>
> Currently we have no users of V4L2_ISP_PARAMS_FL_DRIVER_FLAGS so we
> could even consider making it a V4L2_ISP_FL_DRIVER_FLAGS
>
> Or do you think it is worth creating a new symbol ?
To limit impact on potential on-going development, and future conflict,
creating new symbol may be safer IMO. But I'm fine with using a single
symbol if you prefer. Most probably this flag customization is not used
yet by any driver.
>
>> +
>> +/**
>> + * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
>> + * @type: The statistics block type (driver-specific)
>> + * @flags: A bitmask of block flags (driver-specific)
>> + * @size: Size (in bytes) of the statistics block, including this header
>> + *
>> + * This structure represents the common part of all the ISP statistics blocks.
>> + * Each statistics block shall embed an instance of this structure type as its
>> + * first member, followed by the block-specific statistics data.
>> + *
>> + * The @type field is an ISP driver-specific value that identifies the block
>> + * type. The @size field specifies the size of the parameters block.
>> + *
>> + * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
>> + * driver-specific flags specified by the driver header.
>> + */
>> +struct v4l2_isp_stats_block_header {
>> + __u16 type;
>> + __u16 flags;
>> + __u32 size;
>> +} __attribute__((aligned(8)));
>> +
>
> This is currently identical to v4l2_isp_params_block_header.
>
> Can we create a single header for both stats and params and provide a
>
> #define v4l2_isp_params_block_header v4l2_isp_block_header
>
> for maintaining compatibility with existing users ?
>
> Or do you expect stats and params to eventually need different headers ?
>
Current approach is to use same structure definitions as for params. So
I'm fine with creating a single header as suggested, and provide symbols
to keep compatibility.
>> +/**
>> + * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
>> + * @version: The statistics buffer version (driver-specific)
>> + * @data_size: The statistics data effective size, excluding this header
>> + * @data: The statistics data
>> + *
>> + * This structure contains the statistics information of the ISP hardware,
>> + * serialized for userspace into a data buffer. Each statistics block is
>> + * represented by a block-specific structure which contains a
>> + * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
>> + * populates the @data buffer with statistics information of the ISP blocks it
>> + * intends to share to userspace. As a consequence, the data buffer effective
>> + * size changes according to the number of ISP blocks that driver intends to
>> + * provide and is set by the driver in the @data_size field.
>> + *
>> + * The statistics buffer is versioned by the @version field to allow modifying
>> + * and extending its definition. Driver shall populate the @version field to
>> + * inform the userpsace about the version it intends to use. The userspace will
>> + * parse and handle the @data buffer according to the data layout specific to
>> + * the indicated version.
>> + *
>> + * For each ISP block that driver wants to report, a block-specific structure
>> + * is appended to the @data buffer, one after the other without gaps in
>> + * between. Driver shall populate the @data_size field with the effective
>> + * size, in bytes, of the @data buffer.
>> + */
>> +struct v4l2_isp_stats_buffer {
>> + __u32 version;
>> + __u32 data_size;
>> + __u8 data[] __counted_by(data_size);
>> +};
>> +
>
> Same question. Should we introduce a struct v4l2_isp_buffer ?
Yes, sounds reasonable.
BR
Antoine
>
> Thanks!
>
>> #endif /* _UAPI_V4L2_ISP_H_ */
>> --
>> 2.52.0
>>
>>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-02-04 11:07 ` Antoine Bouyer
@ 2026-02-04 13:14 ` Jacopo Mondi
2026-02-09 23:00 ` Laurent Pinchart
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-04 13:14 UTC (permalink / raw)
To: Antoine Bouyer
Cc: Jacopo Mondi, julien.vuillaumier, alexi.birlinger, daniel.baluta,
peng.fan, frank.li, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
Hi Antoine
On Wed, Feb 04, 2026 at 12:07:41PM +0100, Antoine Bouyer wrote:
> Hi Jacopo
>
> On 2/3/26 5:15 PM, Jacopo Mondi wrote:
> >
> >
> > Hi Antoine
> > thanks a lot for extendable stats
> >
> > On Fri, Jan 23, 2026 at 09:09:28AM +0100, Antoine Bouyer wrote:
> > > Extend the v4l2-isp extensible format introduced for isp parameters buffer
> > > to the statistics buffer as well.
> > >
> > > Like for ISP configuration purpose, that will help supporting various ISP
> > > hardware versions reporting different statistics data with less impact on
> > > userspace.
> > >
> > > The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
> > > definitions, with similar header, versions and flags. V0 and V1 versions
> >
> > Why do you need two flags ?
> >
> > Params had to introduce two because we had two drivers already
> > mainlined using the pre-v4l2-isp version of extensible params which
> > had defined their version identifier as 1 and 0 and we didn't want to
> > break existing userspace using those identifiers. So we had to accept
> > both V0 and V1 as "first version of the v4l2-isp extensible parameters
> > format".
> >
> > For stats we don't have users, so I guess we can start with V1 == 0 ?
>
> I wanted to keep it aligned with params, so that any driver/userspace can
> use the same API version value for both params and stats buffers, and limit
> headache.
>
> >
> > > are provided to match with params versions. On the other side, ENABLE and
> > > DISABLE flags are not really meaningfull for statistics purpose. So VALID
> > > and INVALID flags are introduced. Purpose is to force ISP driver to
> > > validate a statistics buffer, before it is consumed by userspace.
> >
> > Interesting. What do you mean with "validate a statistics buffer" ?
> > And if a driver has to do validation, why would it send upstream a
> > non-validated buffer ?
>
> Like for version, I wanted to keep same header structure, including flags.
> Since ENABLE/DISABLE is not relevant for statistics, I thought about using a
> "validation" flag, to force driver confirming statistics blocks are valid or
> not.
See the question on the documentation patches.
>
> If you feel it is useless, I'm fine with removing it. Should I keep a flag
> field anyway to stay aligned with params then ?
>
RkISP1 has support for both "legacy" and "extensible" formats because
it has been mainline for a long time with the legacy format only. We
couldn't simply replace the existing format with the new one because
we would break existing users.
All the other drivers that have been upstreamed with extensible only
(Amlogic C3 and Mali C55) do not expose a legacy format as there was
not prior version in mainline on which userspace might depend on.
Unless you have very convincing reason, I would certainly drop the
legacy format and only use extensible.
Thanks
j
> >
> > >
> > > Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> > > ---
> > > include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
> > > 1 file changed, 85 insertions(+)
> > >
> > > diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
> > > index 779168f9058e..ed1279b86694 100644
> > > --- a/include/uapi/linux/media/v4l2-isp.h
> > > +++ b/include/uapi/linux/media/v4l2-isp.h
> > > @@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
> > > __u8 data[] __counted_by(data_size);
> > > };
> > >
> > > +/**
> > > + * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
> > > + *
> > > + * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
> > > + * (for compatibility)
> > > + * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
> > > + *
> > > + * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
> > > + * both V0 and V1 refers to the first version of the V4L2 ISP statistics
> > > + * format.
> > > + *
> > > + * Future revisions of the V4L2 ISP statistics format should start from the
> > > + * value of 2.
> > > + */
> > > +enum v4l2_isp_stats_version {
> > > + V4L2_ISP_STATS_VERSION_V0 = 0,
> > > + V4L2_ISP_STATS_VERSION_V1,
> >
> > As suggested I would make V1 == 0
> >
> > > +};
> > > +
> > > +#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
> > > +#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
> > > +
> > > +/*
> > > + * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
> > > + *
> > > + * Driver-specific flags should be defined as:
> > > + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
> > > + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
> > > + */
> > > +#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
> >
> > Currently we have no users of V4L2_ISP_PARAMS_FL_DRIVER_FLAGS so we
> > could even consider making it a V4L2_ISP_FL_DRIVER_FLAGS
> >
> > Or do you think it is worth creating a new symbol ?
>
> To limit impact on potential on-going development, and future conflict,
> creating new symbol may be safer IMO. But I'm fine with using a single
> symbol if you prefer. Most probably this flag customization is not used yet
> by any driver.
>
> >
> > > +
> > > +/**
> > > + * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
> > > + * @type: The statistics block type (driver-specific)
> > > + * @flags: A bitmask of block flags (driver-specific)
> > > + * @size: Size (in bytes) of the statistics block, including this header
> > > + *
> > > + * This structure represents the common part of all the ISP statistics blocks.
> > > + * Each statistics block shall embed an instance of this structure type as its
> > > + * first member, followed by the block-specific statistics data.
> > > + *
> > > + * The @type field is an ISP driver-specific value that identifies the block
> > > + * type. The @size field specifies the size of the parameters block.
> > > + *
> > > + * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
> > > + * driver-specific flags specified by the driver header.
> > > + */
> > > +struct v4l2_isp_stats_block_header {
> > > + __u16 type;
> > > + __u16 flags;
> > > + __u32 size;
> > > +} __attribute__((aligned(8)));
> > > +
> >
> > This is currently identical to v4l2_isp_params_block_header.
> >
> > Can we create a single header for both stats and params and provide a
> >
> > #define v4l2_isp_params_block_header v4l2_isp_block_header
> >
> > for maintaining compatibility with existing users ?
> >
> > Or do you expect stats and params to eventually need different headers ?
> >
>
> Current approach is to use same structure definitions as for params. So I'm
> fine with creating a single header as suggested, and provide symbols to keep
> compatibility.
>
> > > +/**
> > > + * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
> > > + * @version: The statistics buffer version (driver-specific)
> > > + * @data_size: The statistics data effective size, excluding this header
> > > + * @data: The statistics data
> > > + *
> > > + * This structure contains the statistics information of the ISP hardware,
> > > + * serialized for userspace into a data buffer. Each statistics block is
> > > + * represented by a block-specific structure which contains a
> > > + * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
> > > + * populates the @data buffer with statistics information of the ISP blocks it
> > > + * intends to share to userspace. As a consequence, the data buffer effective
> > > + * size changes according to the number of ISP blocks that driver intends to
> > > + * provide and is set by the driver in the @data_size field.
> > > + *
> > > + * The statistics buffer is versioned by the @version field to allow modifying
> > > + * and extending its definition. Driver shall populate the @version field to
> > > + * inform the userpsace about the version it intends to use. The userspace will
> > > + * parse and handle the @data buffer according to the data layout specific to
> > > + * the indicated version.
> > > + *
> > > + * For each ISP block that driver wants to report, a block-specific structure
> > > + * is appended to the @data buffer, one after the other without gaps in
> > > + * between. Driver shall populate the @data_size field with the effective
> > > + * size, in bytes, of the @data buffer.
> > > + */
> > > +struct v4l2_isp_stats_buffer {
> > > + __u32 version;
> > > + __u32 data_size;
> > > + __u8 data[] __counted_by(data_size);
> > > +};
> > > +
> >
> > Same question. Should we introduce a struct v4l2_isp_buffer ?
>
> Yes, sounds reasonable.
>
> BR
> Antoine
>
> >
> > Thanks!
> >
> > > #endif /* _UAPI_V4L2_ISP_H_ */
> > > --
> > > 2.52.0
> > >
> > >
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-02-04 13:14 ` Jacopo Mondi
@ 2026-02-09 23:00 ` Laurent Pinchart
2026-03-02 9:41 ` Antoine Bouyer
0 siblings, 1 reply; 49+ messages in thread
From: Laurent Pinchart @ 2026-02-09 23:00 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
On Wed, Feb 04, 2026 at 02:14:50PM +0100, Jacopo Mondi wrote:
> On Wed, Feb 04, 2026 at 12:07:41PM +0100, Antoine Bouyer wrote:
> > On 2/3/26 5:15 PM, Jacopo Mondi wrote:
> > > On Fri, Jan 23, 2026 at 09:09:28AM +0100, Antoine Bouyer wrote:
> > > > Extend the v4l2-isp extensible format introduced for isp parameters buffer
> > > > to the statistics buffer as well.
> > > >
> > > > Like for ISP configuration purpose, that will help supporting various ISP
> > > > hardware versions reporting different statistics data with less impact on
> > > > userspace.
> > > >
> > > > The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
> > > > definitions, with similar header, versions and flags. V0 and V1 versions
> > >
> > > Why do you need two flags ?
> > >
> > > Params had to introduce two because we had two drivers already
> > > mainlined using the pre-v4l2-isp version of extensible params which
> > > had defined their version identifier as 1 and 0 and we didn't want to
> > > break existing userspace using those identifiers. So we had to accept
> > > both V0 and V1 as "first version of the v4l2-isp extensible parameters
> > > format".
> > >
> > > For stats we don't have users, so I guess we can start with V1 == 0 ?
> >
> > I wanted to keep it aligned with params, so that any driver/userspace can
> > use the same API version value for both params and stats buffers, and limit
> > headache.
> >
> > > > are provided to match with params versions. On the other side, ENABLE and
> > > > DISABLE flags are not really meaningfull for statistics purpose. So VALID
> > > > and INVALID flags are introduced. Purpose is to force ISP driver to
> > > > validate a statistics buffer, before it is consumed by userspace.
> > >
> > > Interesting. What do you mean with "validate a statistics buffer" ?
> > > And if a driver has to do validation, why would it send upstream a
> > > non-validated buffer ?
> >
> > Like for version, I wanted to keep same header structure, including flags.
> > Since ENABLE/DISABLE is not relevant for statistics, I thought about using a
> > "validation" flag, to force driver confirming statistics blocks are valid or
> > not.
>
> See the question on the documentation patches.
>
> > If you feel it is useless, I'm fine with removing it. Should I keep a flag
> > field anyway to stay aligned with params then ?
>
> RkISP1 has support for both "legacy" and "extensible" formats because
> it has been mainline for a long time with the legacy format only. We
> couldn't simply replace the existing format with the new one because
> we would break existing users.
>
> All the other drivers that have been upstreamed with extensible only
> (Amlogic C3 and Mali C55) do not expose a legacy format as there was
> not prior version in mainline on which userspace might depend on.
>
> Unless you have very convincing reason, I would certainly drop the
> legacy format and only use extensible.
I agree with that, for upstream we shouldn't carry legacy formats in new
drivers. I've read elsewhere in this thread that it won't cause issues,
otherwise I would have recommended carrying an extra patch in the BSP
kernel to implement legacy formats, and only use extensible formats
upstream.
> > > > Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> > > > ---
> > > > include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
> > > > 1 file changed, 85 insertions(+)
> > > >
> > > > diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
> > > > index 779168f9058e..ed1279b86694 100644
> > > > --- a/include/uapi/linux/media/v4l2-isp.h
> > > > +++ b/include/uapi/linux/media/v4l2-isp.h
> > > > @@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
> > > > __u8 data[] __counted_by(data_size);
> > > > };
> > > >
> > > > +/**
> > > > + * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
> > > > + *
> > > > + * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
> > > > + * (for compatibility)
> > > > + * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
> > > > + *
> > > > + * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
> > > > + * both V0 and V1 refers to the first version of the V4L2 ISP statistics
> > > > + * format.
> > > > + *
> > > > + * Future revisions of the V4L2 ISP statistics format should start from the
> > > > + * value of 2.
> > > > + */
> > > > +enum v4l2_isp_stats_version {
> > > > + V4L2_ISP_STATS_VERSION_V0 = 0,
> > > > + V4L2_ISP_STATS_VERSION_V1,
> > >
> > > As suggested I would make V1 == 0
> > >
> > > > +};
> > > > +
> > > > +#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
> > > > +#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
> > > > +
> > > > +/*
> > > > + * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
> > > > + *
> > > > + * Driver-specific flags should be defined as:
> > > > + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
> > > > + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
> > > > + */
> > > > +#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
> > >
> > > Currently we have no users of V4L2_ISP_PARAMS_FL_DRIVER_FLAGS so we
> > > could even consider making it a V4L2_ISP_FL_DRIVER_FLAGS
> > >
> > > Or do you think it is worth creating a new symbol ?
> >
> > To limit impact on potential on-going development, and future conflict,
> > creating new symbol may be safer IMO. But I'm fine with using a single
> > symbol if you prefer. Most probably this flag customization is not used yet
> > by any driver.
> >
> > > > +
> > > > +/**
> > > > + * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
> > > > + * @type: The statistics block type (driver-specific)
> > > > + * @flags: A bitmask of block flags (driver-specific)
> > > > + * @size: Size (in bytes) of the statistics block, including this header
> > > > + *
> > > > + * This structure represents the common part of all the ISP statistics blocks.
> > > > + * Each statistics block shall embed an instance of this structure type as its
> > > > + * first member, followed by the block-specific statistics data.
> > > > + *
> > > > + * The @type field is an ISP driver-specific value that identifies the block
> > > > + * type. The @size field specifies the size of the parameters block.
> > > > + *
> > > > + * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
> > > > + * driver-specific flags specified by the driver header.
> > > > + */
> > > > +struct v4l2_isp_stats_block_header {
> > > > + __u16 type;
> > > > + __u16 flags;
> > > > + __u32 size;
> > > > +} __attribute__((aligned(8)));
> > > > +
> > >
> > > This is currently identical to v4l2_isp_params_block_header.
> > >
> > > Can we create a single header for both stats and params and provide a
> > >
> > > #define v4l2_isp_params_block_header v4l2_isp_block_header
> > >
> > > for maintaining compatibility with existing users ?
> > >
> > > Or do you expect stats and params to eventually need different headers ?
> >
> > Current approach is to use same structure definitions as for params. So I'm
> > fine with creating a single header as suggested, and provide symbols to keep
> > compatibility.
> >
> > > > +/**
> > > > + * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
> > > > + * @version: The statistics buffer version (driver-specific)
> > > > + * @data_size: The statistics data effective size, excluding this header
> > > > + * @data: The statistics data
> > > > + *
> > > > + * This structure contains the statistics information of the ISP hardware,
> > > > + * serialized for userspace into a data buffer. Each statistics block is
> > > > + * represented by a block-specific structure which contains a
> > > > + * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
> > > > + * populates the @data buffer with statistics information of the ISP blocks it
> > > > + * intends to share to userspace. As a consequence, the data buffer effective
> > > > + * size changes according to the number of ISP blocks that driver intends to
> > > > + * provide and is set by the driver in the @data_size field.
> > > > + *
> > > > + * The statistics buffer is versioned by the @version field to allow modifying
> > > > + * and extending its definition. Driver shall populate the @version field to
> > > > + * inform the userpsace about the version it intends to use. The userspace will
> > > > + * parse and handle the @data buffer according to the data layout specific to
> > > > + * the indicated version.
> > > > + *
> > > > + * For each ISP block that driver wants to report, a block-specific structure
> > > > + * is appended to the @data buffer, one after the other without gaps in
> > > > + * between. Driver shall populate the @data_size field with the effective
> > > > + * size, in bytes, of the @data buffer.
> > > > + */
> > > > +struct v4l2_isp_stats_buffer {
> > > > + __u32 version;
> > > > + __u32 data_size;
> > > > + __u8 data[] __counted_by(data_size);
> > > > +};
> > > > +
> > >
> > > Same question. Should we introduce a struct v4l2_isp_buffer ?
> >
> > Yes, sounds reasonable.
That seems to make sense. Once we'll have a driver using
v4l2_isp_stats_buffer the structure will become ABI. If it then is an
exact copy of v4l2_isp_params_buffer, it would make sense to unify them.
Let's see what will happen after a few review rounds, if we end up
requiring separate fields in the stats buffer header.
It would also be nice to implement support for extensible stats in a
second driver to test the API.
> > > > #endif /* _UAPI_V4L2_ISP_H_ */
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: Re: [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-02-09 23:00 ` Laurent Pinchart
@ 2026-03-02 9:41 ` Antoine Bouyer
2026-03-03 8:48 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-03-02 9:41 UTC (permalink / raw)
To: Laurent Pinchart, Jacopo Mondi
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer,
kernel, festevam, linux-kernel, linux-media, devicetree,
linux-arm-kernel
Hi Laurent, Jacopo
On 2/10/26 12:00 AM, Laurent Pinchart wrote:
>
>
> On Wed, Feb 04, 2026 at 02:14:50PM +0100, Jacopo Mondi wrote:
>> On Wed, Feb 04, 2026 at 12:07:41PM +0100, Antoine Bouyer wrote:
>>> On 2/3/26 5:15 PM, Jacopo Mondi wrote:
>>>> On Fri, Jan 23, 2026 at 09:09:28AM +0100, Antoine Bouyer wrote:
>>>>> Extend the v4l2-isp extensible format introduced for isp parameters buffer
>>>>> to the statistics buffer as well.
>>>>>
>>>>> Like for ISP configuration purpose, that will help supporting various ISP
>>>>> hardware versions reporting different statistics data with less impact on
>>>>> userspace.
>>>>>
>>>>> The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
>>>>> definitions, with similar header, versions and flags. V0 and V1 versions
>>>>
>>>> Why do you need two flags ?
>>>>
>>>> Params had to introduce two because we had two drivers already
>>>> mainlined using the pre-v4l2-isp version of extensible params which
>>>> had defined their version identifier as 1 and 0 and we didn't want to
>>>> break existing userspace using those identifiers. So we had to accept
>>>> both V0 and V1 as "first version of the v4l2-isp extensible parameters
>>>> format".
>>>>
>>>> For stats we don't have users, so I guess we can start with V1 == 0 ?
>>>
>>> I wanted to keep it aligned with params, so that any driver/userspace can
>>> use the same API version value for both params and stats buffers, and limit
>>> headache.
Seems this topic is not yet clarified. Should I use same version values
for both params and stats as in current patch ? Or use different values
V1 == 0 as suggested ?
From userspace perspective, I feel it would be easier to align params
and stats versions, so we don't need to maintain different versions for
same purpose; and if a new version V2 comes and is applied to both
params and stats buffers, then we can use same value too. What do you
think ?
>>>
>>>>> are provided to match with params versions. On the other side, ENABLE and
>>>>> DISABLE flags are not really meaningfull for statistics purpose. So VALID
>>>>> and INVALID flags are introduced. Purpose is to force ISP driver to
>>>>> validate a statistics buffer, before it is consumed by userspace.
>>>>
>>>> Interesting. What do you mean with "validate a statistics buffer" ?
>>>> And if a driver has to do validation, why would it send upstream a
>>>> non-validated buffer ?
>>>
>>> Like for version, I wanted to keep same header structure, including flags.
>>> Since ENABLE/DISABLE is not relevant for statistics, I thought about using a
>>> "validation" flag, to force driver confirming statistics blocks are valid or
>>> not.
>>
>> See the question on the documentation patches.
>>
>>> If you feel it is useless, I'm fine with removing it. Should I keep a flag
>>> field anyway to stay aligned with params then ?
>>
>> RkISP1 has support for both "legacy" and "extensible" formats because
>> it has been mainline for a long time with the legacy format only. We
>> couldn't simply replace the existing format with the new one because
>> we would break existing users.
>>
>> All the other drivers that have been upstreamed with extensible only
>> (Amlogic C3 and Mali C55) do not expose a legacy format as there was
>> not prior version in mainline on which userspace might depend on.
>>
>> Unless you have very convincing reason, I would certainly drop the
>> legacy format and only use extensible.
>
> I agree with that, for upstream we shouldn't carry legacy formats in new
> drivers. I've read elsewhere in this thread that it won't cause issues,
> otherwise I would have recommended carrying an extra patch in the BSP
> kernel to implement legacy formats, and only use extensible formats
> upstream.
ok. I'm fine with removing legacy format from neo driver, and keep it
only in downstream for some time.
>
>>>>> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
>>>>> ---
>>>>> include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
>>>>> 1 file changed, 85 insertions(+)
>>>>>
>>>>> diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
>>>>> index 779168f9058e..ed1279b86694 100644
>>>>> --- a/include/uapi/linux/media/v4l2-isp.h
>>>>> +++ b/include/uapi/linux/media/v4l2-isp.h
>>>>> @@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
>>>>> __u8 data[] __counted_by(data_size);
>>>>> };
>>>>>
>>>>> +/**
>>>>> + * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
>>>>> + *
>>>>> + * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
>>>>> + * (for compatibility)
>>>>> + * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
>>>>> + *
>>>>> + * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
>>>>> + * both V0 and V1 refers to the first version of the V4L2 ISP statistics
>>>>> + * format.
>>>>> + *
>>>>> + * Future revisions of the V4L2 ISP statistics format should start from the
>>>>> + * value of 2.
>>>>> + */
>>>>> +enum v4l2_isp_stats_version {
>>>>> + V4L2_ISP_STATS_VERSION_V0 = 0,
>>>>> + V4L2_ISP_STATS_VERSION_V1,
>>>>
>>>> As suggested I would make V1 == 0
>>>>
>>>>> +};
>>>>> +
>>>>> +#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
>>>>> +#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
>>>>> +
>>>>> +/*
>>>>> + * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
>>>>> + *
>>>>> + * Driver-specific flags should be defined as:
>>>>> + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
>>>>> + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
>>>>> + */
>>>>> +#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
>>>>
>>>> Currently we have no users of V4L2_ISP_PARAMS_FL_DRIVER_FLAGS so we
>>>> could even consider making it a V4L2_ISP_FL_DRIVER_FLAGS
>>>>
>>>> Or do you think it is worth creating a new symbol ?
>>>
>>> To limit impact on potential on-going development, and future conflict,
>>> creating new symbol may be safer IMO. But I'm fine with using a single
>>> symbol if you prefer. Most probably this flag customization is not used yet
>>> by any driver.
>>>
>>>>> +
>>>>> +/**
>>>>> + * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
>>>>> + * @type: The statistics block type (driver-specific)
>>>>> + * @flags: A bitmask of block flags (driver-specific)
>>>>> + * @size: Size (in bytes) of the statistics block, including this header
>>>>> + *
>>>>> + * This structure represents the common part of all the ISP statistics blocks.
>>>>> + * Each statistics block shall embed an instance of this structure type as its
>>>>> + * first member, followed by the block-specific statistics data.
>>>>> + *
>>>>> + * The @type field is an ISP driver-specific value that identifies the block
>>>>> + * type. The @size field specifies the size of the parameters block.
>>>>> + *
>>>>> + * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
>>>>> + * driver-specific flags specified by the driver header.
>>>>> + */
>>>>> +struct v4l2_isp_stats_block_header {
>>>>> + __u16 type;
>>>>> + __u16 flags;
>>>>> + __u32 size;
>>>>> +} __attribute__((aligned(8)));
>>>>> +
>>>>
>>>> This is currently identical to v4l2_isp_params_block_header.
>>>>
>>>> Can we create a single header for both stats and params and provide a
>>>>
>>>> #define v4l2_isp_params_block_header v4l2_isp_block_header
>>>>
>>>> for maintaining compatibility with existing users ?
>>>>
>>>> Or do you expect stats and params to eventually need different headers ?
>>>
>>> Current approach is to use same structure definitions as for params. So I'm
>>> fine with creating a single header as suggested, and provide symbols to keep
>>> compatibility.
>>>
>>>>> +/**
>>>>> + * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
>>>>> + * @version: The statistics buffer version (driver-specific)
>>>>> + * @data_size: The statistics data effective size, excluding this header
>>>>> + * @data: The statistics data
>>>>> + *
>>>>> + * This structure contains the statistics information of the ISP hardware,
>>>>> + * serialized for userspace into a data buffer. Each statistics block is
>>>>> + * represented by a block-specific structure which contains a
>>>>> + * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
>>>>> + * populates the @data buffer with statistics information of the ISP blocks it
>>>>> + * intends to share to userspace. As a consequence, the data buffer effective
>>>>> + * size changes according to the number of ISP blocks that driver intends to
>>>>> + * provide and is set by the driver in the @data_size field.
>>>>> + *
>>>>> + * The statistics buffer is versioned by the @version field to allow modifying
>>>>> + * and extending its definition. Driver shall populate the @version field to
>>>>> + * inform the userpsace about the version it intends to use. The userspace will
>>>>> + * parse and handle the @data buffer according to the data layout specific to
>>>>> + * the indicated version.
>>>>> + *
>>>>> + * For each ISP block that driver wants to report, a block-specific structure
>>>>> + * is appended to the @data buffer, one after the other without gaps in
>>>>> + * between. Driver shall populate the @data_size field with the effective
>>>>> + * size, in bytes, of the @data buffer.
>>>>> + */
>>>>> +struct v4l2_isp_stats_buffer {
>>>>> + __u32 version;
>>>>> + __u32 data_size;
>>>>> + __u8 data[] __counted_by(data_size);
>>>>> +};
>>>>> +
>>>>
>>>> Same question. Should we introduce a struct v4l2_isp_buffer ?
>>>
>>> Yes, sounds reasonable.
>
> That seems to make sense. Once we'll have a driver using
> v4l2_isp_stats_buffer the structure will become ABI. If it then is an
> exact copy of v4l2_isp_params_buffer, it would make sense to unify them.
> Let's see what will happen after a few review rounds, if we end up
> requiring separate fields in the stats buffer header.
ok to use same struct for both.
>
> It would also be nice to implement support for extensible stats in a
> second driver to test the API.
What is your preferred approach then ?
Should I "split" v4l2_isp rework in different patchset BUT with another
driver using it (with userspace changes I guess). Not something I'm
really comfortable with since I only focused on i.MX95 isp so far. But
if this is the only way, that could be evaluated.
Or should I "keep" v4l2_isp changes together with neoisp introduction ?
Thanks
Best regards
Antoine
>
>>>>> #endif /* _UAPI_V4L2_ISP_H_ */
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
2026-03-02 9:41 ` Antoine Bouyer
@ 2026-03-03 8:48 ` Jacopo Mondi
0 siblings, 0 replies; 49+ messages in thread
From: Jacopo Mondi @ 2026-03-03 8:48 UTC (permalink / raw)
To: Antoine Bouyer
Cc: Laurent Pinchart, Jacopo Mondi, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li, mchehab, robh,
krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel
Hello Antoine
On Mon, Mar 02, 2026 at 10:41:10AM +0100, Antoine Bouyer wrote:
> Hi Laurent, Jacopo
>
> On 2/10/26 12:00 AM, Laurent Pinchart wrote:
> >
> >
> > On Wed, Feb 04, 2026 at 02:14:50PM +0100, Jacopo Mondi wrote:
> > > On Wed, Feb 04, 2026 at 12:07:41PM +0100, Antoine Bouyer wrote:
> > > > On 2/3/26 5:15 PM, Jacopo Mondi wrote:
> > > > > On Fri, Jan 23, 2026 at 09:09:28AM +0100, Antoine Bouyer wrote:
> > > > > > Extend the v4l2-isp extensible format introduced for isp parameters buffer
> > > > > > to the statistics buffer as well.
> > > > > >
> > > > > > Like for ISP configuration purpose, that will help supporting various ISP
> > > > > > hardware versions reporting different statistics data with less impact on
> > > > > > userspace.
> > > > > >
> > > > > > The `v4l2_isp_stats_buffer` reuses the `v4l2_isp_params_buffer` container
> > > > > > definitions, with similar header, versions and flags. V0 and V1 versions
> > > > >
> > > > > Why do you need two flags ?
> > > > >
> > > > > Params had to introduce two because we had two drivers already
> > > > > mainlined using the pre-v4l2-isp version of extensible params which
> > > > > had defined their version identifier as 1 and 0 and we didn't want to
> > > > > break existing userspace using those identifiers. So we had to accept
> > > > > both V0 and V1 as "first version of the v4l2-isp extensible parameters
> > > > > format".
> > > > >
> > > > > For stats we don't have users, so I guess we can start with V1 == 0 ?
> > > >
> > > > I wanted to keep it aligned with params, so that any driver/userspace can
> > > > use the same API version value for both params and stats buffers, and limit
> > > > headache.
>
> Seems this topic is not yet clarified. Should I use same version values for
> both params and stats as in current patch ? Or use different values V1 == 0
> as suggested ?
>
> From userspace perspective, I feel it would be easier to align params and
> stats versions, so we don't need to maintain different versions for same
> purpose; and if a new version V2 comes and is applied to both params and
> stats buffers, then we can use same value too. What do you think ?
As the versioning is meant to identify the serialization format which
is the same for params and stats, ideally we should have the same
identifier both both.
However we can't simply remove enum v4l2_isp_version, to avoid
breaking userspace. What about
--- a/include/uapi/linux/media/v4l2-isp.h
+++ b/include/uapi/linux/media/v4l2-isp.h
@@ -13,25 +13,33 @@
#include <linux/types.h>
/**
- * enum v4l2_isp_params_version - V4L2 ISP parameters versioning
+ * enum v4l2_isp_version - V4L2 ISP serialization format versioning
*
- * @V4L2_ISP_PARAMS_VERSION_V0: First version of the V4L2 ISP parameters format
- * (for compatibility)
- * @V4L2_ISP_PARAMS_VERSION_V1: First version of the V4L2 ISP parameters format
+ * @V4L2_ISP_VERSION_V0: First version of the V4L2 ISP serialization format
+ * (for compatibility)
+ * @V4L2_ISP_VERSION_V1: First version of the V4L2 ISP serialization format
*
* V0 and V1 are identical in order to support drivers compatible with the V4L2
- * ISP parameters format already upstreamed which use either 0 or 1 as their
- * versioning identifier. Both V0 and V1 refers to the first version of the
- * V4L2 ISP parameters format.
+ * ISP format already upstreamed which use either 0 or 1 as their versioning
+ * identifier. Both V0 and V1 refers to the first version of the V4L2 ISP
+ * serialization format.
*
- * Future revisions of the V4L2 ISP parameters format should start from the
+ * Future revisions of the V4L2 ISP serialization format should start from the
* value of 2.
*/
-enum v4l2_isp_params_version {
- V4L2_ISP_PARAMS_VERSION_V0 = 0,
- V4L2_ISP_PARAMS_VERSION_V1
+enum v4l2_isp_version {
+ V4L2_ISP_VERSION_V0 = 0,
+ V4L2_ISP_VERSION_V1
};
+/*
+ * Compatibility with existing users of v4l2_isp_params which pre-date the
+ * introduction of v4l2_isp_stats.
+ */
+#define v4l2_isp_params_version v4l2_isp_version
+#define V4L2_ISP_PARAMS_VERSION_V0 V4L2_ISP_VERSION_V0
+#define V4L2_ISP_PARAMS_VERSION_V1 V4L2_ISP_VERSION_V1
+
#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0)
#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1)
> > > >
> > > > > > are provided to match with params versions. On the other side, ENABLE and
> > > > > > DISABLE flags are not really meaningfull for statistics purpose. So VALID
> > > > > > and INVALID flags are introduced. Purpose is to force ISP driver to
> > > > > > validate a statistics buffer, before it is consumed by userspace.
> > > > >
> > > > > Interesting. What do you mean with "validate a statistics buffer" ?
> > > > > And if a driver has to do validation, why would it send upstream a
> > > > > non-validated buffer ?
> > > >
> > > > Like for version, I wanted to keep same header structure, including flags.
> > > > Since ENABLE/DISABLE is not relevant for statistics, I thought about using a
> > > > "validation" flag, to force driver confirming statistics blocks are valid or
> > > > not.
> > >
> > > See the question on the documentation patches.
> > >
> > > > If you feel it is useless, I'm fine with removing it. Should I keep a flag
> > > > field anyway to stay aligned with params then ?
> > >
> > > RkISP1 has support for both "legacy" and "extensible" formats because
> > > it has been mainline for a long time with the legacy format only. We
> > > couldn't simply replace the existing format with the new one because
> > > we would break existing users.
> > >
> > > All the other drivers that have been upstreamed with extensible only
> > > (Amlogic C3 and Mali C55) do not expose a legacy format as there was
> > > not prior version in mainline on which userspace might depend on.
> > >
> > > Unless you have very convincing reason, I would certainly drop the
> > > legacy format and only use extensible.
> >
> > I agree with that, for upstream we shouldn't carry legacy formats in new
> > drivers. I've read elsewhere in this thread that it won't cause issues,
> > otherwise I would have recommended carrying an extra patch in the BSP
> > kernel to implement legacy formats, and only use extensible formats
> > upstream.
>
> ok. I'm fine with removing legacy format from neo driver, and keep it only
> in downstream for some time.
>
Thank you!
> >
> > > > > > Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> > > > > > ---
> > > > > > include/uapi/linux/media/v4l2-isp.h | 85 +++++++++++++++++++++++++++++
> > > > > > 1 file changed, 85 insertions(+)
> > > > > >
> > > > > > diff --git a/include/uapi/linux/media/v4l2-isp.h b/include/uapi/linux/media/v4l2-isp.h
> > > > > > index 779168f9058e..ed1279b86694 100644
> > > > > > --- a/include/uapi/linux/media/v4l2-isp.h
> > > > > > +++ b/include/uapi/linux/media/v4l2-isp.h
> > > > > > @@ -99,4 +99,89 @@ struct v4l2_isp_params_buffer {
> > > > > > __u8 data[] __counted_by(data_size);
> > > > > > };
> > > > > >
> > > > > > +/**
> > > > > > + * enum v4l2_isp_stats_version - V4L2 ISP statistics versioning
> > > > > > + *
> > > > > > + * @V4L2_ISP_STATS_VERSION_V0: First version of the V4L2 ISP statistics format
> > > > > > + * (for compatibility)
> > > > > > + * @V4L2_ISP_STATS_VERSION_V1: First version of the V4L2 ISP statistics format
> > > > > > + *
> > > > > > + * V0 and V1 are identical, and comply with V4l2 ISP parameters versions. So
> > > > > > + * both V0 and V1 refers to the first version of the V4L2 ISP statistics
> > > > > > + * format.
> > > > > > + *
> > > > > > + * Future revisions of the V4L2 ISP statistics format should start from the
> > > > > > + * value of 2.
> > > > > > + */
> > > > > > +enum v4l2_isp_stats_version {
> > > > > > + V4L2_ISP_STATS_VERSION_V0 = 0,
> > > > > > + V4L2_ISP_STATS_VERSION_V1,
> > > > >
> > > > > As suggested I would make V1 == 0
> > > > >
> > > > > > +};
> > > > > > +
> > > > > > +#define V4L2_ISP_PARAMS_FL_BLOCK_VALID (1U << 0)
> > > > > > +#define V4L2_ISP_PARAMS_FL_BLOCK_INVALID (1U << 1)
> > > > > > +
> > > > > > +/*
> > > > > > + * Reserve the first 8 bits for V4L2_ISP_STATS_FL_* flag.
> > > > > > + *
> > > > > > + * Driver-specific flags should be defined as:
> > > > > > + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(0))
> > > > > > + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_STATS_FL_DRIVER_FLAGS(1))
> > > > > > + */
> > > > > > +#define V4L2_ISP_STATS_FL_DRIVER_FLAGS(n) ((n) + 8)
> > > > >
> > > > > Currently we have no users of V4L2_ISP_PARAMS_FL_DRIVER_FLAGS so we
> > > > > could even consider making it a V4L2_ISP_FL_DRIVER_FLAGS
> > > > >
> > > > > Or do you think it is worth creating a new symbol ?
> > > >
> > > > To limit impact on potential on-going development, and future conflict,
> > > > creating new symbol may be safer IMO. But I'm fine with using a single
> > > > symbol if you prefer. Most probably this flag customization is not used yet
> > > > by any driver.
> > > >
> > > > > > +
> > > > > > +/**
> > > > > > + * struct v4l2_isp_stats_block_header - V4L2 extensible statistics block header
> > > > > > + * @type: The statistics block type (driver-specific)
> > > > > > + * @flags: A bitmask of block flags (driver-specific)
> > > > > > + * @size: Size (in bytes) of the statistics block, including this header
> > > > > > + *
> > > > > > + * This structure represents the common part of all the ISP statistics blocks.
> > > > > > + * Each statistics block shall embed an instance of this structure type as its
> > > > > > + * first member, followed by the block-specific statistics data.
> > > > > > + *
> > > > > > + * The @type field is an ISP driver-specific value that identifies the block
> > > > > > + * type. The @size field specifies the size of the parameters block.
> > > > > > + *
> > > > > > + * The @flags field is a bitmask of per-block flags V4L2_STATS_ISP_FL_* and
> > > > > > + * driver-specific flags specified by the driver header.
> > > > > > + */
> > > > > > +struct v4l2_isp_stats_block_header {
> > > > > > + __u16 type;
> > > > > > + __u16 flags;
> > > > > > + __u32 size;
> > > > > > +} __attribute__((aligned(8)));
> > > > > > +
> > > > >
> > > > > This is currently identical to v4l2_isp_params_block_header.
> > > > >
> > > > > Can we create a single header for both stats and params and provide a
> > > > >
> > > > > #define v4l2_isp_params_block_header v4l2_isp_block_header
> > > > >
> > > > > for maintaining compatibility with existing users ?
> > > > >
> > > > > Or do you expect stats and params to eventually need different headers ?
> > > >
> > > > Current approach is to use same structure definitions as for params. So I'm
> > > > fine with creating a single header as suggested, and provide symbols to keep
> > > > compatibility.
> > > >
> > > > > > +/**
> > > > > > + * struct v4l2_isp_stats_buffer - V4L2 extensible statistics data
> > > > > > + * @version: The statistics buffer version (driver-specific)
> > > > > > + * @data_size: The statistics data effective size, excluding this header
> > > > > > + * @data: The statistics data
> > > > > > + *
> > > > > > + * This structure contains the statistics information of the ISP hardware,
> > > > > > + * serialized for userspace into a data buffer. Each statistics block is
> > > > > > + * represented by a block-specific structure which contains a
> > > > > > + * :c:type:`v4l2_isp_stats_block_header` entry as first member. Driver
> > > > > > + * populates the @data buffer with statistics information of the ISP blocks it
> > > > > > + * intends to share to userspace. As a consequence, the data buffer effective
> > > > > > + * size changes according to the number of ISP blocks that driver intends to
> > > > > > + * provide and is set by the driver in the @data_size field.
> > > > > > + *
> > > > > > + * The statistics buffer is versioned by the @version field to allow modifying
> > > > > > + * and extending its definition. Driver shall populate the @version field to
> > > > > > + * inform the userpsace about the version it intends to use. The userspace will
> > > > > > + * parse and handle the @data buffer according to the data layout specific to
> > > > > > + * the indicated version.
> > > > > > + *
> > > > > > + * For each ISP block that driver wants to report, a block-specific structure
> > > > > > + * is appended to the @data buffer, one after the other without gaps in
> > > > > > + * between. Driver shall populate the @data_size field with the effective
> > > > > > + * size, in bytes, of the @data buffer.
> > > > > > + */
> > > > > > +struct v4l2_isp_stats_buffer {
> > > > > > + __u32 version;
> > > > > > + __u32 data_size;
> > > > > > + __u8 data[] __counted_by(data_size);
> > > > > > +};
> > > > > > +
> > > > >
> > > > > Same question. Should we introduce a struct v4l2_isp_buffer ?
> > > >
> > > > Yes, sounds reasonable.
> >
> > That seems to make sense. Once we'll have a driver using
> > v4l2_isp_stats_buffer the structure will become ABI. If it then is an
> > exact copy of v4l2_isp_params_buffer, it would make sense to unify them.
> > Let's see what will happen after a few review rounds, if we end up
> > requiring separate fields in the stats buffer header.
>
> ok to use same struct for both.
>
> >
> > It would also be nice to implement support for extensible stats in a
> > second driver to test the API.
>
> What is your preferred approach then ?
>
> Should I "split" v4l2_isp rework in different patchset BUT with another
> driver using it (with userspace changes I guess). Not something I'm really
> comfortable with since I only focused on i.MX95 isp so far. But if this is
> the only way, that could be evaluated.
>
> Or should I "keep" v4l2_isp changes together with neoisp introduction ?
It depends what you expect the timing for the next version of neoisp
to be.
However, to introduce new uAPI it is generally suggested to have at
least one user, so if time aligns I would keep the two together.
Thanks
j
>
> Thanks
>
> Best regards
> Antoine
>
> >
> > > > > > #endif /* _UAPI_V4L2_ISP_H_ */
> >
> > --
> > Regards,
> >
> > Laurent Pinchart
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* [RFC v1 02/11] media: v4l2-isp: Add helper function to compute extended stats size
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats Antoine Bouyer
` (9 subsequent siblings)
11 siblings, 0 replies; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
v4l2-isp framework only supports extended buffer for generic ISP
configuration. This patch adds simple helper function to compute the
extended statistics buffer size, exactly the same as for extended
parameters, except that it uses the `v4l2_isp_stats_block_header`
structure definition to prevent conflict with the
`v4l2_isp_params_block_header` one.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
include/media/v4l2-isp.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/include/media/v4l2-isp.h b/include/media/v4l2-isp.h
index f3a6d0edcb24..d0a265162440 100644
--- a/include/media/v4l2-isp.h
+++ b/include/media/v4l2-isp.h
@@ -27,6 +27,19 @@ struct vb2_buffer;
#define v4l2_isp_params_buffer_size(max_params_size) \
(offsetof(struct v4l2_isp_params_buffer, data) + (max_params_size))
+/**
+ * v4l2_isp_stats_buffer_size - Calculate size of v4l2_isp_stats_buffer
+ * @max_stats_size: The total size of the ISP statistic blocks
+ *
+ * Users of the v4l2 extensible statistics will produce differing sized data
+ * arrays depending on their specific ISP blocks. Drivers and userspace will
+ * need to be able to calculate the appropriate size of the structure to
+ * accommodate all ISP statistics blocks provided by the driver.
+ * This macro provides a convenient tool for the calculation.
+ */
+#define v4l2_isp_stats_buffer_size(max_stats_size) \
+ (offsetof(struct v4l2_isp_stats_buffer, data) + (max_stats_size))
+
/**
* v4l2_isp_params_validate_buffer_size - Validate a V4L2 ISP buffer sizes
* @dev: the driver's device pointer
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 02/11] media: v4l2-isp: Add helper function to compute extended stats size Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-02-03 16:58 ` Jacopo Mondi
2026-01-23 8:09 ` [RFC v1 04/11] media: Documentation: Add NXP neoisp driver documentation Antoine Bouyer
` (8 subsequent siblings)
11 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Add driver documentation for V4L2 ISP generic statistics format, mainly
copied from the generic parameters one.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
.../userspace-api/media/v4l/v4l2-isp.rst | 42 +++++++++++++++++--
1 file changed, 39 insertions(+), 3 deletions(-)
diff --git a/Documentation/userspace-api/media/v4l/v4l2-isp.rst b/Documentation/userspace-api/media/v4l/v4l2-isp.rst
index facf6dba1ca7..9024c6998b2c 100644
--- a/Documentation/userspace-api/media/v4l/v4l2-isp.rst
+++ b/Documentation/userspace-api/media/v4l/v4l2-isp.rst
@@ -32,8 +32,8 @@ types.
Userspace applications are responsible for correctly populating each block's
header fields (type, flags and size) and the block-specific parameters.
-ISP block enabling, disabling and configuration
------------------------------------------------
+ISP parameters block enabling, disabling and configuration
+----------------------------------------------------------
When userspace wants to configure and enable an ISP block it shall fully
populate the block configuration and set the V4L2_ISP_PARAMS_FL_BLOCK_ENABLE
@@ -59,7 +59,43 @@ definition without invalidating the existing ones.
ISP statistics
==============
-Support for generic statistics format is not yet implemented in Video4Linux2.
+The generic ISP statistics format is similar to the generic ISP configuration
+parameters format. It is realized by defineing a C structure that contains a
+header, followed by binary buffer where the ISP driver copies a variable number
+of ISP statistics block.
+
+The :c:type:`v4l2_isp_stats_buffer` structure defines the buffer header which
+is followed by a binary buffer of ISP statistics data. ISP driver shall
+correctly populate the buffer header with the generic statistics format version
+and with the size (in bytes) of the binary data buffer where it will store the
+ISP statistics data.
+
+Each *ISP statistics block* is preceded by a header implemented by the
+:c:type:`v4l2_isp_stats_block_header` structure, followed by the statistics
+data for that specific block, defined by the ISP driver specific data types.
+
+Driver is responsible for correctly populating each block's header fields
+(type, flags and size) and the block-specific statistics data.
+
+ISP statistics block configuration
+----------------------------------
+
+When ISP driver wants to share statistics from an ISP block, it shall fully
+populate the block statistics and set the V4L2_ISP_STATS_FL_BLOCK_VALID
+bit in the block header's `flags` field.
+
+When ISP driver wants userspace to ignore statistics from an ISP block, it can
+simply omit the full block, or set the V4L2_ISP_STATS_FL_BLOCK_INVALID bit in
+the block headers's `flags` field. Then driver can omit the additional data
+after header, and set block header's `size` to the header structure's size only
+in such case.
+
+Setting both the V4L2_ISP_STATS_FL_BLOCK_VALID and
+V4L2_ISP_STATS_FL_BLOCK_INVALID bits in the flags field is not allowed and
+userspace shall not handle it.
+
+Extension to the statistics format can be implemented by adding new blocks
+definition without invalidating the existing ones.
V4L2 ISP uAPI data types
========================
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* Re: [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats
2026-01-23 8:09 ` [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats Antoine Bouyer
@ 2026-02-03 16:58 ` Jacopo Mondi
2026-02-09 23:16 ` Laurent Pinchart
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-03 16:58 UTC (permalink / raw)
To: Antoine Bouyer
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
Hi Antoine
On Fri, Jan 23, 2026 at 09:09:30AM +0100, Antoine Bouyer wrote:
> Add driver documentation for V4L2 ISP generic statistics format, mainly
> copied from the generic parameters one.
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +++++++++++++++++--
> 1 file changed, 39 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/userspace-api/media/v4l/v4l2-isp.rst b/Documentation/userspace-api/media/v4l/v4l2-isp.rst
> index facf6dba1ca7..9024c6998b2c 100644
> --- a/Documentation/userspace-api/media/v4l/v4l2-isp.rst
> +++ b/Documentation/userspace-api/media/v4l/v4l2-isp.rst
> @@ -32,8 +32,8 @@ types.
> Userspace applications are responsible for correctly populating each block's
> header fields (type, flags and size) and the block-specific parameters.
>
> -ISP block enabling, disabling and configuration
> ------------------------------------------------
> +ISP parameters block enabling, disabling and configuration
> +----------------------------------------------------------
>
> When userspace wants to configure and enable an ISP block it shall fully
> populate the block configuration and set the V4L2_ISP_PARAMS_FL_BLOCK_ENABLE
> @@ -59,7 +59,43 @@ definition without invalidating the existing ones.
> ISP statistics
> ==============
>
> -Support for generic statistics format is not yet implemented in Video4Linux2.
> +The generic ISP statistics format is similar to the generic ISP configuration
> +parameters format. It is realized by defineing a C structure that contains a
> +header, followed by binary buffer where the ISP driver copies a variable number
> +of ISP statistics block.
> +
> +The :c:type:`v4l2_isp_stats_buffer` structure defines the buffer header which
> +is followed by a binary buffer of ISP statistics data. ISP driver shall
> +correctly populate the buffer header with the generic statistics format version
> +and with the size (in bytes) of the binary data buffer where it will store the
> +ISP statistics data.
> +
> +Each *ISP statistics block* is preceded by a header implemented by the
> +:c:type:`v4l2_isp_stats_block_header` structure, followed by the statistics
> +data for that specific block, defined by the ISP driver specific data types.
> +
> +Driver is responsible for correctly populating each block's header fields
> +(type, flags and size) and the block-specific statistics data.
> +
> +ISP statistics block configuration
> +----------------------------------
> +
> +When ISP driver wants to share statistics from an ISP block, it shall fully
> +populate the block statistics and set the V4L2_ISP_STATS_FL_BLOCK_VALID
> +bit in the block header's `flags` field.
> +
> +When ISP driver wants userspace to ignore statistics from an ISP block, it can
What would be the use case here ?
I checked a few datasheet and drivers and I haven't found any "failed
to read stats" bits, and even if that would be a thing, isn't it easier to
simply overwrite the header of the failed stat block instead of
marking it invalid ?
> +simply omit the full block, or set the V4L2_ISP_STATS_FL_BLOCK_INVALID bit in
> +the block headers's `flags` field. Then driver can omit the additional data
> +after header, and set block header's `size` to the header structure's size only
> +in such case.
> +
> +Setting both the V4L2_ISP_STATS_FL_BLOCK_VALID and
> +V4L2_ISP_STATS_FL_BLOCK_INVALID bits in the flags field is not allowed and
> +userspace shall not handle it.
> +
> +Extension to the statistics format can be implemented by adding new blocks
> +definition without invalidating the existing ones.
>
> V4L2 ISP uAPI data types
> ========================
> --
> 2.52.0
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats
2026-02-03 16:58 ` Jacopo Mondi
@ 2026-02-09 23:16 ` Laurent Pinchart
0 siblings, 0 replies; 49+ messages in thread
From: Laurent Pinchart @ 2026-02-09 23:16 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
On Tue, Feb 03, 2026 at 05:58:25PM +0100, Jacopo Mondi wrote:
> Hi Antoine
>
> On Fri, Jan 23, 2026 at 09:09:30AM +0100, Antoine Bouyer wrote:
> > Add driver documentation for V4L2 ISP generic statistics format, mainly
> > copied from the generic parameters one.
> >
> > Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> > ---
> > .../userspace-api/media/v4l/v4l2-isp.rst | 42 +++++++++++++++++--
> > 1 file changed, 39 insertions(+), 3 deletions(-)
> >
> > diff --git a/Documentation/userspace-api/media/v4l/v4l2-isp.rst b/Documentation/userspace-api/media/v4l/v4l2-isp.rst
> > index facf6dba1ca7..9024c6998b2c 100644
> > --- a/Documentation/userspace-api/media/v4l/v4l2-isp.rst
> > +++ b/Documentation/userspace-api/media/v4l/v4l2-isp.rst
> > @@ -32,8 +32,8 @@ types.
> > Userspace applications are responsible for correctly populating each block's
> > header fields (type, flags and size) and the block-specific parameters.
> >
> > -ISP block enabling, disabling and configuration
> > ------------------------------------------------
> > +ISP parameters block enabling, disabling and configuration
> > +----------------------------------------------------------
> >
> > When userspace wants to configure and enable an ISP block it shall fully
> > populate the block configuration and set the V4L2_ISP_PARAMS_FL_BLOCK_ENABLE
> > @@ -59,7 +59,43 @@ definition without invalidating the existing ones.
> > ISP statistics
> > ==============
> >
> > -Support for generic statistics format is not yet implemented in Video4Linux2.
> > +The generic ISP statistics format is similar to the generic ISP configuration
> > +parameters format. It is realized by defineing a C structure that contains a
s/defineing/defining/
> > +header, followed by binary buffer where the ISP driver copies a variable number
> > +of ISP statistics block.
> > +
> > +The :c:type:`v4l2_isp_stats_buffer` structure defines the buffer header which
> > +is followed by a binary buffer of ISP statistics data. ISP driver shall
s/driver/drivers/
> > +correctly populate the buffer header with the generic statistics format version
> > +and with the size (in bytes) of the binary data buffer where it will store the
> > +ISP statistics data.
> > +
> > +Each *ISP statistics block* is preceded by a header implemented by the
> > +:c:type:`v4l2_isp_stats_block_header` structure, followed by the statistics
> > +data for that specific block, defined by the ISP driver specific data types.
> > +
> > +Driver is responsible for correctly populating each block's header fields
s/Driver is/Drivers are/
> > +(type, flags and size) and the block-specific statistics data.
> > +
> > +ISP statistics block configuration
> > +----------------------------------
> > +
> > +When ISP driver wants to share statistics from an ISP block, it shall fully
s/ISP driver/an ISP driver/
> > +populate the block statistics and set the V4L2_ISP_STATS_FL_BLOCK_VALID
> > +bit in the block header's `flags` field.
> > +
> > +When ISP driver wants userspace to ignore statistics from an ISP block, it can
>
> What would be the use case here ?
>
> I checked a few datasheet and drivers and I haven't found any "failed
> to read stats" bits, and even if that would be a thing, isn't it easier to
> simply overwrite the header of the failed stat block instead of
> marking it invalid ?
It seems simpler to just omit the block completely indeed. The only case
where I could imagine this being useful is if the hardware writes the
statistics data to memory through DMA, with different stats engines
writing to different parts of the buffer concurrently.
In that case though, we will need to ensure the buffer format can
accommodate DMA alignment requirements of different devices, which is
likely not the case of the format proposed in this series. The size of
the top-level header and of the block headers are fixed, we would likely
need to make them configurable by the driver.
> > +simply omit the full block, or set the V4L2_ISP_STATS_FL_BLOCK_INVALID bit in
> > +the block headers's `flags` field. Then driver can omit the additional data
> > +after header, and set block header's `size` to the header structure's size only
> > +in such case.
> > +
> > +Setting both the V4L2_ISP_STATS_FL_BLOCK_VALID and
> > +V4L2_ISP_STATS_FL_BLOCK_INVALID bits in the flags field is not allowed and
> > +userspace shall not handle it.
> > +
> > +Extension to the statistics format can be implemented by adding new blocks
> > +definition without invalidating the existing ones.
> >
> > V4L2 ISP uAPI data types
> > ========================
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread
* [RFC v1 04/11] media: Documentation: Add NXP neoisp driver documentation
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (2 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support Antoine Bouyer
` (7 subsequent siblings)
11 siblings, 0 replies; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Document the NXP neoisp driver both in the admin-guide for neoisp IP
description, and in the userpace-api for neoisp interface description.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
.../admin-guide/media/nxp-neoisp-diagram.dot | 22 ++
.../admin-guide/media/nxp-neoisp.dot | 16 ++
.../admin-guide/media/nxp-neoisp.rst | 189 ++++++++++++++++++
.../admin-guide/media/v4l-drivers.rst | 1 +
.../userspace-api/media/v4l/meta-formats.rst | 1 +
.../media/v4l/metafmt-nxp-neoisp.rst | 114 +++++++++++
6 files changed, 343 insertions(+)
create mode 100644 Documentation/admin-guide/media/nxp-neoisp-diagram.dot
create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
create mode 100644 Documentation/userspace-api/media/v4l/metafmt-nxp-neoisp.rst
diff --git a/Documentation/admin-guide/media/nxp-neoisp-diagram.dot b/Documentation/admin-guide/media/nxp-neoisp-diagram.dot
new file mode 100644
index 000000000000..ac0d950bc1dc
--- /dev/null
+++ b/Documentation/admin-guide/media/nxp-neoisp-diagram.dot
@@ -0,0 +1,22 @@
+digraph G {
+ rankdir = "LR";
+ node [shape=rect];
+ splines = ortho;
+ label = "Neoisp pipeline diagram";
+ {In0, In1 } -> HC -> {HDR_decomp0, HDR_decomp1};
+ HDR_decomp0 -> OBWB0 -> HDR_merge;
+ HDR_decomp1 -> OBWB1 -> HDR_merge;
+ HDR_merge -> RGBIR -> IR_compression;
+ RGBIR -> Statistics;
+ RGBIR -> OBWB2 ->BNR -> Vignetting -> ColorTemp;
+ Vignetting -> Demosaic -> RGB2YUV -> DRC -> AF;
+ DRC-> NR -> EE -> DF -> Gamma -> Packetizer;
+ DRC -> DMAP -> DF[weight=2];
+ DRC -> CCONV -> CAS -> Gamma;
+ {rank = "same"; RGBIR, DRC}
+ {rank = "same"; AF, NR, DMAP}
+ {rank = "same"; IR_compression, Vignetting}
+ IR_compression -> AXIOutDMA;
+ Packetizer -> AXIOutDMA [weight=3];
+ AXIOutDMA -> {"Out0", "Out1"}
+}
diff --git a/Documentation/admin-guide/media/nxp-neoisp.dot b/Documentation/admin-guide/media/nxp-neoisp.dot
new file mode 100644
index 000000000000..abcc2dc9bb55
--- /dev/null
+++ b/Documentation/admin-guide/media/nxp-neoisp.dot
@@ -0,0 +1,16 @@
+digraph board {
+ rankdir=TB
+ n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2} | neoisp\n | {<port3> 3 | <port4> 4 | <port5> 5}}", shape=Mrecord, style=filled, fillcolor=green]
+ n00000001:port3 -> n00000020 [style=dashed]
+ n00000001:port4 -> n00000022 [style=dashed]
+ n00000001:port5 -> n00000024 [style=dashed]
+ n0000000a [label="neoisp-input0\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
+ n0000000a -> n00000001:port0 [style=bold]
+ n00000010 [label="neoisp-input1\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
+ n00000010 -> n00000001:port1 [style=dashed]
+ n00000016 [label="neoisp-params\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
+ n00000016 -> n00000001:port2 [style=dashed]
+ n00000020 [label="neoisp-frame\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
+ n00000022 [label="neoisp-ir\n/dev/video4", shape=box, style=filled, fillcolor=yellow]
+ n00000024 [label="neoisp-stats\n/dev/video5", shape=box, style=filled, fillcolor=yellow]
+}
diff --git a/Documentation/admin-guide/media/nxp-neoisp.rst b/Documentation/admin-guide/media/nxp-neoisp.rst
new file mode 100644
index 000000000000..0632de6bc51d
--- /dev/null
+++ b/Documentation/admin-guide/media/nxp-neoisp.rst
@@ -0,0 +1,189 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=======================================
+NXP Neo Image Signal Processor (neoisp)
+=======================================
+
+Introduction
+============
+
+Neoisp performs a set of image processing tasks on the RAW camera stream, where
+the input camera stream and Neoisp processed output image are stored in DDR or
+any system memory fast enough to keep up with Neoisp processing.
+The overall Neoisp operation is frame based, that is 1 complete image frame is
+read and output pixel by pixel, line by line wise.
+
+Revisions
+=========
+
+NXP Neoisp hw revisions are listed in UAPI in enum :c:type:`neoisp_version_e`.
+Version is stored in the Media device information, hw revision field,
+accessible from the ioctl MEDIA_IOC_DEVICE_INFO.
+
+There are 2 versions:
+
+- NEOISP_HW_V1: used at least in i.MX95 A0/A1 SoC, not targeted for production.
+- NEOISP_HW_V2: used at least in i.MX95 B0 SoC.
+
+Neoisp hardware
+===============
+
+The Neoisp registers and pipeline processing are documented in the NXP Image
+Signal Processor Specification document (under NDA).
+
+The NEO pipeline block diagram is shown below:
+
+.. kernel-figure:: nxp-neoisp-diagram.dot
+ :alt: Diagram of neoisp pipeline
+ :align: center
+
+It is composed by the following HW blocks:
+
+- a Head Color (HC) selection block,
+- two HDR decompression blocks, one for each input,
+- three Optical Black correction and White Balance (OBWB) blocks at different
+ stages in the pipeline,
+- a HDR merge block for HDR image capture from the 2 input lines,
+- a RGB-IR to RGGB converter,
+- a Bayer Noise Reduction (BNR) block,
+- a Vignetting block, aka Lens Shading Correction (LSC),
+- a Demosaic block for RAW image conversion to RGB,
+- a RGB Color Correction Matrix (CCM) and Color Space Converter aka CSC or
+ RGB2YUV,
+- a Dynamic Range Compression (DRC) block,
+- the Denoising pipeline (composed by multiple blocks for Noise Reduction, Edge
+ Enhancement, Gamma Compensation, etc),
+- a Packetizer used for UV sub-sampling or RGB packing.
+
+All these blocks are controlled by SW through registers. Some of these
+registers are accessible by the uAPI, so that usespace application and Image
+Processing Algorithms (IPA) can configure them through the parameters buffers.
+
+Neoisp driver
+=============
+
+Neoisp driver is located under drivers/media/platform/nxp/neoisp.
+It uses the `V4L2 API` and the `V4L2 subdev API` to register capture and output
+video devices in addition to a subdevice for neoisp that connects the video
+devices in a single media graph realized using the `Media Controller (MC) API`.
+
+The media topology registered by Neoisp driver is represented below:
+
+.. kernel-figure:: nxp-neoisp.dot
+ :alt: Diagram of neoisp media device topology
+ :align: center
+
+
+The media graph registers the following video device nodes:
+
+- neoisp-input0: output device for RAW frames to be submitted to the ISP for processing.
+- neoisp-input1: output device for RAW frames short capture in HDR merge mode.
+- neoisp-params: output meta device for parameters provided by user space 3A algorithms.
+- neoisp-frame: capture device for RGB/YUV pixels of the processed images.
+- neoisp-ir: capture device for the infra-red pixels of the processed images.
+- neoisp-stats: capture meta device for generated image statistics for user space 3A algorithms.
+
+neoisp-input0, neoisp-input1
+----------------------------
+
+Images to be processed by Neoisp are queued to the neoisp-input0 (and
+neoisp-input1 when in HDR mode) output device nodes. Supported image formats
+as input to the ISP are:
+
+- Raw bayer formats:
+
+ - 8 bits raw (V4L2_PIX_FMT_SRGGB8, V4L2_PIX_FMT_SBGGR8, V4L2_PIX_FMT_SGBRG8,
+ V4L2_PIX_FMT_SGRBG8)
+ - 10 bits raw (V4L2_PIX_FMT_SRGGB10, V4L2_PIX_FMT_SBGGR10,
+ V4L2_PIX_FMT_SGBRG10, V4L2_PIX_FMT_SGRBG10)
+ - 12 bits raw (V4L2_PIX_FMT_SRGGB12, V4L2_PIX_FMT_SBGGR12,
+ V4L2_PIX_FMT_SGBRG12, V4L2_PIX_FMT_SGRBG12)
+ - 14 bits raw (V4L2_PIX_FMT_SRGGB14, V4L2_PIX_FMT_SBGGR14,
+ V4L2_PIX_FMT_SGBRG14, V4L2_PIX_FMT_SGRBG14)
+ - 16 bits raw (V4L2_PIX_FMT_SRGGB16, V4L2_PIX_FMT_SBGGR16,
+ V4L2_PIX_FMT_SGBRG16, V4L2_PIX_FMT_SGRBG16)
+
+- Monochrome formats:
+
+ - 8 bits Monochrome (V4L2_PIX_FMT_GREY)
+ - 10 bits Monochrome (V4L2_PIX_FMT_Y10)
+ - 12 bits Monochrome (V4L2_PIX_FMT_Y12)
+ - 14 bits Monochrome (V4L2_PIX_FMT_Y14)
+ - 16 bits Monochrome (V4L2_PIX_FMT_Y16)
+
+.. note::
+ RGBIr camera sensors are supported as well, and can be used through user
+ space activation of the IR block.
+
+.. note::
+ neoisp-input1 link is mutable and should be enabled in case a short capture
+ image buffer is provided to the ISP for HDR merge.
+
+.. _neoisp_params:
+
+neoisp-params
+-------------
+
+The neoisp-params output meta device receives configuration data to be written
+to Neoisp registers and internal memory for desired input image processing.
+This v4l2 device accepts the `legacy parameters` format, or the `extensible
+parameters` format.
+
+When using the `legacy parameters` format, the parameters buffer is defined by
+structure :c:type:`neoisp_meta_params_s`, and userspace should set
+:ref:`V4L2_META_FMT_NEO_ISP_PARAMS <v4l2-meta-fmt-neo-isp-params>` as dataformat.
+
+When using the `extensible parameters` format, the parameters buffer is defined
+by structure :c:type:`neoisp_ext_params_s`, and userspace should set
+:ref:`V4L2_META_FMT_NEO_ISP_EXT_PARAMS <v4l2-meta-fmt-neo-isp-ext-params>` as
+dataformat.
+
+When the related media link is disabled, the image decoding will be done based
+on the default parameters of the ISP.
+
+neoisp-frame
+------------
+
+The capture device writes to memory the RGB or YUV pixels of the image processed
+by Neoisp when the media link is enabled. If the related media link is disabled,
+the processed image will be written to dummy buffer and not delivered to the
+neoisp-frame video device node.
+
+neoisp-ir
+---------
+
+The capture device writes to memory the RGBIr pixels of the image processed by
+Neoisp when the media link is enabled. If the related media link is disabled,
+the processed image will not be delivered to the neoisp-ir video device node.
+
+.. _neoisp_stats:
+
+neoisp-stats
+------------
+
+The neoisp-stats capture meta device provides statistics data generated by
+Neoisp hardware while processing the input image.
+This v4l2 device accepts the `legacy statistics` format, or the `extensible
+statistics` format.
+
+When using the `legacy statistics` format, the statistics buffer is defined by
+structure :c:type:`neoisp_meta_stats_s`, and userspace should set
+:ref:`V4L2_META_FMT_NEO_ISP_STATS <v4l2-meta-fmt-neo-isp-stats>` as dataformat.
+
+When using the `extensible statistics` format, the statistics buffer is defined
+by structure :c:type:`neoisp_ext_stats_s`, and userspace should set
+:ref:`V4L2_META_FMT_NEO_ISP_EXT_STATS <v4l2-meta-fmt-neo-isp-ext-stats>` as
+dataformat.
+
+When the related media link is disabled, the decoding statistics will not be
+delivered to the neoisp-stats meta device node.
+
+Control
+=======
+
+To support additional neoisp hardware revisions, the read-only bitmask control
+`V4L2_CID_NEOISP_SUPPORTED_PARAMS_BLOCKS` can be used to query the list of
+supported blocks. Each bit represents the availability of the corresponding
+entry from the :c:type:`neoisp_param_block_type_e` enum. In current driver
+version, default and max values represent the blocks supported by the i.MX95
+SoC.
diff --git a/Documentation/admin-guide/media/v4l-drivers.rst b/Documentation/admin-guide/media/v4l-drivers.rst
index 393f83e8dc4d..5b6c71ae369d 100644
--- a/Documentation/admin-guide/media/v4l-drivers.rst
+++ b/Documentation/admin-guide/media/v4l-drivers.rst
@@ -21,6 +21,7 @@ Video4Linux (V4L) driver-specific documentation
ivtv
mali-c55
mgb4
+ nxp-neoisp
omap3isp
philips
qcom_camss
diff --git a/Documentation/userspace-api/media/v4l/meta-formats.rst b/Documentation/userspace-api/media/v4l/meta-formats.rst
index 3e0cab153f0a..46268d955d3a 100644
--- a/Documentation/userspace-api/media/v4l/meta-formats.rst
+++ b/Documentation/userspace-api/media/v4l/meta-formats.rst
@@ -18,6 +18,7 @@ These formats are used for the :ref:`metadata` interface only.
metafmt-d4xx
metafmt-generic
metafmt-intel-ipu3
+ metafmt-nxp-neoisp
metafmt-pisp-be
metafmt-pisp-fe
metafmt-rkisp1
diff --git a/Documentation/userspace-api/media/v4l/metafmt-nxp-neoisp.rst b/Documentation/userspace-api/media/v4l/metafmt-nxp-neoisp.rst
new file mode 100644
index 000000000000..bcde8edcb441
--- /dev/null
+++ b/Documentation/userspace-api/media/v4l/metafmt-nxp-neoisp.rst
@@ -0,0 +1,114 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+********************************************************************************
+V4L2_META_FMT_NEO_ISP_PARAMS ('nnip'), V4L2_META_FMT_NEO_ISP_EXT_PARAMS ('nnep')
+********************************************************************************
+
+The Neoisp image signal processor is configured by userspace through a buffer
+of parameters to :ref:`neoisp-params <neoisp_params>` output device node using
+the :c:type:`v4l2_meta_format` interface.
+
+There are two methods that allow to configure the Neoisp: the `legacy
+parameters` configuration format and the `extensible parameters` configuration
+format.
+
+.. _v4l2-meta-fmt-neo-isp-params:
+
+Legacy parameters configuration format
+======================================
+
+When using the `legacy parameters` configuration format, parameters are passed
+to the :ref:`neoisp-params <neoisp_params>` metadata output video node using
+the `V4L2_META_FMT_NEO_ISP_PARAMS` meta format.
+
+The buffer contains a single instance of the C structure
+:c:type:`neoisp_meta_params_s` defined in ``nxp_neoisp.h``. So the structure
+can be obtained from the buffer by:
+
+.. code-block:: c
+
+ struct neoisp_meta_params_s *params = (struct neoisp_meta_params_s *) buffer;
+
+This method supports the Neoisp features currently available, it won't be
+maintained for future Neoisp versions. New applications should use the
+`extensible parameters` method then.
+
+.. _v4l2-meta-fmt-neo-isp-ext-params:
+
+Extensible parameters configuration format
+==========================================
+
+When using the `extensible parameters` configuration format, parameters are
+passed to the :ref:`neoisp-params <neoisp_params>` metadata output video node
+using the `V4L2_META_FMT_NEO_ISP_EXT_PARAMS` meta format.
+
+The buffer contains a single instance of the C structure
+:c:type:`v4l2_isp_params_buffer` defined in ``v4l2-isp.h``. The
+:c:type:`v4l2_isp_params_buffer` structure is designed to allow userspace to
+populate the data buffer with only the configuration data for the Neoisp blocks
+it intends to configure. The extensible parameters format design allows
+developers to define new block types to support new configuration parameters,
+and defines a versioning scheme so that it can be extended and versioned
+without breaking compatibility with existing applications.
+
+******************************************************************************
+V4L2_META_FMT_NEO_ISP_STATS ('nnis'), V4L2_META_FMT_NEO_ISP_EXT_STATS ('nnes')
+******************************************************************************
+
+The Neoisp image signal processor generates statistics data while processing an
+input image. These statistics are captured in a buffer and provided to
+userspace through the :ref:`neoisp-stats <neoisp_stats>` capture video node
+using the :c:type:`v4l2_meta_format` interface. The statistics data are
+processed by userspace application to produce the next Neoisp parameters.
+
+There are two methods to capture the statistics: the `legacy statistics` format
+and the `extensible statistics` format.
+
+.. _v4l2-meta-fmt-neo-isp-stats:
+
+Legacy statistics format
+========================
+
+When using the `legacy statistics` format, Neoisp statistics are passed from
+the :ref:`neoisp-stats <neoisp_stats>` metadata capture video node using the
+`V4L2_META_FMT_NEO_ISP_STATS` meta format.
+
+The buffer contains a single instance of the C structure
+:c:type:`neoisp_meta_stats_s` defined in ``nxp_neoisp.h``. So the structure can
+be obtained from the buffer by:
+
+.. code-block:: c
+
+ struct neoisp_meta_stats_s *params = (struct neoisp_meta_stats_s *) buffer;
+
+This method supports the Neoisp statistics currently available, it won't be
+maintained for future Neoisp versions. New applications should use the
+`extensible statistics` method then.
+
+.. _v4l2-meta-fmt-neo-isp-ext-stats:
+
+Extensible statistics format
+============================
+
+When using the `extensible statistics` format, the statistics buffer is passed
+from the :ref:`neoisp-stats <neoisp_stats>` metadata capture video node using
+the `V4L2_META_FMT_NEO_ISP_EXT_STATS` meta format.
+
+The buffer contains a single instance of the C structure
+:c:type:`v4l2_isp_stats_buffer` defined in ``v4l2-isp.h``. The
+:c:type:`v4l2_isp_stats_buffer` structure is designed to allow future Neoisp
+driver versions to populate the statistics buffer with future blocks
+statistics, and defines a versioning scheme so that it can be extended and
+versioned without breaking compatibility with existing applications.
+
+**********************
+Neoisp uAPI data types
+**********************
+
+This chapter describes the data types exposed to userspace by Neoisp driver.
+
+Some structure members are in a fixed-point format, in this case the related
+description will be ended by a fixed-point definition between parenthesis.
+
+.. kernel-doc:: include/uapi/linux/media/nxp/nxp_neoisp.h
+
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (3 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 04/11] media: Documentation: Add NXP neoisp driver documentation Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-01-26 17:12 ` Frank Li
2026-02-05 9:43 ` Krzysztof Kozlowski
2026-01-23 8:09 ` [RFC v1 06/11] media: v4l2-ctrls: Add user control base for NXP neoisp controls Antoine Bouyer
` (6 subsequent siblings)
11 siblings, 2 replies; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Add dt-bindings for NXP neoisp module.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
.../devicetree/bindings/media/nxp,neoisp.yaml | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 Documentation/devicetree/bindings/media/nxp,neoisp.yaml
diff --git a/Documentation/devicetree/bindings/media/nxp,neoisp.yaml b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
new file mode 100644
index 000000000000..4dc9fa5a03b7
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
@@ -0,0 +1,65 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/nxp,neoisp.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NXP NEOISP Image Signal Processing Pipeline
+
+maintainers:
+ - Antoine Bouyer <antoine.bouyer@nxp.com>
+
+description:
+ The NXP NEOISP performs a set of image processing tasks on the RAW camera
+ stream and provides RGB or YUV enhanced image.
+
+properties:
+ compatible:
+ enum:
+ - nxp,neoisp
+ - nxp,imx95-a0-neoisp
+ - nxp,imx95-a1-neoisp
+ - nxp,imx95-b0-neoisp
+
+ reg:
+ items:
+ - description: The configuration registers
+ - description: ISP local memories
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ minItems: 1
+
+ clock-names:
+ items:
+ - const: camcm0
+
+ power-domains:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - clocks
+ - clock-names
+ - power-domains
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ isp@4ae00000 {
+ compatible = "nxp,neoisp";
+ reg = <0x4ae00000 0x8000>,
+ <0x4afe0000 0x10000>;
+ interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-parent = <&gic>;
+ clocks = <&scmi_clk 64>; /* IMX95_CLK_CAMCM0 */
+ clock-names = "camcm0";
+ power-domains = <&scmi_devpd 3>; /* IMX95_PD_CAMERA */
+ };
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* Re: [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support
2026-01-23 8:09 ` [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support Antoine Bouyer
@ 2026-01-26 17:12 ` Frank Li
2026-02-05 9:43 ` Krzysztof Kozlowski
1 sibling, 0 replies; 49+ messages in thread
From: Frank Li @ 2026-01-26 17:12 UTC (permalink / raw)
To: Antoine Bouyer
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt, conor+dt,
shawnguo, s.hauer, kernel, festevam, linux-kernel, linux-media,
devicetree, linux-arm-kernel
On Fri, Jan 23, 2026 at 09:09:32AM +0100, Antoine Bouyer wrote:
> Add dt-bindings for NXP neoisp module.
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +++++++++++++++++++
> 1 file changed, 65 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/media/nxp,neoisp.yaml
>
> diff --git a/Documentation/devicetree/bindings/media/nxp,neoisp.yaml b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
> new file mode 100644
> index 000000000000..4dc9fa5a03b7
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
> @@ -0,0 +1,65 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/media/nxp,neoisp.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: NXP NEOISP Image Signal Processing Pipeline
> +
> +maintainers:
> + - Antoine Bouyer <antoine.bouyer@nxp.com>
> +
> +description:
> + The NXP NEOISP performs a set of image processing tasks on the RAW camera
> + stream and provides RGB or YUV enhanced image.
> +
> +properties:
> + compatible:
> + enum:
> + - nxp,neoisp
Don't allow use generally name for compatible string.
One option
nxp,neoisp-<version number>, or use below one as fallback,
oneOf:
- items:
- enum
- nxp,imx95-b0-neoisp
- nxp,imx95-a1-neoisp
- const: nxp,imx95-a0-neoisp
- const: nxp,imx95-a0-neoisp
Frank
> + - nxp,imx95-a0-neoisp
> + - nxp,imx95-a1-neoisp
> + - nxp,imx95-b0-neoisp
> +
> + reg:
> + items:
> + - description: The configuration registers
> + - description: ISP local memories
> +
> + interrupts:
> + maxItems: 1
> +
> + clocks:
> + minItems: 1
> +
> + clock-names:
> + items:
> + - const: camcm0
> +
> + power-domains:
> + maxItems: 1
> +
> +required:
> + - compatible
> + - reg
> + - interrupts
> + - clocks
> + - clock-names
> + - power-domains
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> +
> + isp@4ae00000 {
> + compatible = "nxp,neoisp";
> + reg = <0x4ae00000 0x8000>,
> + <0x4afe0000 0x10000>;
> + interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-parent = <&gic>;
> + clocks = <&scmi_clk 64>; /* IMX95_CLK_CAMCM0 */
> + clock-names = "camcm0";
> + power-domains = <&scmi_devpd 3>; /* IMX95_PD_CAMERA */
> + };
> --
> 2.52.0
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support
2026-01-23 8:09 ` [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support Antoine Bouyer
2026-01-26 17:12 ` Frank Li
@ 2026-02-05 9:43 ` Krzysztof Kozlowski
2026-02-16 13:16 ` Antoine Bouyer
1 sibling, 1 reply; 49+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-05 9:43 UTC (permalink / raw)
To: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
On 23/01/2026 09:09, Antoine Bouyer wrote:
> Add dt-bindings for NXP neoisp module.
What is a neoisp module?
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +++++++++++++++++++
> 1 file changed, 65 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/media/nxp,neoisp.yaml
>
> diff --git a/Documentation/devicetree/bindings/media/nxp,neoisp.yaml b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
> new file mode 100644
> index 000000000000..4dc9fa5a03b7
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
> @@ -0,0 +1,65 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/media/nxp,neoisp.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: NXP NEOISP Image Signal Processing Pipeline
> +
> +maintainers:
> + - Antoine Bouyer <antoine.bouyer@nxp.com>
> +
> +description:
> + The NXP NEOISP performs a set of image processing tasks on the RAW camera
> + stream and provides RGB or YUV enhanced image.
> +
> +properties:
> + compatible:
> + enum:
> + - nxp,neoisp
Please read writing bindings document.
> + - nxp,imx95-a0-neoisp
> + - nxp,imx95-a1-neoisp
> + - nxp,imx95-b0-neoisp
Nothing explains me why one SoC has three neoisp. You have entire commit
msg to explain weird things.
> +
> + reg:
> + items:
> + - description: The configuration registers
> + - description: ISP local memories
> +
> + interrupts:
> + maxItems: 1
> +
> + clocks:
> + minItems: 1
maxItems. There is no such syntax like you wrote. Look at other code in
case of doubts.
> +
> + clock-names:
> + items:
> + - const: camcm0
> +
> + power-domains:
> + maxItems: 1
> +
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: Re: [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support
2026-02-05 9:43 ` Krzysztof Kozlowski
@ 2026-02-16 13:16 ` Antoine Bouyer
2026-02-16 13:38 ` Krzysztof Kozlowski
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-02-16 13:16 UTC (permalink / raw)
To: Krzysztof Kozlowski, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
Hi Krzysztof
On 2/5/26 10:43 AM, Krzysztof Kozlowski wrote:
> On 23/01/2026 09:09, Antoine Bouyer wrote:
>> Add dt-bindings for NXP neoisp module.
>
> What is a neoisp module?
This is Image Signal Processing IP from NXP.
Indeed my commit msg was not well documented sorry :( Will add more info
in future patchset.
>
>
>>
>> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
>> ---
>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +++++++++++++++++++
>> 1 file changed, 65 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/media/nxp,neoisp.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/media/nxp,neoisp.yaml b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
>> new file mode 100644
>> index 000000000000..4dc9fa5a03b7
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/media/nxp,neoisp.yaml
>> @@ -0,0 +1,65 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/media/nxp,neoisp.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: NXP NEOISP Image Signal Processing Pipeline
>> +
>> +maintainers:
>> + - Antoine Bouyer <antoine.bouyer@nxp.com>
>> +
>> +description:
>> + The NXP NEOISP performs a set of image processing tasks on the RAW camera
>> + stream and provides RGB or YUV enhanced image.
>> +
>> +properties:
>> + compatible:
>> + enum:
>> + - nxp,neoisp
>
> Please read writing bindings document.
>
>> + - nxp,imx95-a0-neoisp
>> + - nxp,imx95-a1-neoisp
>> + - nxp,imx95-b0-neoisp
>
> Nothing explains me why one SoC has three neoisp. You have entire commit
> msg to explain weird things.
Actually, there are 2 ISP versions (v1, v2), and 3 i.MX95 versions a0,
a1 and b0. ISP v1 is integrated into i.MX95 a0 and a1 versions, while
ISP v2 is integrated into i.MX95 b0 only. v2 has some HW changes/fixes
compared to v1 which are handled in the driver.
I kept exact SoC name in neo compatibles to avoid confusion.
However, since a0 and a1 are not targeted for production, but only b0, I
will keep only one compatible: "nxp,imx95-neoisp". Will use same as file
name.
>
>> +
>> + reg:
>> + items:
>> + - description: The configuration registers
>> + - description: ISP local memories
>> +
>> + interrupts:
>> + maxItems: 1
>> +
>> + clocks:
>> + minItems: 1
>
> maxItems. There is no such syntax like you wrote. Look at other code in
> case of doubts.
Ok, I looked into other bindings before submitting of course, but missed
it sorry. Will take care of it in next patchset.
BR
Antoine
>
>
>> +
>> + clock-names:
>> + items:
>> + - const: camcm0
>> +
>> + power-domains:
>> + maxItems: 1
>> +
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support
2026-02-16 13:16 ` Antoine Bouyer
@ 2026-02-16 13:38 ` Krzysztof Kozlowski
0 siblings, 0 replies; 49+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-16 13:38 UTC (permalink / raw)
To: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
On 16/02/2026 14:16, Antoine Bouyer wrote:
>>
>>> + - nxp,imx95-a0-neoisp
>>> + - nxp,imx95-a1-neoisp
>>> + - nxp,imx95-b0-neoisp
>>
>> Nothing explains me why one SoC has three neoisp. You have entire commit
>> msg to explain weird things.
>
> Actually, there are 2 ISP versions (v1, v2), and 3 i.MX95 versions a0,
> a1 and b0. ISP v1 is integrated into i.MX95 a0 and a1 versions, while
> ISP v2 is integrated into i.MX95 b0 only. v2 has some HW changes/fixes
> compared to v1 which are handled in the driver.
>
> I kept exact SoC name in neo compatibles to avoid confusion.
>
> However, since a0 and a1 are not targeted for production, but only b0, I
> will keep only one compatible: "nxp,imx95-neoisp". Will use same as file
> name.
ok
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 49+ messages in thread
* [RFC v1 06/11] media: v4l2-ctrls: Add user control base for NXP neoisp controls
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (4 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver Antoine Bouyer
` (5 subsequent siblings)
11 siblings, 0 replies; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Add a control base for the NXP neoisp driver controls, and reserve up to
16 controls.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
include/uapi/linux/v4l2-controls.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 572622e4535e..e4d3c07fcd2e 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -234,6 +234,12 @@ enum v4l2_colorfx {
*/
#define V4L2_CID_USER_MALI_C55_BASE (V4L2_CID_USER_BASE + 0x1230)
+/*
+ * The base for NEOISP driver controls.
+ * We reserve 16 controls for this driver.
+ */
+#define V4L2_CID_USER_NEOISP_BASE (V4L2_CID_USER_BASE + 0x1240)
+
/* MPEG-class control IDs */
/* The MPEG controls are applicable to all codec controls
* and the 'MPEG' part of the define is historical */
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (5 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 06/11] media: v4l2-ctrls: Add user control base for NXP neoisp controls Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-02-03 17:11 ` Jacopo Mondi
2026-01-23 8:09 ` [RFC v1 08/11] media: uapi: Add NXP NEOISP user interface header file Antoine Bouyer
` (4 subsequent siblings)
11 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
This patch adds new v4l2 meta formats definitions and descriptions used by
neoisp driver for the parameters and statistics buffers:
- `V4L2_META_FMT_NEO_ISP_PARAMS` used for the legacy fixed-size
parameters buffer structure.
- `V4L2_META_FMT_NEO_ISP_EXT_PARAMS` used for the generic v4l2-isp
extensible parameters structure, supporting a non-fixed-size buffer and
changeable ISP configuration blocks.
- `V4L2_META_FMT_NEO_ISP_STATS` used for the legacy fixed-size statistics
buffer structure.
- `V4L2_META_FMT_NEO_ISP_EXT_STATS` used for the generic v4l2-isp
extensible statistics structure, supporting a non-fixed-size buffer
and changeable ISP statistics blocks.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
drivers/media/v4l2-core/v4l2-ioctl.c | 4 ++++
include/uapi/linux/videodev2.h | 6 ++++++
2 files changed, 10 insertions(+)
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 37d33d4a363d..c797cf11be38 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1471,6 +1471,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
case V4L2_META_FMT_C3ISP_STATS: descr = "Amlogic C3 ISP Statistics"; break;
case V4L2_META_FMT_MALI_C55_PARAMS: descr = "ARM Mali-C55 ISP Parameters"; break;
case V4L2_META_FMT_MALI_C55_STATS: descr = "ARM Mali-C55 ISP 3A Statistics"; break;
+ case V4L2_META_FMT_NEO_ISP_PARAMS: descr = "NXP Neo ISP 3A Parameters"; break;
+ case V4L2_META_FMT_NEO_ISP_EXT_PARAMS: descr = "NXP Neo ISP ext 3A Parameters"; break;
+ case V4L2_META_FMT_NEO_ISP_STATS: descr = "NXP Neo ISP 3A Statistics"; break;
+ case V4L2_META_FMT_NEO_ISP_EXT_STATS: descr = "NXP Neo ISP ext 3A Statistics"; break;
case V4L2_PIX_FMT_NV12_8L128: descr = "NV12 (8x128 Linear)"; break;
case V4L2_PIX_FMT_NV12M_8L128: descr = "NV12M (8x128 Linear)"; break;
case V4L2_PIX_FMT_NV12_10BE_8L128: descr = "10-bit NV12 (8x128 Linear, BE)"; break;
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 848e86617d5c..5f4992452c66 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -889,6 +889,12 @@ struct v4l2_pix_format {
#define V4L2_META_FMT_MALI_C55_PARAMS v4l2_fourcc('C', '5', '5', 'P') /* ARM Mali-C55 Parameters */
#define V4L2_META_FMT_MALI_C55_STATS v4l2_fourcc('C', '5', '5', 'S') /* ARM Mali-C55 3A Statistics */
+/* Vendor specific - used for NXP NEOISP sub-system */
+#define V4L2_META_FMT_NEO_ISP_PARAMS v4l2_fourcc('N', 'N', 'I', 'P') /* NXP NEOISP Parameters */
+#define V4L2_META_FMT_NEO_ISP_EXT_PARAMS v4l2_fourcc('N', 'N', 'E', 'P') /* NXP NEOISP Ext Params */
+#define V4L2_META_FMT_NEO_ISP_STATS v4l2_fourcc('N', 'N', 'I', 'S') /* NXP NEOISP Statistics */
+#define V4L2_META_FMT_NEO_ISP_EXT_STATS v4l2_fourcc('N', 'N', 'E', 'S') /* NXP NEOISP Ext Stats */
+
#ifdef __KERNEL__
/*
* Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* Re: [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver
2026-01-23 8:09 ` [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver Antoine Bouyer
@ 2026-02-03 17:11 ` Jacopo Mondi
2026-02-04 13:31 ` Antoine Bouyer
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-03 17:11 UTC (permalink / raw)
To: Antoine Bouyer
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
Hi Antoine
On Fri, Jan 23, 2026 at 09:09:34AM +0100, Antoine Bouyer wrote:
> This patch adds new v4l2 meta formats definitions and descriptions used by
> neoisp driver for the parameters and statistics buffers:
> - `V4L2_META_FMT_NEO_ISP_PARAMS` used for the legacy fixed-size
> parameters buffer structure.
> - `V4L2_META_FMT_NEO_ISP_EXT_PARAMS` used for the generic v4l2-isp
> extensible parameters structure, supporting a non-fixed-size buffer and
> changeable ISP configuration blocks.
> - `V4L2_META_FMT_NEO_ISP_STATS` used for the legacy fixed-size statistics
> buffer structure.
> - `V4L2_META_FMT_NEO_ISP_EXT_STATS` used for the generic v4l2-isp
> extensible statistics structure, supporting a non-fixed-size buffer
> and changeable ISP statistics blocks.
Uh interesting, you have existing userspace that needs legacy formats ?
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> drivers/media/v4l2-core/v4l2-ioctl.c | 4 ++++
> include/uapi/linux/videodev2.h | 6 ++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index 37d33d4a363d..c797cf11be38 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1471,6 +1471,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> case V4L2_META_FMT_C3ISP_STATS: descr = "Amlogic C3 ISP Statistics"; break;
> case V4L2_META_FMT_MALI_C55_PARAMS: descr = "ARM Mali-C55 ISP Parameters"; break;
> case V4L2_META_FMT_MALI_C55_STATS: descr = "ARM Mali-C55 ISP 3A Statistics"; break;
> + case V4L2_META_FMT_NEO_ISP_PARAMS: descr = "NXP Neo ISP 3A Parameters"; break;
> + case V4L2_META_FMT_NEO_ISP_EXT_PARAMS: descr = "NXP Neo ISP ext 3A Parameters"; break;
> + case V4L2_META_FMT_NEO_ISP_STATS: descr = "NXP Neo ISP 3A Statistics"; break;
> + case V4L2_META_FMT_NEO_ISP_EXT_STATS: descr = "NXP Neo ISP ext 3A Statistics"; break;
> case V4L2_PIX_FMT_NV12_8L128: descr = "NV12 (8x128 Linear)"; break;
> case V4L2_PIX_FMT_NV12M_8L128: descr = "NV12M (8x128 Linear)"; break;
> case V4L2_PIX_FMT_NV12_10BE_8L128: descr = "10-bit NV12 (8x128 Linear, BE)"; break;
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 848e86617d5c..5f4992452c66 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -889,6 +889,12 @@ struct v4l2_pix_format {
> #define V4L2_META_FMT_MALI_C55_PARAMS v4l2_fourcc('C', '5', '5', 'P') /* ARM Mali-C55 Parameters */
> #define V4L2_META_FMT_MALI_C55_STATS v4l2_fourcc('C', '5', '5', 'S') /* ARM Mali-C55 3A Statistics */
>
> +/* Vendor specific - used for NXP NEOISP sub-system */
> +#define V4L2_META_FMT_NEO_ISP_PARAMS v4l2_fourcc('N', 'N', 'I', 'P') /* NXP NEOISP Parameters */
> +#define V4L2_META_FMT_NEO_ISP_EXT_PARAMS v4l2_fourcc('N', 'N', 'E', 'P') /* NXP NEOISP Ext Params */
> +#define V4L2_META_FMT_NEO_ISP_STATS v4l2_fourcc('N', 'N', 'I', 'S') /* NXP NEOISP Statistics */
> +#define V4L2_META_FMT_NEO_ISP_EXT_STATS v4l2_fourcc('N', 'N', 'E', 'S') /* NXP NEOISP Ext Stats */
> +
> #ifdef __KERNEL__
> /*
> * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
> --
> 2.52.0
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: Re: [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver
2026-02-03 17:11 ` Jacopo Mondi
@ 2026-02-04 13:31 ` Antoine Bouyer
2026-02-04 13:36 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-02-04 13:31 UTC (permalink / raw)
To: Jacopo Mondi
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, laurent.pinchart, mchehab, robh, krzk+dt, conor+dt,
shawnguo, s.hauer, kernel, festevam, linux-kernel, linux-media,
devicetree, linux-arm-kernel
Hi Jacopo
Le 03/02/2026 à 18:11, Jacopo Mondi a écrit :
>
> Hi Antoine
>
> On Fri, Jan 23, 2026 at 09:09:34AM +0100, Antoine Bouyer wrote:
>> This patch adds new v4l2 meta formats definitions and descriptions used by
>> neoisp driver for the parameters and statistics buffers:
>> - `V4L2_META_FMT_NEO_ISP_PARAMS` used for the legacy fixed-size
>> parameters buffer structure.
>> - `V4L2_META_FMT_NEO_ISP_EXT_PARAMS` used for the generic v4l2-isp
>> extensible parameters structure, supporting a non-fixed-size buffer and
>> changeable ISP configuration blocks.
>> - `V4L2_META_FMT_NEO_ISP_STATS` used for the legacy fixed-size statistics
>> buffer structure.
>> - `V4L2_META_FMT_NEO_ISP_EXT_STATS` used for the generic v4l2-isp
>> extensible statistics structure, supporting a non-fixed-size buffer
>> and changeable ISP statistics blocks.
>
> Uh interesting, you have existing userspace that needs legacy formats ?
Yes we do have some available here (version with extensible formats will
be the next one):
https://github.com/nxp-imx/libcamera
Not in mainline, thought.
BR
Antoine
>
>>
>> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
>> ---
>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 ++++
>> include/uapi/linux/videodev2.h | 6 ++++++
>> 2 files changed, 10 insertions(+)
>>
>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>> index 37d33d4a363d..c797cf11be38 100644
>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>> @@ -1471,6 +1471,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>> case V4L2_META_FMT_C3ISP_STATS: descr = "Amlogic C3 ISP Statistics"; break;
>> case V4L2_META_FMT_MALI_C55_PARAMS: descr = "ARM Mali-C55 ISP Parameters"; break;
>> case V4L2_META_FMT_MALI_C55_STATS: descr = "ARM Mali-C55 ISP 3A Statistics"; break;
>> + case V4L2_META_FMT_NEO_ISP_PARAMS: descr = "NXP Neo ISP 3A Parameters"; break;
>> + case V4L2_META_FMT_NEO_ISP_EXT_PARAMS: descr = "NXP Neo ISP ext 3A Parameters"; break;
>> + case V4L2_META_FMT_NEO_ISP_STATS: descr = "NXP Neo ISP 3A Statistics"; break;
>> + case V4L2_META_FMT_NEO_ISP_EXT_STATS: descr = "NXP Neo ISP ext 3A Statistics"; break;
>> case V4L2_PIX_FMT_NV12_8L128: descr = "NV12 (8x128 Linear)"; break;
>> case V4L2_PIX_FMT_NV12M_8L128: descr = "NV12M (8x128 Linear)"; break;
>> case V4L2_PIX_FMT_NV12_10BE_8L128: descr = "10-bit NV12 (8x128 Linear, BE)"; break;
>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>> index 848e86617d5c..5f4992452c66 100644
>> --- a/include/uapi/linux/videodev2.h
>> +++ b/include/uapi/linux/videodev2.h
>> @@ -889,6 +889,12 @@ struct v4l2_pix_format {
>> #define V4L2_META_FMT_MALI_C55_PARAMS v4l2_fourcc('C', '5', '5', 'P') /* ARM Mali-C55 Parameters */
>> #define V4L2_META_FMT_MALI_C55_STATS v4l2_fourcc('C', '5', '5', 'S') /* ARM Mali-C55 3A Statistics */
>>
>> +/* Vendor specific - used for NXP NEOISP sub-system */
>> +#define V4L2_META_FMT_NEO_ISP_PARAMS v4l2_fourcc('N', 'N', 'I', 'P') /* NXP NEOISP Parameters */
>> +#define V4L2_META_FMT_NEO_ISP_EXT_PARAMS v4l2_fourcc('N', 'N', 'E', 'P') /* NXP NEOISP Ext Params */
>> +#define V4L2_META_FMT_NEO_ISP_STATS v4l2_fourcc('N', 'N', 'I', 'S') /* NXP NEOISP Statistics */
>> +#define V4L2_META_FMT_NEO_ISP_EXT_STATS v4l2_fourcc('N', 'N', 'E', 'S') /* NXP NEOISP Ext Stats */
>> +
>> #ifdef __KERNEL__
>> /*
>> * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
>> --
>> 2.52.0
>>
>>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver
2026-02-04 13:31 ` Antoine Bouyer
@ 2026-02-04 13:36 ` Jacopo Mondi
2026-02-04 14:04 ` Antoine Bouyer
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-04 13:36 UTC (permalink / raw)
To: Antoine Bouyer
Cc: Jacopo Mondi, julien.vuillaumier, alexi.birlinger, daniel.baluta,
peng.fan, frank.li, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam, linux-kernel,
linux-media, devicetree, linux-arm-kernel
Hi Antoine
On Wed, Feb 04, 2026 at 02:31:47PM +0100, Antoine Bouyer wrote:
> Hi Jacopo
>
> Le 03/02/2026 à 18:11, Jacopo Mondi a écrit :
> >
> > Hi Antoine
> >
> > On Fri, Jan 23, 2026 at 09:09:34AM +0100, Antoine Bouyer wrote:
> > > This patch adds new v4l2 meta formats definitions and descriptions used by
> > > neoisp driver for the parameters and statistics buffers:
> > > - `V4L2_META_FMT_NEO_ISP_PARAMS` used for the legacy fixed-size
> > > parameters buffer structure.
> > > - `V4L2_META_FMT_NEO_ISP_EXT_PARAMS` used for the generic v4l2-isp
> > > extensible parameters structure, supporting a non-fixed-size buffer and
> > > changeable ISP configuration blocks.
> > > - `V4L2_META_FMT_NEO_ISP_STATS` used for the legacy fixed-size statistics
> > > buffer structure.
> > > - `V4L2_META_FMT_NEO_ISP_EXT_STATS` used for the generic v4l2-isp
> > > extensible statistics structure, supporting a non-fixed-size buffer
> > > and changeable ISP statistics blocks.
> >
> > Uh interesting, you have existing userspace that needs legacy formats ?
>
> Yes we do have some available here (version with extensible formats will be
> the next one):
> https://github.com/nxp-imx/libcamera
>
> Not in mainline, thought.
I see.
However I don't think the mainline driver should support both formats.
And looking at your libcamera branch, it seem it already supports the
extensible version.
>
> BR
> Antoine
>
> >
> > >
> > > Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> > > ---
> > > drivers/media/v4l2-core/v4l2-ioctl.c | 4 ++++
> > > include/uapi/linux/videodev2.h | 6 ++++++
> > > 2 files changed, 10 insertions(+)
> > >
> > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > index 37d33d4a363d..c797cf11be38 100644
> > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > @@ -1471,6 +1471,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> > > case V4L2_META_FMT_C3ISP_STATS: descr = "Amlogic C3 ISP Statistics"; break;
> > > case V4L2_META_FMT_MALI_C55_PARAMS: descr = "ARM Mali-C55 ISP Parameters"; break;
> > > case V4L2_META_FMT_MALI_C55_STATS: descr = "ARM Mali-C55 ISP 3A Statistics"; break;
> > > + case V4L2_META_FMT_NEO_ISP_PARAMS: descr = "NXP Neo ISP 3A Parameters"; break;
> > > + case V4L2_META_FMT_NEO_ISP_EXT_PARAMS: descr = "NXP Neo ISP ext 3A Parameters"; break;
> > > + case V4L2_META_FMT_NEO_ISP_STATS: descr = "NXP Neo ISP 3A Statistics"; break;
> > > + case V4L2_META_FMT_NEO_ISP_EXT_STATS: descr = "NXP Neo ISP ext 3A Statistics"; break;
> > > case V4L2_PIX_FMT_NV12_8L128: descr = "NV12 (8x128 Linear)"; break;
> > > case V4L2_PIX_FMT_NV12M_8L128: descr = "NV12M (8x128 Linear)"; break;
> > > case V4L2_PIX_FMT_NV12_10BE_8L128: descr = "10-bit NV12 (8x128 Linear, BE)"; break;
> > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > index 848e86617d5c..5f4992452c66 100644
> > > --- a/include/uapi/linux/videodev2.h
> > > +++ b/include/uapi/linux/videodev2.h
> > > @@ -889,6 +889,12 @@ struct v4l2_pix_format {
> > > #define V4L2_META_FMT_MALI_C55_PARAMS v4l2_fourcc('C', '5', '5', 'P') /* ARM Mali-C55 Parameters */
> > > #define V4L2_META_FMT_MALI_C55_STATS v4l2_fourcc('C', '5', '5', 'S') /* ARM Mali-C55 3A Statistics */
> > >
> > > +/* Vendor specific - used for NXP NEOISP sub-system */
> > > +#define V4L2_META_FMT_NEO_ISP_PARAMS v4l2_fourcc('N', 'N', 'I', 'P') /* NXP NEOISP Parameters */
> > > +#define V4L2_META_FMT_NEO_ISP_EXT_PARAMS v4l2_fourcc('N', 'N', 'E', 'P') /* NXP NEOISP Ext Params */
> > > +#define V4L2_META_FMT_NEO_ISP_STATS v4l2_fourcc('N', 'N', 'I', 'S') /* NXP NEOISP Statistics */
> > > +#define V4L2_META_FMT_NEO_ISP_EXT_STATS v4l2_fourcc('N', 'N', 'E', 'S') /* NXP NEOISP Ext Stats */
> > > +
> > > #ifdef __KERNEL__
> > > /*
> > > * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
> > > --
> > > 2.52.0
> > >
> > >
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: Re: [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver
2026-02-04 13:36 ` Jacopo Mondi
@ 2026-02-04 14:04 ` Antoine Bouyer
0 siblings, 0 replies; 49+ messages in thread
From: Antoine Bouyer @ 2026-02-04 14:04 UTC (permalink / raw)
To: Jacopo Mondi
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, laurent.pinchart, mchehab, robh, krzk+dt, conor+dt,
shawnguo, s.hauer, kernel, festevam, linux-kernel, linux-media,
devicetree, linux-arm-kernel
Hi Jacopo
Le 04/02/2026 à 14:36, Jacopo Mondi a écrit :
>
> Hi Antoine
>
> On Wed, Feb 04, 2026 at 02:31:47PM +0100, Antoine Bouyer wrote:
>> Hi Jacopo
>>
>> Le 03/02/2026 à 18:11, Jacopo Mondi a écrit :
>>>
>>> Hi Antoine
>>>
>>> On Fri, Jan 23, 2026 at 09:09:34AM +0100, Antoine Bouyer wrote:
>>>> This patch adds new v4l2 meta formats definitions and descriptions used by
>>>> neoisp driver for the parameters and statistics buffers:
>>>> - `V4L2_META_FMT_NEO_ISP_PARAMS` used for the legacy fixed-size
>>>> parameters buffer structure.
>>>> - `V4L2_META_FMT_NEO_ISP_EXT_PARAMS` used for the generic v4l2-isp
>>>> extensible parameters structure, supporting a non-fixed-size buffer and
>>>> changeable ISP configuration blocks.
>>>> - `V4L2_META_FMT_NEO_ISP_STATS` used for the legacy fixed-size statistics
>>>> buffer structure.
>>>> - `V4L2_META_FMT_NEO_ISP_EXT_STATS` used for the generic v4l2-isp
>>>> extensible statistics structure, supporting a non-fixed-size buffer
>>>> and changeable ISP statistics blocks.
>>>
>>> Uh interesting, you have existing userspace that needs legacy formats ?
>>
>> Yes we do have some available here (version with extensible formats will be
>> the next one):
>> https://github.com/nxp-imx/libcamera
>>
>> Not in mainline, thought.
>
> I see.
>
> However I don't think the mainline driver should support both formats.
ok.
I'm fine with starting from a fresh version, extensible-format-only, in
mainline. That would also simplify the patch series then, so as
Documentation, and maintainance.
>
> And looking at your libcamera branch, it seem it already supports the
> extensible version.
>
Oh yes you're correct. I thought it started from 6.18, sorry for
confusion. One more reason to move to extensible-format-only in mainline
then: it is verified since a while without any regression compared to
legacy.
BR
Antoine
>
>>
>> BR
>> Antoine
>>
>>>
>>>>
>>>> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
>>>> ---
>>>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 ++++
>>>> include/uapi/linux/videodev2.h | 6 ++++++
>>>> 2 files changed, 10 insertions(+)
>>>>
>>>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>>>> index 37d33d4a363d..c797cf11be38 100644
>>>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>>>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>>>> @@ -1471,6 +1471,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>>>> case V4L2_META_FMT_C3ISP_STATS: descr = "Amlogic C3 ISP Statistics"; break;
>>>> case V4L2_META_FMT_MALI_C55_PARAMS: descr = "ARM Mali-C55 ISP Parameters"; break;
>>>> case V4L2_META_FMT_MALI_C55_STATS: descr = "ARM Mali-C55 ISP 3A Statistics"; break;
>>>> + case V4L2_META_FMT_NEO_ISP_PARAMS: descr = "NXP Neo ISP 3A Parameters"; break;
>>>> + case V4L2_META_FMT_NEO_ISP_EXT_PARAMS: descr = "NXP Neo ISP ext 3A Parameters"; break;
>>>> + case V4L2_META_FMT_NEO_ISP_STATS: descr = "NXP Neo ISP 3A Statistics"; break;
>>>> + case V4L2_META_FMT_NEO_ISP_EXT_STATS: descr = "NXP Neo ISP ext 3A Statistics"; break;
>>>> case V4L2_PIX_FMT_NV12_8L128: descr = "NV12 (8x128 Linear)"; break;
>>>> case V4L2_PIX_FMT_NV12M_8L128: descr = "NV12M (8x128 Linear)"; break;
>>>> case V4L2_PIX_FMT_NV12_10BE_8L128: descr = "10-bit NV12 (8x128 Linear, BE)"; break;
>>>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>>>> index 848e86617d5c..5f4992452c66 100644
>>>> --- a/include/uapi/linux/videodev2.h
>>>> +++ b/include/uapi/linux/videodev2.h
>>>> @@ -889,6 +889,12 @@ struct v4l2_pix_format {
>>>> #define V4L2_META_FMT_MALI_C55_PARAMS v4l2_fourcc('C', '5', '5', 'P') /* ARM Mali-C55 Parameters */
>>>> #define V4L2_META_FMT_MALI_C55_STATS v4l2_fourcc('C', '5', '5', 'S') /* ARM Mali-C55 3A Statistics */
>>>>
>>>> +/* Vendor specific - used for NXP NEOISP sub-system */
>>>> +#define V4L2_META_FMT_NEO_ISP_PARAMS v4l2_fourcc('N', 'N', 'I', 'P') /* NXP NEOISP Parameters */
>>>> +#define V4L2_META_FMT_NEO_ISP_EXT_PARAMS v4l2_fourcc('N', 'N', 'E', 'P') /* NXP NEOISP Ext Params */
>>>> +#define V4L2_META_FMT_NEO_ISP_STATS v4l2_fourcc('N', 'N', 'I', 'S') /* NXP NEOISP Statistics */
>>>> +#define V4L2_META_FMT_NEO_ISP_EXT_STATS v4l2_fourcc('N', 'N', 'E', 'S') /* NXP NEOISP Ext Stats */
>>>> +
>>>> #ifdef __KERNEL__
>>>> /*
>>>> * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
>>>> --
>>>> 2.52.0
>>>>
>>>>
>>
^ permalink raw reply [flat|nested] 49+ messages in thread
* [RFC v1 08/11] media: uapi: Add NXP NEOISP user interface header file
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (6 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-02-09 23:29 ` Laurent Pinchart
2026-01-23 8:09 ` [RFC v1 10/11] media: platform: neoisp: Add debugfs support Antoine Bouyer
` (3 subsequent siblings)
11 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Add user space api header file for meta data structures definitions.
This header describes `parameters` buffer for the ISP blocks control by
userspace, and `statistics` buffer for userspace and IPA handling.
These 2 buffers both support legacy and extensible modes. Legacy mode is
a static fixed buffer structure, while extensible mode uses the
v4l2-isp generic definitions to support various amount of ISP blocks.
Parameters buffer uses v4l2-isp generic definitions, so as other ISP
devices (rkisp1, mali-c55). Statistics buffer uses the newly introduced
generic `v4l2_isp_stats_buffer`, which behaves the same as the generic
`v4l2_isp_params_buffer`.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 +++++++++++++++++++++
1 file changed, 1968 insertions(+)
create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
diff --git a/include/uapi/linux/media/nxp/nxp_neoisp.h b/include/uapi/linux/media/nxp/nxp_neoisp.h
new file mode 100644
index 000000000000..186973a1a6b2
--- /dev/null
+++ b/include/uapi/linux/media/nxp/nxp_neoisp.h
@@ -0,0 +1,1968 @@
+/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */
+/*
+ * NXP NEOISP userspace API
+ *
+ * Copyright 2023-2026 NXP
+ */
+
+#ifndef __UAPI_NXP_NEOISP_H
+#define __UAPI_NXP_NEOISP_H
+
+#include <linux/media/v4l2-isp.h>
+#include <linux/types.h>
+#include <linux/v4l2-controls.h>
+
+/*
+ * Check Documentation/admin-guide/media/nxp-neoisp.rst for control details.
+ */
+#define V4L2_CID_NEOISP_SUPPORTED_PARAMS_BLOCKS (V4L2_CID_USER_NEOISP_BASE + 1)
+
+/* Local memories sizes (words size) */
+
+/* CTemp statistics - 256 bytes - 64 x 32bits words */
+#define NEO_CTEMP_R_SUM_CNT 64
+#define NEO_CTEMP_G_SUM_CNT 64
+#define NEO_CTEMP_B_SUM_CNT 64
+/* CTemp statistics pixel count - 128 bytes - 64 x 16bits words */
+#define NEO_CTEMP_PIX_CNT_CNT 64
+/* RGBIR histogram - 1024 bytes - 256 x 32bits words */
+#define NEO_RGBIR_HIST_CNT 256
+/* Histograms/Statistics - 2048 bytes - 512 x 32bits words */
+#define NEO_HIST_STAT_CNT 512
+/* DRC Global histograms - 1664 bytes - 416 x 32bits words */
+#define NEO_DRC_GLOBAL_HIST_ROI_CNT 416
+/* DRC local sum - 4096 - 1024 x 32bits words */
+#define NEO_DRC_LOCAL_SUM_CNT 1024
+/* Vignetting look up table - 6144 bytes - 3072 x 16bits words */
+#define NEO_VIGNETTING_TABLE_SIZE 3072
+/* DRC Global Tonemap - 832 bytes - 416 x 16bits words */
+#define NEO_DRC_GLOBAL_TONEMAP_SIZE 416
+/* DRC Local Tonemap - 1024 bytes - 1024 x 8bits words */
+#define NEO_DRC_LOCAL_TONEMAP_SIZE 1024
+
+/**
+ * enum neoisp_version_e - NXP NEO ISP variants
+ *
+ * @NEOISP_HW_V1: First Neoisp hardware variant used in i.MX95 A0/A1 boards
+ * @NEOISP_HW_V2: Neoisp hardware variant used in i.MX95 B0 boards
+ * @NEOISP_HW_MAX: Neoisp maximum variant index
+ */
+enum neoisp_version_e {
+ NEOISP_HW_V1 = 1,
+ NEOISP_HW_V2,
+ NEOISP_HW_MAX = NEOISP_HW_V2,
+};
+
+/**
+ * struct neoisp_feat_ctrl_s - ISP features control flags
+ *
+ * This register allows applying or bypassing each block parameters. There is
+ * one bit per feature block:
+ *
+ * * 1: Update - settings in associated configuration block are applied
+ * * 0: Don't update - settings in associated configuration block are ignored
+ *
+ * @pipe_conf_cfg: Set 1 to update the Pipeline Configuration unit
+ * @head_color_cfg: Set 1 to update the Head Color unit
+ * @hdr_decompress_input0_cfg: Set 1 to update the HDR Decomp0 unit
+ * @hdr_decompress_input1_cfg: Set 1 to update the HDR Decomp1 unit
+ * @obwb0_cfg: Set 1 to update the OBWB0 unit
+ * @obwb1_cfg: Set 1 to update the OBWB1 unit
+ * @obwb2_cfg: Set 1 to update the OBWB2 unit
+ * @hdr_merge_cfg: Set 1 to update the HDR Merge unit
+ * @rgbir_cfg: Set 1 to update the RGBIR unit
+ * @stat_cfg: Set 1 to update the Statistics unit
+ * @ir_compress_cfg: Set 1 to update the IR Compression unit
+ * @bnr_cfg: Set 1 to update the BNR unit
+ * @vignetting_ctrl_cfg: Set 1 to update the Vignetting unit
+ * @ctemp_cfg: Set 1 to update the Color Temperature unit
+ * @demosaic_cfg: Set 1 to update the Demosaic unit
+ * @rgb2yuv_cfg: Set 1 to update the RGB2IR unit
+ * @dr_comp_cfg: Set 1 to update the DRC unit
+ * @nr_cfg: Set 1 to update the NR unit
+ * @af_cfg: Set 1 to update the AF unit
+ * @ee_cfg: Set 1 to update the EE unit
+ * @df_cfg: Set 1 to update the DF unit
+ * @convmed_cfg: Set 1 to update the CCONV unit
+ * @cas_cfg: Set 1 to update the CAS unit
+ * @gcm_cfg: Set 1 to update the Gamma unit
+ * @vignetting_table_cfg: Set 1 to update the Vignetting LUT unit
+ * @drc_global_tonemap_cfg: Set 1 to update the DRC global tonemap LUT
+ * @drc_local_tonemap_cfg: Set 1 to update the DRC local tonemap LUT
+ */
+struct neoisp_feat_ctrl_s {
+ __u32 pipe_conf_cfg : 1;
+ __u32 head_color_cfg : 1;
+ __u32 hdr_decompress_input0_cfg : 1;
+ __u32 hdr_decompress_input1_cfg : 1;
+ __u32 obwb0_cfg : 1;
+ __u32 obwb1_cfg : 1;
+ __u32 obwb2_cfg : 1;
+ __u32 hdr_merge_cfg : 1;
+ __u32 rgbir_cfg : 1;
+ __u32 stat_cfg : 1;
+ __u32 ir_compress_cfg : 1;
+ __u32 bnr_cfg : 1;
+ __u32 vignetting_ctrl_cfg : 1;
+ __u32 ctemp_cfg : 1;
+ __u32 demosaic_cfg : 1;
+ __u32 rgb2yuv_cfg : 1;
+ __u32 dr_comp_cfg : 1;
+ __u32 nr_cfg : 1;
+ __u32 af_cfg : 1;
+ __u32 ee_cfg : 1;
+ __u32 df_cfg : 1;
+ __u32 convmed_cfg : 1;
+ __u32 cas_cfg : 1;
+ __u32 gcm_cfg : 1;
+ __u32 vignetting_table_cfg : 1;
+ __u32 drc_global_tonemap_cfg : 1;
+ __u32 drc_local_tonemap_cfg : 1;
+};
+
+/**
+ * struct neoisp_pipe_conf_cfg_s - Pipeline Configuration
+ * @img_conf_inalign0: Input image 0 pixel alignment (0: LSB; 1: MSB)
+ * @img_conf_lpalign0: Linepath 0 pixel alignment (0: LSB; 1: MSB)
+ * @img_conf_inalign1: Input image 1 pixel alignment (0: LSB; 1: MSB)
+ * @img_conf_lpalign1: Linepath 1 pixel alignment (0: LSB; 1: MSB)
+ *
+ * These fields configure how the images are fetched into the NEO pipeline.
+ *
+ * INALIGN0/1 configures if the image is fetched MSB or LSB-aligned from the
+ * 16-bit aligned words in the DDR buffer.
+ *
+ * LPALIGN0/1 configures how the N-bit pixel data is fetched from the DDR
+ * buffer will be stored into the ISP internal pipeline.
+ */
+struct neoisp_pipe_conf_cfg_s {
+ __u8 img_conf_inalign0;
+ __u8 img_conf_lpalign0;
+ __u8 img_conf_inalign1;
+ __u8 img_conf_lpalign1;
+};
+
+/**
+ * struct neoisp_head_color_cfg_s - Head color configuration
+ * @ctrl_hoffset: Horizontal Head Pixel offset
+ * @ctrl_voffset: Vertical Head Pixel offset
+ */
+struct neoisp_head_color_cfg_s {
+ __u8 ctrl_hoffset;
+ __u8 ctrl_voffset;
+};
+
+/**
+ * struct neoisp_hdr_decompress0_cfg_s - HDR Decompression for line path 0 configuration
+ * @ctrl_enable: Set 1 to enable HDR decompression unit, 0 disabled
+ * @knee_point1: Knee point 1 value for interpolation step of the decompression
+ * @knee_point2: Knee point 2 value for interpolation step of the decompression
+ * @knee_point3: Knee point 3 value for interpolation step of the decompression
+ * @knee_point4: Knee point 4 value for interpolation step of the decompression
+ * @knee_offset0: Knee point offset 0 value for interpolation step of the decompression
+ * @knee_offset1: Knee point offset 1 value for interpolation step of the decompression
+ * @knee_offset2: Knee point offset 2 value for interpolation step of the decompression
+ * @knee_offset3: Knee point offset 3 value for interpolation step of the decompression
+ * @knee_offset4: Knee point offset 4 value for interpolation step of the decompression
+ * @knee_ratio0: Knee point ratio 0 value for interpolation step of the decompression
+ * @knee_ratio1: Knee point ratio 1 value for interpolation step of the decompression
+ * @knee_ratio2: Knee point ratio 2 value for interpolation step of the decompression
+ * @knee_ratio3: Knee point ratio 3 value for interpolation step of the decompression
+ * @knee_ratio4: Knee point ratio 4 value for interpolation step of the decompression
+ * @knee_npoint0: New knee point 0 value for the output
+ * @knee_npoint1: New knee point 1 value for the output
+ * @knee_npoint2: New knee point 2 value for the output
+ * @knee_npoint3: New knee point 3 value for the output
+ * @knee_npoint4: New knee point 4 value for the output
+ */
+struct neoisp_hdr_decompress0_cfg_s {
+ __u8 ctrl_enable;
+ __u16 knee_point1;
+ __u16 knee_point2;
+ __u16 knee_point3;
+ __u16 knee_point4;
+ __u16 knee_offset0;
+ __u16 knee_offset1;
+ __u16 knee_offset2;
+ __u16 knee_offset3;
+ __u16 knee_offset4;
+ __u16 knee_ratio0;
+ __u16 knee_ratio1;
+ __u16 knee_ratio2;
+ __u16 knee_ratio3;
+ __u16 knee_ratio4;
+ __u32 knee_npoint0;
+ __u32 knee_npoint1;
+ __u32 knee_npoint2;
+ __u32 knee_npoint3;
+ __u32 knee_npoint4;
+};
+
+/**
+ * struct neoisp_hdr_decompress1_cfg_s - HDR Decompression for line path 1 configuration
+ * @ctrl_enable: Set 1 to enable HDR decompression unit, 0 disabled
+ * @knee_point1: Knee point 1 value for interpolation step of the decompression
+ * @knee_point2: Knee point 2 value for interpolation step of the decompression
+ * @knee_point3: Knee point 3 value for interpolation step of the decompression
+ * @knee_point4: Knee point 4 value for interpolation step of the decompression
+ * @knee_offset0: Knee point offset 0 value for interpolation step of the decompression
+ * @knee_offset1: Knee point offset 1 value for interpolation step of the decompression
+ * @knee_offset2: Knee point offset 2 value for interpolation step of the decompression
+ * @knee_offset3: Knee point offset 3 value for interpolation step of the decompression
+ * @knee_offset4: Knee point offset 4 value for interpolation step of the decompression
+ * @knee_ratio0: Knee point ratio 0 value for interpolation step of the decompression
+ * @knee_ratio1: Knee point ratio 1 value for interpolation step of the decompression
+ * @knee_ratio2: Knee point ratio 2 value for interpolation step of the decompression
+ * @knee_ratio3: Knee point ratio 3 value for interpolation step of the decompression
+ * @knee_ratio4: Knee point ratio 4 value for interpolation step of the decompression
+ * @knee_npoint0: New knee point 0 value for the output
+ * @knee_npoint1: New knee point 1 value for the output
+ * @knee_npoint2: New knee point 2 value for the output
+ * @knee_npoint3: New knee point 3 value for the output
+ * @knee_npoint4: New knee point 4 value for the output
+ */
+struct neoisp_hdr_decompress1_cfg_s {
+ __u8 ctrl_enable;
+ __u16 knee_point1;
+ __u16 knee_point2;
+ __u16 knee_point3;
+ __u16 knee_point4;
+ __u16 knee_offset0;
+ __u16 knee_offset1;
+ __u16 knee_offset2;
+ __u16 knee_offset3;
+ __u16 knee_offset4;
+ __u16 knee_ratio0;
+ __u16 knee_ratio1;
+ __u16 knee_ratio2;
+ __u16 knee_ratio3;
+ __u16 knee_ratio4;
+ __u16 knee_npoint0;
+ __u16 knee_npoint1;
+ __u16 knee_npoint2;
+ __u16 knee_npoint3;
+ __u16 knee_npoint4;
+};
+
+#define NEO_OBWB_CNT (3)
+
+/**
+ * struct neoisp_obwb_cfg_s - Optical Black correction and White Balance configuration
+ * @ctrl_obpp: Indicates the size of pixel components output
+ * (0: 12bpp; 1: 14bpp; 2: 16bpp; 3: 20bpp)
+ * @r_ctrl_gain: Provides gain for red channel
+ * @r_ctrl_offset: Provides offset for red channel
+ * @gr_ctrl_gain: Provides gain for green red channel
+ * @gr_ctrl_offset: Provides offset for green red channel
+ * @gb_ctrl_gain: Provides gain for green blue channel
+ * @gb_ctrl_offset: Provides offset for green blue channel
+ * @b_ctrl_gain: Provides gain for blue channel
+ * @b_ctrl_offset: Provides offset for blue channel
+ */
+struct neoisp_obwb_cfg_s {
+ __u8 ctrl_obpp;
+ __u16 r_ctrl_gain;
+ __u16 r_ctrl_offset;
+ __u16 gr_ctrl_gain;
+ __u16 gr_ctrl_offset;
+ __u16 gb_ctrl_gain;
+ __u16 gb_ctrl_offset;
+ __u16 b_ctrl_gain;
+ __u16 b_ctrl_offset;
+};
+
+/**
+ * struct neoisp_hdr_merge_cfg_s - HDR merge of 2 incoming images in a line-by-line manner
+ * @ctrl_enable: Set 1 to enable HDR merge unit, 0 disabled
+ * @ctrl_motion_fix_en: Set 1 to enable fixing of HDR artifacts due to motion
+ * @ctrl_blend_3x3: Selects the HDR blending mode (0: 1x1; 1:3x3)
+ * @ctrl_gain1bpp: Size of pixel components after gain on line path 1
+ * @ctrl_gain0bpp: Size of pixel components after gain on line path 0
+ * @ctrl_obpp: Size of pixel components for the HDR Merge output
+ * @gain_offset_offset1: Offset parameter for input image 1
+ * @gain_offset_offset0: Offset parameter for input image 0
+ * @gain_scale_scale1: Scale factor of input pixel components of image 1
+ * @gain_scale_scale0: Scale factor of input pixel components of image 0
+ * @gain_shift_shift1: Shift factor (right shift) for gained image 1
+ * @gain_shift_shift0: Shift factor (right shift) for gained image 0
+ * @luma_th_th0: Provides luminance threshold 0
+ * @luma_scale_scale: Scaling value which multiplies the threshold-conditioned luminance
+ * @luma_scale_shift: Right shift value the scaling factor
+ * @luma_scale_thshift: Right shift value for binomial output before threshold function
+ * @downscale_imgscale1: Down scaling (right shift) value corresponding to image 1
+ * @downscale_imgscale0: Down scaling (right shift) value corresponding to image 0
+ * @upscale_imgscale1: Up scaling (left shift) value corresponding to image 1
+ * @upscale_imgscale0: Up scaling (left shift) value corresponding to image 0
+ * @post_scale_scale: Down scaling (right shift) of the final blended output
+ */
+struct neoisp_hdr_merge_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_motion_fix_en;
+ __u8 ctrl_blend_3x3;
+ __u8 ctrl_gain1bpp;
+ __u8 ctrl_gain0bpp;
+ __u8 ctrl_obpp;
+ __u16 gain_offset_offset1;
+ __u16 gain_offset_offset0;
+ __u16 gain_scale_scale1;
+ __u16 gain_scale_scale0;
+ __u8 gain_shift_shift1;
+ __u8 gain_shift_shift0;
+ __u16 luma_th_th0;
+ __u16 luma_scale_scale;
+ __u8 luma_scale_shift;
+ __u8 luma_scale_thshift;
+ __u8 downscale_imgscale1;
+ __u8 downscale_imgscale0;
+ __u8 upscale_imgscale1;
+ __u8 upscale_imgscale0;
+ __u8 post_scale_scale;
+};
+
+/**
+ * struct neoisp_roi_cfg_s - common ROI structure
+ * @xpos: Provides the horizontal start position (pixel number) of the ROI
+ * @ypos: Provides the vertical start position (line number) of the ROI
+ * @width: Provides the horizontal width of the ROI
+ * @height: Provides the vertical height of the ROI
+ */
+struct neoisp_roi_cfg_s {
+ __u16 xpos;
+ __u16 ypos;
+ __u16 width;
+ __u16 height;
+};
+
+/**
+ * struct neoisp_stat_hist_cfg_s - common stat histograms structure
+ * @hist_ctrl_offset: Black level correction offset for each pixel
+ * @hist_ctrl_channel: Binary value of channel for binning on respective histogram
+ * @hist_ctrl_pattern: Defines neighbouring pixel 1x1 (0) vs 2x2 (1)
+ * @hist_ctrl_dir_input1_dif: Defines Direct (0) vs Difference (1)
+ * @hist_ctrl_lin_input1_log: Defines Linear (0) vs Logarithmic (1)
+ * @hist_scale_scale: Scaling factor on the input pixel for bin determination
+ */
+struct neoisp_stat_hist_cfg_s {
+ __u16 hist_ctrl_offset;
+ __u8 hist_ctrl_channel;
+ __u8 hist_ctrl_pattern;
+ __u8 hist_ctrl_dir_input1_dif;
+ __u8 hist_ctrl_lin_input1_log;
+ __u32 hist_scale_scale;
+};
+
+#define NEO_RGBIR_ROI_CNT (2)
+#define NEO_RGBIR_STAT_HIST_CNT (2)
+
+/**
+ * struct neoisp_rgbir_cfg_s - RGBIR to RGGB and IR unit configuration
+ * @ctrl_enable: Set 1 to enable RGBIR, 0 disabled
+ * @ccm0_ccm: Color correction parameter for component 0 (crosstalk 0) red if RGGB
+ * @ccm1_ccm: Color correction parameter for component 1 (crosstalk 1) both green if RGGB
+ * @ccm2_ccm: Color correction parameter for component 2 (crosstalk 2) blue if RGGB
+ * @ccm0_th_threshold: Crosstalk removal threshold from channel 3 (IR) to channel 0 (red)
+ * @ccm1_th_threshold: Crosstalk removal threshold from channel 3 (IR) to channel 1 (green)
+ * @ccm2_th_threshold: Crosstalk removal threshold from channel 3 (IR) to channel 2 (blue)
+ * @roi: Array of region of interests
+ * @hists: Array of histograms parameters
+ */
+struct neoisp_rgbir_cfg_s {
+ __u8 ctrl_enable;
+ __u16 ccm0_ccm;
+ __u16 ccm1_ccm;
+ __u16 ccm2_ccm;
+ __u32 ccm0_th_threshold;
+ __u32 ccm1_th_threshold;
+ __u32 ccm2_th_threshold;
+ struct neoisp_roi_cfg_s roi[NEO_RGBIR_ROI_CNT];
+ struct neoisp_stat_hist_cfg_s hists[NEO_RGBIR_STAT_HIST_CNT];
+};
+
+#define NEO_STAT_HIST_CNT (4)
+
+/**
+ * struct neoisp_stat_cfg_s - Statistics and Histogram unit configuration
+ * @roi0: Region of interest 0
+ * @roi1: Region of interest 1
+ * @hists: Control parameters for building the histogram
+ */
+struct neoisp_stat_cfg_s {
+ struct neoisp_roi_cfg_s roi0;
+ struct neoisp_roi_cfg_s roi1;
+ struct neoisp_stat_hist_cfg_s hists[NEO_STAT_HIST_CNT];
+};
+
+/**
+ * struct neoisp_ir_compress_cfg_s - Infra-red Compression unit configuration
+ * @ctrl_enable: Set 1 to enable ir compression, 0 disabled
+ * @ctrl_obpp: bpp of compressed output IR (0: 8bpp; 1: 16bpp)
+ * @knee_point1_kneepoint: Knee point 1 value for interpolation step of ir compression
+ * @knee_point2_kneepoint: Knee point 2 value for interpolation step of ir compression
+ * @knee_point3_kneepoint: Knee point 3 value for interpolation step of ir compression
+ * @knee_point4_kneepoint: Knee point 4 value for interpolation step of ir compression
+ * @knee_offset0_offset: Offset 0 value for interpolation step of ir compression
+ * @knee_offset1_offset: Offset 1 value for interpolation step of ir compression
+ * @knee_offset2_offset: Offset 2 value for interpolation step of ir compression
+ * @knee_offset3_offset: Offset 3 value for interpolation step of ir compression
+ * @knee_offset4_offset: Offset 4 value for interpolation step of ir compression
+ * @knee_ratio01_ratio0: Ratio 0 value for interpolation step of ir compression (u1.15)
+ * @knee_ratio01_ratio1: Ratio 1 value for interpolation step of ir compression (u1.15)
+ * @knee_ratio23_ratio2: Ratio 2 value for interpolation step of ir compression (u1.15)
+ * @knee_ratio23_ratio3: Ratio 3 value for interpolation step of ir compression (u1.15)
+ * @knee_ratio4_ratio4: Ratio 4 value for interpolation step of ir compression (u1.15)
+ * @knee_npoint0_kneepoint: New 0 knee point value for the output
+ * @knee_npoint1_kneepoint: New 1 knee point value for the output
+ * @knee_npoint2_kneepoint: New 2 knee point value for the output
+ * @knee_npoint3_kneepoint: New 3 knee point value for the output
+ * @knee_npoint4_kneepoint: New 4 knee point value for the output
+ */
+struct neoisp_ir_compress_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_obpp;
+ __u32 knee_point1_kneepoint;
+ __u32 knee_point2_kneepoint;
+ __u32 knee_point3_kneepoint;
+ __u32 knee_point4_kneepoint;
+ __u32 knee_offset0_offset;
+ __u32 knee_offset1_offset;
+ __u32 knee_offset2_offset;
+ __u32 knee_offset3_offset;
+ __u32 knee_offset4_offset;
+ __u16 knee_ratio01_ratio0;
+ __u16 knee_ratio01_ratio1;
+ __u16 knee_ratio23_ratio2;
+ __u16 knee_ratio23_ratio3;
+ __u16 knee_ratio4_ratio4;
+ __u16 knee_npoint0_kneepoint;
+ __u16 knee_npoint1_kneepoint;
+ __u16 knee_npoint2_kneepoint;
+ __u16 knee_npoint3_kneepoint;
+ __u16 knee_npoint4_kneepoint;
+};
+
+/**
+ * struct neoisp_bnr_cfg_s - Bayer Noise Reduction unit configuration
+ * @ctrl_enable: Set 1 to enable BNR, 0 disabled
+ * @ctrl_debug: Debug view for on-target tuning (0:off)
+ * @ctrl_obpp: Output bpp (0: 12bpp; 1: 14bpp; 2: 16bpp; 3: 20bpp)
+ * @ctrl_nhood: Neighbourhood Pattern (0: 2x2; 1: 1x1)
+ * @ypeak_peak_outsel: Output scaling (0: no scaling; 1: enable scaling)
+ * @ypeak_peak_sel: Selecting the boundary pixel among the sorted list (0..3: 1..4 positions)
+ * @ypeak_peak_low: Lower scale value of the clipping function (u4.8)
+ * @ypeak_peak_high: Higher scale value of the clipping function (u4.8)
+ * @yedge_th0_edge_th0: Lower edge threshold for long alpha blending coefficient calculation
+ * @yedge_scale_scale: Scaling factor for long alpha blending factor determination
+ * @yedge_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @yedges_th0_edge_th0: Lower threshold for short alpha blending function in the BNR
+ * @yedges_scale_scale: Scale factor for determining the short alpha blending threshold value
+ * @yedges_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @yedgea_th0_edge_th0: Lower threshold for final alpha blending function in the BNR
+ * @yedgea_scale_scale: Scale factor for determining the final alpha blending threshold value
+ * @yedgea_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @yluma_x_th0_th: X threshold 0 for blending coefficient calculation
+ * @yluma_y_th_luma_y_th0: 10-bit value for Y threshold 0
+ * @yluma_y_th_luma_y_th1: 10-bit value for Y threshold 1
+ * @yluma_scale_scale: Scale for the threshold-conditioned luma factor determination
+ * @yluma_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @yalpha_gain_gain: Gain value (multiplication factor) for the alpha coefficient
+ * @yalpha_gain_offset: Offset value (addition factor) for the gain'd alpha coefficient
+ * @cpeak_peak_outsel: Set 1 to enable scaling of the output, 0 no scaling
+ * @cpeak_peak_sel: Provides selection for selecting the boundary pixel among the sorted list
+ * @cpeak_peak_low: ower scale value of the clipping function (u4.8)
+ * @cpeak_peak_high: Higher scale value of the clipping function (u4.8)
+ * @cedge_th0_edge_th0: Lower threshold for blending function in the BNR unit
+ * @cedge_scale_scale: Scale for the threshold-conditioned blending factor determination
+ * @cedge_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @cedges_th0_edge_th0: Lower threshold for short alpha blending function in the BNR unit
+ * @cedges_scale_scale: Scale for the threshold-conditioned short alpha blending factor
+ * @cedges_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @cedgea_th0_edge_th0: Lower threshold for final alpha blending function
+ * @cedgea_scale_scale: Scale for the threshold-conditioned final alpha blending factor
+ * @cedgea_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @cluma_x_th0_th: Provides the X threshold 0 for blending coefficient calculation
+ * @cluma_y_th_luma_y_th0: 10-bit value for Y threshold 0
+ * @cluma_y_th_luma_y_th1: 10-bit value for Y threshold 1
+ * @cluma_scale_scale: Scale for the threshold-conditioned luma factor determination
+ * @cluma_scale_shift: Right shift factor for blending factor determination
+ * For example, a shift value of 10, implements u6.10 scaling factor
+ * @calpha_gain_gain: Provides the gain value (multiplication factor) for the alpha coefficient
+ * @calpha_gain_offset: Provides the offset value (addition factor) for the gain'd alpha coefficient
+ * @stretch_gain: Provides the gain factor for all the pixels at the output of BNR (u8.8)
+ * This gain is applied even when BNR is disabled
+ */
+struct neoisp_bnr_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_debug;
+ __u8 ctrl_obpp;
+ __u8 ctrl_nhood;
+ __u8 ypeak_peak_outsel;
+ __u8 ypeak_peak_sel;
+ __u16 ypeak_peak_low;
+ __u16 ypeak_peak_high;
+ __u32 yedge_th0_edge_th0;
+ __u16 yedge_scale_scale;
+ __u8 yedge_scale_shift;
+ __u32 yedges_th0_edge_th0;
+ __u16 yedges_scale_scale;
+ __u8 yedges_scale_shift;
+ __u32 yedgea_th0_edge_th0;
+ __u16 yedgea_scale_scale;
+ __u8 yedgea_scale_shift;
+ __u32 yluma_x_th0_th;
+ __u16 yluma_y_th_luma_y_th0;
+ __u16 yluma_y_th_luma_y_th1;
+ __u16 yluma_scale_scale;
+ __u8 yluma_scale_shift;
+ __u16 yalpha_gain_gain;
+ __u16 yalpha_gain_offset;
+ __u8 cpeak_peak_outsel;
+ __u8 cpeak_peak_sel;
+ __u16 cpeak_peak_low;
+ __u16 cpeak_peak_high;
+ __u32 cedge_th0_edge_th0;
+ __u16 cedge_scale_scale;
+ __u8 cedge_scale_shift;
+ __u32 cedges_th0_edge_th0;
+ __u16 cedges_scale_scale;
+ __u8 cedges_scale_shift;
+ __u32 cedgea_th0_edge_th0;
+ __u16 cedgea_scale_scale;
+ __u8 cedgea_scale_shift;
+ __u32 cluma_x_th0_th;
+ __u16 cluma_y_th_luma_y_th0;
+ __u16 cluma_y_th_luma_y_th1;
+ __u16 cluma_scale_scale;
+ __u8 cluma_scale_shift;
+ __u16 calpha_gain_gain;
+ __u16 calpha_gain_offset;
+ __u16 stretch_gain;
+};
+
+/**
+ * struct neoisp_vignetting_ctrl_cfg_s - Vignetting controlling configuration
+ * @ctrl_enable: Set 1 to enable vignetting, 0 disabled
+ * @blk_conf_rows: Provides number of rows into which the input image is partitioned
+ * @blk_conf_cols: Provides number of columns into which the input image is partitioned
+ * @blk_size_ysize: Number of rows per block
+ * @blk_size_xsize: Number of pixels per block
+ * @blk_stepy_step: Vertical scaling factor (u0.16)
+ * @blk_stepx_step: Horizontal scaling factor (u0.16)
+ */
+struct neoisp_vignetting_ctrl_cfg_s {
+ __u8 ctrl_enable;
+ __u8 blk_conf_rows;
+ __u8 blk_conf_cols;
+ __u16 blk_size_ysize;
+ __u16 blk_size_xsize;
+ __u16 blk_stepy_step;
+ __u16 blk_stepx_step;
+};
+
+#define NEO_CTEMP_COLOR_ROIS_CNT (10)
+#define NEO_CTEMP_CSC_MATRIX_SIZE (3)
+#define NEO_CTEMP_CSC_OFFSET_VECTOR_SIZE (4)
+
+/**
+ * struct neoisp_ctemp_roi_desc_s - common color ROI Position Register
+ * @pos_roverg_low: Low value of red over green (u1.7)
+ * @pos_roverg_high: High value of red over green (u1.7)
+ * @pos_boverg_low: Low value of blue over green (u1.7)
+ * @pos_boverg_high: High value of blue over green (u1.7)
+ */
+struct neoisp_ctemp_roi_desc_s {
+ __u8 pos_roverg_low;
+ __u8 pos_roverg_high;
+ __u8 pos_boverg_low;
+ __u8 pos_boverg_high;
+};
+
+/**
+ * struct neoisp_ctemp_cfg_s - Color temperature unit configuration
+ * @ctrl_enable: Set 1 to enable color temperature unit, 0 disabled
+ * @ctrl_cscon: Color Space Correction ON (1), (0) disabled
+ * @ctrl_ibpp: Size of pixel components on input (0: 12bpp; 1: 14bpp; 2: 16bpp; 3: 20bpp)
+ * @luma_th_thl: Provides the low threshold for luminance range check
+ * @luma_th_thh: Provides the high threshold for luminance range check
+ * @roi: Array of regions of interest
+ * @redgain_min: Minimum gain for the red channel (u1.7)
+ * @redgain_max: Maximum gain for the red channel (u1.7)
+ * @bluegain_min: Minimum gain for the blue channel (u1.7)
+ * @bluegain_max: Maximum gain for the blue channel (u1.7)
+ * @point1_blue: Point 1 value for blue over green curve (u1.7)
+ * @point1_red: Point 1 value for red over green curve (u1.7)
+ * @point2_blue: Point 2 value for blue over green curve (u1.7)
+ * @point2_red: Point 2 value for red over green curve (u1.7)
+ * @hoffset_right: Offset in increasing horizontal indices (u1.7)
+ * @hoffset_left: Offset in decreasing horizontal indices (u1.7)
+ * @voffset_up: Offset in increasing vertical indices (u1.7)
+ * @voffset_down: Offset in decreasing vertical indices (u1.7)
+ * @point1_slope_slope_l: Left slope for point 1 (s8.8)
+ * @point1_slope_slope_r: Right slope for point 1 (s8.8)
+ * @point2_slope_slope_l: Left slope for point 2 (s8.8)
+ * @point2_slope_slope_r: Right slope for point 2 (s8.8)
+ * @csc_matrix: A 3x3 color space correction matrix for respective camera context (s8.8)
+ * @offsets: Correction offsets values of input filter array pixel
+ * @stat_blk_size0_xsize: Number of pixels per block. Should always be multiple of 2
+ * @stat_blk_size0_ysize: Number of image lines per block. Should always be multiple of 2
+ * @color_rois: Array of color regions of interest
+ * @gr_avg_in_gr_agv: Subtracted from the GR values before accumulation into the GR vs GB sums
+ * @gb_avg_in_gb_agv: Subtracted from the GB values before accumulation into the GR vs GB sums
+ */
+struct neoisp_ctemp_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_cscon;
+ __u8 ctrl_ibpp;
+ __u16 luma_th_thl;
+ __u16 luma_th_thh;
+ struct neoisp_roi_cfg_s roi;
+ __u8 redgain_min;
+ __u8 redgain_max;
+ __u8 bluegain_min;
+ __u8 bluegain_max;
+ __u8 point1_blue;
+ __u8 point1_red;
+ __u8 point2_blue;
+ __u8 point2_red;
+ __u8 hoffset_right;
+ __u8 hoffset_left;
+ __u8 voffset_up;
+ __u8 voffset_down;
+ __s16 point1_slope_slope_l;
+ __s16 point1_slope_slope_r;
+ __s16 point2_slope_slope_l;
+ __s16 point2_slope_slope_r;
+ __s16 csc_matrix[NEO_CTEMP_CSC_MATRIX_SIZE][NEO_CTEMP_CSC_MATRIX_SIZE];
+ __s16 offsets[NEO_CTEMP_CSC_OFFSET_VECTOR_SIZE];
+ __u16 stat_blk_size0_xsize;
+ __u16 stat_blk_size0_ysize;
+ struct neoisp_ctemp_roi_desc_s color_rois[NEO_CTEMP_COLOR_ROIS_CNT];
+ __u32 gr_avg_in_gr_agv;
+ __u32 gb_avg_in_gb_agv;
+};
+
+/**
+ * struct neoisp_demosaic_cfg_s - Demosaic function on the input bayer image configuration
+ * @ctrl_fmt: Format of the input image (0: rggb; 1: rccc; 2: monochrome)
+ * @activity_ctl_alpha: Alpha Blending Factor (u1.8)
+ * @activity_ctl_act_ratio: Activity Ratio (u8.8)
+ * @dynamics_ctl0_strengthg: Feedback strength for green pixel interpolation (u8.8)
+ * @dynamics_ctl0_strengthc: Feedback strength for color (red or blue) pixel interpolation (u8.8)
+ * @dynamics_ctl2_max_impact: Maximum impact of the dynamics on the interpolated values (u8.8)
+ */
+struct neoisp_demosaic_cfg_s {
+ __u8 ctrl_fmt;
+ __u16 activity_ctl_alpha;
+ __u16 activity_ctl_act_ratio;
+ __u16 dynamics_ctl0_strengthg;
+ __u16 dynamics_ctl0_strengthc;
+ __u16 dynamics_ctl2_max_impact;
+};
+
+#define NEO_RGB2YUV_MATRIX_SIZE (3)
+
+/**
+ * struct neoisp_rgb2yuv_cfg_s - Color space conversion RGB to YUV data configuration
+ * @gain_ctrl_rgain: Provides the gain factor corresponding to red component
+ * @gain_ctrl_bgain: Provides the gain factor corresponding to blue component
+ * @mat_rxcy: Provides the values of elements of the 3x3 color space conversion matrix
+ * @csc_offsets: Provides the offsets of the color space conversion matrix (s21)
+ */
+struct neoisp_rgb2yuv_cfg_s {
+ __u16 gain_ctrl_rgain;
+ __u16 gain_ctrl_bgain;
+ __s16 mat_rxcy[NEO_RGB2YUV_MATRIX_SIZE][NEO_RGB2YUV_MATRIX_SIZE];
+ __s32 csc_offsets[NEO_RGB2YUV_MATRIX_SIZE];
+};
+
+/**
+ * struct neoisp_dr_comp_cfg_s - Dynamic Range Compression unit configuration
+ * @roi0: Region of interest 0
+ * @roi1: Region of interest 1
+ * @groi_sum_shift_shift0: Global ROI 0 sum shift value (u5)
+ * @groi_sum_shift_shift1: Global ROI 1 sum shift value (u5)
+ * @gbl_gain_gain: Provides a gain for the global DRC (u8.8)
+ * @lcl_blk_size_xsize: Provides number of pixels per block
+ * @lcl_blk_size_ysize: Provides number of rows per block
+ * @lcl_stretch_offset: Black level value before applying gamma
+ * @lcl_stretch_stretch: Provides local DRC stretch value of the input (u8.8)
+ * @lcl_blk_stepx_step: Horizontal scaling factor (u0.16)
+ * @lcl_blk_stepy_step: Vertical scaling factor (u0.16)
+ * @lcl_sum_shift_shift: Provides shift value for building the local DRC (u5)
+ * @alpha_alpha: Alpha value for blending step between global and local DRC (u9)
+ */
+struct neoisp_dr_comp_cfg_s {
+ struct neoisp_roi_cfg_s roi0;
+ struct neoisp_roi_cfg_s roi1;
+ __u8 groi_sum_shift_shift0;
+ __u8 groi_sum_shift_shift1;
+ __u16 gbl_gain_gain;
+ __u16 lcl_blk_size_xsize;
+ __u16 lcl_blk_size_ysize;
+ __u16 lcl_stretch_offset;
+ __u16 lcl_stretch_stretch;
+ __u16 lcl_blk_stepx_step;
+ __u16 lcl_blk_stepy_step;
+ __u8 lcl_sum_shift_shift;
+ __u16 alpha_alpha;
+};
+
+/**
+ * struct neoisp_nr_cfg_s - Noise Reduction unit configuration
+ * @ctrl_enable: Set 1 to enable noise reduction unit, 0 disabled
+ * @ctrl_debug: This field controls if tuning/debug information
+ * @blend_scale_gain: Gain value for the blending factor determination (u4.4)
+ * @blend_scale_shift: Shift value for the blending factor determination
+ * @blend_scale_scale: Scale factor for the blending factor determination
+ * @blend_th0_th: Provides threshold 0 value for determining the blending factor (u20)
+ */
+struct neoisp_nr_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_debug;
+ __u8 blend_scale_gain;
+ __u8 blend_scale_shift;
+ __u16 blend_scale_scale;
+ __u32 blend_th0_th;
+};
+
+#define NEO_AF_ROIS_CNT (9)
+#define NEO_AF_FILTERS_CNT (9)
+
+/**
+ * struct neoisp_af_cfg_s - AutoFocus unit configuration
+ * @af_roi: Array of regions of interest
+ * @fil0_coeffs: Array of Autofocus Filter 0 Coefficients
+ * @fil0_shift_shift: Provides the shift (scale down) factor at the output of filter 0 (u5)
+ * @fil1_coeffs: Array of Autofocus Filter 1 Coefficients
+ * @fil1_shift_shift: Provides the shift (scale down) factor at the output of filter 1 (u5)
+ */
+struct neoisp_af_cfg_s {
+ struct neoisp_roi_cfg_s af_roi[NEO_AF_ROIS_CNT];
+ __s8 fil0_coeffs[NEO_AF_FILTERS_CNT];
+ __u8 fil0_shift_shift;
+ __s8 fil1_coeffs[NEO_AF_FILTERS_CNT];
+ __u8 fil1_shift_shift;
+};
+
+/**
+ * struct neoisp_ee_cfg_s - Edge Enhancement unit configuration
+ * @ctrl_enable: Set 1 to enable edge enhancement, 0 disabled
+ * @ctrl_debug: This field controls if tuning/debug information is shown in the
+ * output image (0: Off; 1: edge pixels shown as white; 2: edge
+ * pixels shown as white and all others)
+ * @maskgain_gain: Gain value for the HPF factor determination (u4.4)
+ * @coring_coring: Coring value for the mask factor determination (u20)
+ * @clip_clip: Clip value for the mask factor determination (u20)
+ */
+struct neoisp_ee_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_debug;
+ __u8 maskgain_gain;
+ __u32 coring_coring;
+ __u32 clip_clip;
+};
+
+/**
+ * struct neoisp_df_cfg_s - Direction Filter unit configuration
+ * @ctrl_enable: Set 1 to enable direction filter, 0 disabled
+ * @ctrl_debug: This field controls if tuning/debug information
+ * @blend_shift_shift: Shift factor for the blending factor determination (u6)
+ * @th_scale_scale: Scale factor for the blending factor determination (u20)
+ * @blend_th0_th: Provides threshold 0 value for determining the blending factor (u20)
+ */
+struct neoisp_df_cfg_s {
+ __u8 ctrl_enable;
+ __u8 ctrl_debug;
+ __u8 blend_shift_shift;
+ __u32 th_scale_scale;
+ __u32 blend_th0_th;
+};
+
+/**
+ * struct neoisp_convmed_cfg_s - Color Convolution and Median Filter unit configuration
+ * @ctrl_flt: This field controls the type of filtering to be executed:
+ * (0: bypassed; 1: convolution (5x5 binomial); 2: median (5x5))
+ */
+struct neoisp_convmed_cfg_s {
+ __u8 ctrl_flt;
+};
+
+/**
+ * struct neoisp_cas_cfg_s - Color Adaptive Saturation unit configuration
+ * @gain_shift: Shift value for the suppression factor determination
+ * @gain_scale: Scale factor for the suppression factor
+ * @corr_corr: Minimum correction factor for dark pixels (u8.8)
+ * @offset_offset: Offset value for the suppression factor determination
+ */
+struct neoisp_cas_cfg_s {
+ __u8 gain_shift;
+ __u16 gain_scale;
+ __u16 corr_corr;
+ __u16 offset_offset;
+};
+
+#define NEO_GAMMA_MATRIX_SIZE (3)
+#define NEO_GAMMA_OFFSETS_SIZE (3)
+
+/**
+ * struct neoisp_gcm_cfg_s - Gamma Correction Matrix unit configuration
+ * @imat_rxcy: 3x3 input gamma correction matrix (s8.8)
+ * @ioffsets: Offset values for input channels
+ * @omat_rxcy: 3x3 output gamma correction matrix
+ * @ooffsets: Offset values of 3x3 output matrix (s12)
+ * @gamma0_gamma0: Provides the gamma value of channel 0 (u1.8)
+ * @gamma0_offset0: Provides the offset value of channel 0 (u12)
+ * @gamma1_gamma1: Provides the gamma value of channel 1 (u1.8)
+ * @gamma1_offset1: Provides the offset value of channel 1 (u12)
+ * @gamma2_gamma2: Provides the gamma value of channel 2 (u1.8)
+ * @gamma2_offset2: Provides the offset value of channel 2 (u12)
+ * @blklvl0_ctrl_gain0: Gain value for the linear part of the channel 0 gamma curve (u8.8)
+ * @blklvl0_ctrl_offset0: Blacklevel value to be subtracted on channel 0
+ * @blklvl1_ctrl_gain1: Gain value for the linear part of the channel 1 gamma curve (u8.8)
+ * @blklvl1_ctrl_offset1: Blacklevel value to be subtracted on channel 1
+ * @blklvl2_ctrl_gain2: Gain value for the linear part of the channel 2 gamma curve (u8.8)
+ * @blklvl2_ctrl_offset2: Blacklevel value to be subtracted on channel 2
+ * @lowth_ctrl01_threshold0: Threshold for low area of the dynamic range of channel 0 (u12.4)
+ * @lowth_ctrl01_threshold1: Threshold for low area of the dynamic range of channel 1 (u12.4)
+ * @lowth_ctrl2_threshold2: Threshold for low area of the dynamic range of channel 2 (u12.4)
+ * @mat_confg_sign_confg: Set 0 for signe gcm, 1 Unsigned
+ */
+struct neoisp_gcm_cfg_s {
+ __s16 imat_rxcy[NEO_GAMMA_MATRIX_SIZE][NEO_GAMMA_MATRIX_SIZE];
+ __s16 ioffsets[NEO_GAMMA_OFFSETS_SIZE];
+ __s16 omat_rxcy[NEO_GAMMA_MATRIX_SIZE][NEO_GAMMA_MATRIX_SIZE];
+ __s16 ooffsets[NEO_GAMMA_OFFSETS_SIZE];
+ __u16 gamma0_gamma0;
+ __u16 gamma0_offset0;
+ __u16 gamma1_gamma1;
+ __u16 gamma1_offset1;
+ __u16 gamma2_gamma2;
+ __u16 gamma2_offset2;
+ __u16 blklvl0_ctrl_gain0;
+ __s16 blklvl0_ctrl_offset0;
+ __u16 blklvl1_ctrl_gain1;
+ __s16 blklvl1_ctrl_offset1;
+ __u16 blklvl2_ctrl_gain2;
+ __s16 blklvl2_ctrl_offset2;
+ __u16 lowth_ctrl01_threshold0;
+ __u16 lowth_ctrl01_threshold1;
+ __u16 lowth_ctrl2_threshold2;
+ __u8 mat_confg_sign_confg;
+};
+
+/**
+ * struct neoisp_vignetting_table_mem_params_s - Vignetting table values
+ * @vignetting_table: Array of vignetting lookup table
+ */
+struct neoisp_vignetting_table_mem_params_s {
+ __u16 vignetting_table[NEO_VIGNETTING_TABLE_SIZE];
+};
+
+/**
+ * struct neoisp_drc_global_tonemap_mem_params_s - DRC Global Tonemap
+ * @drc_global_tonemap: Global DRC tonemap lookup table
+ */
+struct neoisp_drc_global_tonemap_mem_params_s {
+ __u16 drc_global_tonemap[NEO_DRC_GLOBAL_TONEMAP_SIZE];
+};
+
+/**
+ * struct neoisp_drc_local_tonemap_mem_params_s - DRC Local Tonemap
+ * @drc_local_tonemap: Local DRC tonemap lookup table
+ */
+struct neoisp_drc_local_tonemap_mem_params_s {
+ __u8 drc_local_tonemap[NEO_DRC_LOCAL_TONEMAP_SIZE];
+};
+
+/**
+ * struct neoisp_reg_params_s - Neoisp parameters accessed over registers
+ *
+ * This struct contains configuration parameters of the various Neoisp units,
+ * located in Pipeline 1, Pipeline 2 and Denoising pipelines, which are accessed
+ * over register address space. However, not all register bit fields are not
+ * available from userspace, only the relevant parameters are present.
+ *
+ * Userspace's algorithms are responsible for fully populating each block. Some
+ * optional blocks have their own 'enable' bit. Driver may omit block containt
+ * if this bit is not set to enabled state. If userspace wants the parameters to
+ * be applied as expected, 'enable' bit must also be set then.
+ *
+ * @pipe_conf: Pipeline configuration
+ * @head_color: Head color unit configuration
+ * @decompress_input0: HDR Decompression for line path 0 unit configuration
+ * @decompress_input1: HDR Decompression for line path 1 unit configuration
+ * @obwb: Optical Black correction and White Balance units configuration
+ * @hdr_merge: HDR merge unit configuration
+ * @rgbir: RGBIR to RGGB and IR unit configuration
+ * @stat: Statistics and Histogram unit configuration
+ * @ir_compress: Infra-red Compression unit configuration
+ * @bnr: Bayer Noise Reduction unit configuration
+ * @vignetting_ctrl: Vignetting controlling configuration
+ * @ctemp: Color temperature unit configuration
+ * @demosaic: Demosaic unit configuration
+ * @rgb2yuv: RGB to YUV unit configuration
+ * @drc: Dynamic Range Compression unit configuration
+ * @nr: Noise Reduction unit configuration
+ * @af: AutoFocus unit configuration
+ * @ee: Edge Enhancement unit configuration
+ * @df: Direction Filter unit configuration
+ * @convmed: Color Convolution and Median Filter unit configuration
+ * @cas: Color Adaptive Saturation unit configuration
+ * @gcm: Gamma Correction Matrix unit configuration
+ */
+struct neoisp_reg_params_s {
+ /* Control */
+ struct neoisp_pipe_conf_cfg_s pipe_conf;
+
+ /* Pipeline 1 */
+ struct neoisp_head_color_cfg_s head_color;
+ struct neoisp_hdr_decompress0_cfg_s decompress_input0;
+ struct neoisp_hdr_decompress1_cfg_s decompress_input1;
+ struct neoisp_obwb_cfg_s obwb[NEO_OBWB_CNT];
+ struct neoisp_hdr_merge_cfg_s hdr_merge;
+ struct neoisp_rgbir_cfg_s rgbir;
+ struct neoisp_stat_cfg_s stat;
+ struct neoisp_ir_compress_cfg_s ir_compress;
+ struct neoisp_bnr_cfg_s bnr;
+ struct neoisp_vignetting_ctrl_cfg_s vignetting_ctrl;
+ struct neoisp_ctemp_cfg_s ctemp;
+
+ /* Pipeline 2 */
+ struct neoisp_demosaic_cfg_s demosaic;
+ struct neoisp_rgb2yuv_cfg_s rgb2yuv;
+ struct neoisp_dr_comp_cfg_s drc;
+
+ /* Denoising pipeline */
+ struct neoisp_nr_cfg_s nr;
+ struct neoisp_af_cfg_s af;
+ struct neoisp_ee_cfg_s ee;
+ struct neoisp_df_cfg_s df;
+ struct neoisp_convmed_cfg_s convmed;
+ struct neoisp_cas_cfg_s cas;
+ struct neoisp_gcm_cfg_s gcm;
+};
+
+/**
+ * struct neoisp_mem_params_s - Neoisp parameters accessed over local memories
+ *
+ * This struct contains parameters blocks accessed over local memories.
+ *
+ * @vt: Vignetting table LUT
+ * @gtm: Global Tonemap LUT
+ * @ltm: Local Tonemap LUT
+ */
+struct neoisp_mem_params_s {
+ struct neoisp_vignetting_table_mem_params_s vt;
+ struct neoisp_drc_global_tonemap_mem_params_s gtm;
+ struct neoisp_drc_local_tonemap_mem_params_s ltm;
+};
+
+/**
+ * struct neoisp_meta_params_s - Neoisp legacy parameters
+ *
+ * This struct contains all configuration parameters for the various Neoisp
+ * blocks. It is used when userspace doesn't support extended API. The full
+ * parameters buffer is copied for every frame, even if some blocks are not
+ * relevant.
+ *
+ * Userspace's algorithms are responsible for correctly populating all the
+ * parameters blocks. However, local memory parameters @mems must be filled
+ * before starting camera streaming to be applied as expected. @regs can be
+ * updated at any time.
+ *
+ * @features_cfg field is used to control whether a parameters block must be
+ * applied or not, see :c:type:`neoisp_feat_ctrl_s`. It allows bypassing some
+ * block(s) easily.
+ *
+ * @frame_id: Frame index the parameters are computed from
+ * @features_cfg: Bitfield mask to ignore some configuration blocks
+ * @regs: Neoisp parameters accessed over registers
+ * @mems: Neoisp parameters accessed over local memories
+ */
+struct neoisp_meta_params_s {
+ __u32 frame_id;
+ struct neoisp_feat_ctrl_s features_cfg;
+ struct neoisp_reg_params_s regs;
+ struct neoisp_mem_params_s mems;
+};
+
+/*
+ * Extensible parameters
+ */
+
+/**
+ * enum neoisp_param_block_type_e - Enumeration of Neoisp parameter blocks
+ *
+ * This enumeration defines the types of Neoisp parameters block. Each entry
+ * configures a specific processing block of the Neoisp. The block type
+ * allows the driver to correctly interpret the parameters block data.
+ *
+ * It is the responsibility of userspace to correctly set the type of each
+ * parameters block.
+ *
+ * @NEOISP_PARAM_BLK_PIPE_CONF: Pipe configuration block
+ * @NEOISP_PARAM_BLK_HEAD_COLOR: Head Color block
+ * @NEOISP_PARAM_BLK_HDR_DECOMPRESS0: HDR decompression of line path 0
+ * @NEOISP_PARAM_BLK_HDR_DECOMPRESS1: HDR decompression of line path 1
+ * @NEOISP_PARAM_BLK_OBWB0: Optical Black Correction and White Balance of line path 0
+ * @NEOISP_PARAM_BLK_OBWB1: Optical Black Correction and White Balance of line path 1
+ * @NEOISP_PARAM_BLK_OBWB2: Optical Black Correction and White Balance of merged path
+ * @NEOISP_PARAM_BLK_HDR_MERGE: HDR merge block
+ * @NEOISP_PARAM_BLK_RGBIR: RGB-IR block
+ * @NEOISP_PARAM_BLK_STAT: Statistics block
+ * @NEOISP_PARAM_BLK_IR_COMPRESS: Infrared compression block
+ * @NEOISP_PARAM_BLK_BNR: Bayer noise reduction block
+ * @NEOISP_PARAM_BLK_VIGNETTING_CTRL: Vignetting control block
+ * @NEOISP_PARAM_BLK_CTEMP: Color temperature block
+ * @NEOISP_PARAM_BLK_DEMOSAIC: Demosaicing block
+ * @NEOISP_PARAM_BLK_RGB2YUV: RGB to YUV block
+ * @NEOISP_PARAM_BLK_DR_COMP: Dynamic range compression
+ * @NEOISP_PARAM_BLK_NR: Noise reduction block
+ * @NEOISP_PARAM_BLK_AF: Auto focus block
+ * @NEOISP_PARAM_BLK_EE: Edge enhancement block
+ * @NEOISP_PARAM_BLK_DF: Direction filter block
+ * @NEOISP_PARAM_BLK_CONVMED: Convolution and median filter block
+ * @NEOISP_PARAM_BLK_CAS: Color adaptive saturation block
+ * @NEOISP_PARAM_BLK_GCM: Gamma correction matrix block
+ * @NEOISP_PARAM_BLK_VIGNETTING_TABLE: Vignetting lookup table
+ * @NEOISP_PARAM_BLK_DRC_GLOBAL_TONEMAP: Global tonemap table
+ * @NEOISP_PARAM_BLK_DRC_LOCAL_TONEMAP: Local tonemap table
+ */
+enum neoisp_param_block_type_e {
+ NEOISP_PARAM_BLK_PIPE_CONF,
+ NEOISP_PARAM_BLK_HEAD_COLOR,
+ NEOISP_PARAM_BLK_HDR_DECOMPRESS0,
+ NEOISP_PARAM_BLK_HDR_DECOMPRESS1,
+ NEOISP_PARAM_BLK_OBWB0,
+ NEOISP_PARAM_BLK_OBWB1,
+ NEOISP_PARAM_BLK_OBWB2,
+ NEOISP_PARAM_BLK_HDR_MERGE,
+ NEOISP_PARAM_BLK_RGBIR,
+ NEOISP_PARAM_BLK_STAT,
+ NEOISP_PARAM_BLK_CTEMP,
+ NEOISP_PARAM_BLK_IR_COMPRESS,
+ NEOISP_PARAM_BLK_BNR,
+ NEOISP_PARAM_BLK_VIGNETTING_CTRL,
+ NEOISP_PARAM_BLK_DEMOSAIC,
+ NEOISP_PARAM_BLK_RGB2YUV,
+ NEOISP_PARAM_BLK_DR_COMP,
+ NEOISP_PARAM_BLK_NR,
+ NEOISP_PARAM_BLK_AF,
+ NEOISP_PARAM_BLK_EE,
+ NEOISP_PARAM_BLK_DF,
+ NEOISP_PARAM_BLK_CONVMED,
+ NEOISP_PARAM_BLK_CAS,
+ NEOISP_PARAM_BLK_GCM,
+ NEOISP_PARAM_BLK_VIGNETTING_TABLE,
+ NEOISP_PARAM_BLK_DRC_GLOBAL_TONEMAP,
+ NEOISP_PARAM_BLK_DRC_LOCAL_TONEMAP,
+};
+
+/**
+ * struct neoisp_pipe_conf_cfg_es - Neoisp extensible params pipeline configuration
+ *
+ * Neoisp extensible params block for pipelines alignment configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_PIPE_CONF`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Pipeline configuration, see
+ * :c:type:`neoisp_pipe_conf_cfg_s`
+ */
+struct neoisp_pipe_conf_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_pipe_conf_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_head_color_cfg_es - Neoisp extensible Head color configuration
+ *
+ * Neoisp extensible params block for head color configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_HEAD_COLOR`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Head color configuration, see
+ * :c:type:`neoisp_head_color_cfg_s`
+ */
+struct neoisp_head_color_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_head_color_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_hdr_decompress0_cfg_es - Neoisp extensible HDR Decompress0 configuration
+ *
+ * Neoisp extensible params block for HDR Decompression configuration of line path 0.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_HDR_DECOMPRESS0`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: HDR Decompression configuration for line path 0, see
+ * :c:type:`neoisp_hdr_decompress0_cfg_s`
+ */
+struct neoisp_hdr_decompress0_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_hdr_decompress0_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_hdr_decompress1_cfg_es - Neoisp extensible HDR Decompress1 configuration
+ *
+ * Neoisp extensible params block for HDR Decompression configuration of line path 1.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_HDR_DECOMPRESS1`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: HDR Decompression configuration for line path 1, see
+ * :c:type:`neoisp_hdr_decompress1_cfg_s`
+ */
+struct neoisp_hdr_decompress1_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_hdr_decompress1_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_obwb_cfg_es - Neoisp extensible OBWB configuration
+ *
+ * Neoisp extensible params block for Optical Black correction and White Balance
+ * configuration of the different OBWB instances.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_OBWB0`, :c:type:`NEOISP_PARAM_BLK_OBWB1`
+ * or :c:type:`NEOISP_PARAM_BLK_OBWB2`
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Optical Black correction and White Balance configuration, see
+ * :c:type:`neoisp_obwb_cfg_s`
+ */
+struct neoisp_obwb_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_obwb_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_hdr_merge_cfg_es - Neoisp extensible HDR merge configuration
+ *
+ * Neoisp extensible params block for the HDR merge unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_HDR_MERGE`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: HDR merge configuration, see
+ * :c:type:`neoisp_hdr_merge_cfg_s`
+ */
+struct neoisp_hdr_merge_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_hdr_merge_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_rgbir_cfg_es - Neoisp extensible RGBIR to RGGB and IR configuration
+ *
+ * Neoisp extensible params block for the RGBIR to RGGB and IR conversion unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_RGBIR`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: RGBIR to RGGB and IR unit configuration, see
+ * :c:type:`neoisp_rgbir_cfg_s`
+ */
+struct neoisp_rgbir_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_rgbir_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_stat_cfg_es - Neoisp extensible Statistics and Histogram configuration
+ *
+ * Neoisp extensible params block for the Statistics and Histogram unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_STAT`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Statistics and Histogram unit configuration, see
+ * :c:type:`neoisp_stat_cfg_s`
+ */
+struct neoisp_stat_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_stat_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_ir_compress_cfg_es - Neoisp extensible IR Compression configuration
+ *
+ * Neoisp extensible params block for the Infra-red Compression unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_IR_COMP`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Infra-red Compression configuration, see
+ * :c:type:`neoisp_ir_compress_cfg_s`
+ */
+struct neoisp_ir_compress_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_ir_compress_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_bnr_cfg_es - Neoisp extensible BNR configuration
+ *
+ * Neoisp extensible params block for the Bayer Noise Reduction unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_BNR`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Bayer Noise Reduction configuration, see
+ * :c:type:`neoisp_bnr_cfg_s`
+ */
+struct neoisp_bnr_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_bnr_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_vignetting_ctrl_cfg_es - Neoisp extensible Vignetting configuration
+ *
+ * Neoisp extensible params block for the Vignetting unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_VIGNETTING_CTRL`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Vignetting unit configuration, see
+ * :c:type:`neoisp_vignetting_ctrl_cfg_s`
+ */
+struct neoisp_vignetting_ctrl_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_vignetting_ctrl_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_ctemp_cfg_es - Neoisp extensible Color Temperature configuration
+ *
+ * Neoisp extensible params block for the Color Temperature unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_CTEMP`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Color Temperature unit configuration, see
+ * :c:type:`neoisp_ctemp_cfg_s`
+ */
+struct neoisp_ctemp_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_ctemp_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_demosaic_cfg_es - Neoisp extensible Demosaic configuration
+ *
+ * Neoisp extensible params block for the Demosaic unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_DEMOSAIC`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Demosaic unit configuration, see
+ * :c:type:`neoisp_demosaic_cfg_s`
+ */
+struct neoisp_demosaic_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_demosaic_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_rgb2yuv_cfg_es - Neoisp extensible RGB to YUV configuration
+ *
+ * Neoisp extensible params block for the RGB to YUV color space conversion
+ * unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_RGB2YUV`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Color space conversion unit configuration, see
+ * :c:type:`neoisp_rgb2yuv_cfg_s`
+ */
+struct neoisp_rgb2yuv_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_rgb2yuv_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_dr_comp_cfg_es - Neoisp extensible DRC unit configuration
+ *
+ * Neoisp extensible params block for the Dynamic Range Compression unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_DR_COMP`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Dynamic Range Compression unit configuration, see
+ * :c:type:`neoisp_dr_comp_cfg_s`
+ */
+struct neoisp_dr_comp_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_dr_comp_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_nr_cfg_es - Neoisp extensible NR unit configuration
+ *
+ * Neoisp extensible params block for the Noise Reduction unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_NR`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Noise Reduction unit configuration, see
+ * :c:type:`neoisp_nr_cfg_s`
+ */
+struct neoisp_nr_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_nr_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_af_cfg_es - Neoisp extensible AutoFocus unit configuration
+ *
+ * Neoisp extensible params block for the AutoFocus unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_AF`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: AutoFocus unit configuration, see
+ * :c:type:`neoisp_af_cfg_s`
+ */
+struct neoisp_af_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_af_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_ee_cfg_es - Neoisp extensible Edge Enhancement unit configuration
+ *
+ * Neoisp extensible params block for the Edge Enhancement unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_EE`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Edge Enhancement unit configuration, see
+ * :c:type:`neoisp_ee_cfg_s`
+ */
+struct neoisp_ee_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_ee_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_df_cfg_es - Neoisp extensible Direction Filter configuration
+ *
+ * Neoisp extensible params block for the Direction Filter unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_DF`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Direction Filter configuration, see
+ * :c:type:`neoisp_df_cfg_s`
+ */
+struct neoisp_df_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_df_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_convmed_cfg_es - Neoisp extensible Convmed configuration
+ *
+ * Neoisp extensible params block for the Color Convolution and Median Filter
+ * unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_CONVMED`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Color Convolution and Median Filter unit configuration, see
+ * :c:type:`neoisp_convmed_cfg_s`
+ */
+struct neoisp_convmed_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_convmed_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_cas_cfg_es - Neoisp extensible CAS configuration
+ *
+ * Neoisp extensible params block for the Color Adaptive Saturation unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_CAS`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Color Adaptive Saturation unit configuration, see
+ * :c:type:`neoisp_cas_cfg_s`
+ */
+struct neoisp_cas_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_cas_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_gcm_cfg_es - Neoisp extensible GCM configuration
+ *
+ * Neoisp extensible params block for the Gamma Correction matrix unit configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_GCM`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Gamma Correction Matrix configuration, see
+ * :c:type:`neoisp_gcm_cfg_s`
+ */
+struct neoisp_gcm_cfg_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_gcm_cfg_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_vignetting_table_mem_params_es - Neoisp extensible Vignetting LUT configuration
+ *
+ * Neoisp extensible params block for the Vignetting look up table configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_VIGNETTING_TABLE`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: Vignetting LUT configuration, see
+ * :c:type:`neoisp_vignetting_table_mem_params_s`
+ */
+struct neoisp_vignetting_table_mem_params_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_vignetting_table_mem_params_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_drc_global_tonemap_mem_params_es - Neoisp extensible DRC Global Tonemap LUT
+ * configuration
+ *
+ * Neoisp extensible params block for the DRC Global Tonemap look up table configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_DRC_GLOBAL_TONEMAP`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: DRC Global Tonemap LUT configuration, see
+ * :c:type:`neoisp_drc_global_tonemap_mem_params_s`
+ */
+struct neoisp_drc_global_tonemap_mem_params_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_drc_global_tonemap_mem_params_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_drc_local_tonemap_mem_params_es - Neoisp extensible DRC Local Tonemap LUT
+ * configuration
+ *
+ * Neoisp extensible params block for the DRC Local Tonemap look up table configuration.
+ * Identified by :c:type:`NEOISP_PARAM_BLK_DRC_LOCAL_TONEMAP`.
+ *
+ * @header: The Neoisp extensible parameters header, see
+ * :c:type:`v4l2_isp_params_block_header`
+ * @cfg: DRC Local tonemap LUT configuration, see
+ * :c:type:`neoisp_drc_local_tonemap_mem_params_s`
+ */
+struct neoisp_drc_local_tonemap_mem_params_es {
+ struct v4l2_isp_params_block_header header;
+ struct neoisp_drc_local_tonemap_mem_params_s cfg;
+} __attribute__((aligned(8)));
+
+/**
+ * define NEOISP_EXT_PARAMS_MAX_SIZE - Maximum size of all Neoisp Parameters
+ *
+ * Though the parameters for the Neoisp are passed as optional blocks, the
+ * driver still needs to know the absolute maximum size so that it can allocate
+ * a buffer sized appropriately to accommodate userspace attempting to set all
+ * possible parameters in a single frame.
+ *
+ * Some structs are in this list multiple times. Where that's the case, it just
+ * reflects the fact that the same struct can be used with multiple different
+ * header types from :c:type:`neoisp_param_block_type_e`.
+ */
+#define NEOISP_EXT_PARAMS_MAX_SIZE \
+ (sizeof(struct neoisp_pipe_conf_cfg_es) + \
+ sizeof(struct neoisp_head_color_cfg_es) + \
+ sizeof(struct neoisp_hdr_decompress0_cfg_es) + \
+ sizeof(struct neoisp_hdr_decompress1_cfg_es) + \
+ (sizeof(struct neoisp_obwb_cfg_es) * NEO_OBWB_CNT) + \
+ sizeof(struct neoisp_hdr_merge_cfg_es) + \
+ sizeof(struct neoisp_rgbir_cfg_es) + \
+ sizeof(struct neoisp_ctemp_cfg_es) + \
+ sizeof(struct neoisp_stat_cfg_es) + \
+ sizeof(struct neoisp_ir_compress_cfg_es) + \
+ sizeof(struct neoisp_bnr_cfg_es) + \
+ sizeof(struct neoisp_vignetting_ctrl_cfg_es) + \
+ sizeof(struct neoisp_demosaic_cfg_es) + \
+ sizeof(struct neoisp_rgb2yuv_cfg_es) + \
+ sizeof(struct neoisp_dr_comp_cfg_es) + \
+ sizeof(struct neoisp_nr_cfg_es) + \
+ sizeof(struct neoisp_af_cfg_es) + \
+ sizeof(struct neoisp_ee_cfg_es) + \
+ sizeof(struct neoisp_df_cfg_es) + \
+ sizeof(struct neoisp_convmed_cfg_es) + \
+ sizeof(struct neoisp_cas_cfg_es) + \
+ sizeof(struct neoisp_gcm_cfg_es) + \
+ sizeof(struct neoisp_vignetting_table_mem_params_es) + \
+ sizeof(struct neoisp_drc_global_tonemap_mem_params_es) + \
+ sizeof(struct neoisp_drc_local_tonemap_mem_params_es))
+
+/*
+ * Statistics
+ */
+#define NEO_CTEMP_REG_STATS_CROIS_CNT (10)
+#define NEO_AF_REG_STATS_ROIS_CNT (9)
+
+/**
+ * struct neoisp_reg_stats_crois_s - Color region of interest
+ * @pixcnt_pixcnt: Pixel count saturates once it reaches all 1s
+ * @sumred_sum: Accumulated red value of total number
+ * @sumgreen_sum: Accumulated green value of total number
+ * @sumblue_sum: Accumulated blue value of total number
+ */
+struct neoisp_reg_stats_crois_s {
+ __u32 pixcnt_pixcnt;
+ __u32 sumred_sum;
+ __u32 sumgreen_sum;
+ __u32 sumblue_sum;
+};
+
+/**
+ * struct neoisp_ctemp_reg_stats_s - Color Temperature statistics located in registers
+ * @cnt_white_white: Number of white pixels
+ * @sumr_sum_l: Lower 32-bits of accumulated value of the red channel
+ * @sumr_sum_h: Higher 32-bits of accumulated value of the red channel
+ * @sumg_sum_l: Lower 32-bits of accumulated value of the green channel
+ * @sumg_sum_h: Higher 32-bits of accumulated value of the green channel
+ * @sumb_sum_l: Lower 32-bits of accumulated value of the blue channel
+ * @sumb_sum_h: Higher 32-bits of accumulated value of the blue channel
+ * @sumrg_sum_l: Lower 32-bits of accumulated red over green gain
+ * @sumrg_sum_h: Higher 32-bits of accumulated red over green gain
+ * @sumbg_sum_l: Lower 32-bits of accumulated blue over green gain
+ * @sumbg_sum_h: Higher 32-bits of accumulated blue over green gain
+ * @crois: Color regions of interest
+ * @gr_gb_cnt_cnt: Number of counted pixels in the gr vs gb sums
+ * @gr_sum_sum: Sum of counted GR values (msb: 27 bits mantissa, lsb: 5 bits exponent)
+ * @gb_sum_sum: Sum of counted GB values (msb: 27 bits mantissa, lsb: 5 bits exponent)
+ * @gr2_sum_sum: Sum of squared GR values (msb: 27 bits mantissa, lsb: 5 bits exponent)
+ * @gb2_sum_sum: Sum of squared GB values (msb: 27 bits mantissa, lsb: 5 bits exponent)
+ * @pad: Pad two word for alignment
+ * @grgb_sum_sum: Sum of GR*GB values (msb: 27 bits mantissa, lsb: 5 bits exponent)
+ */
+struct neoisp_ctemp_reg_stats_s {
+ __u32 cnt_white_white;
+ __u32 sumr_sum_l; /* split low and high to avoid padding and keep aligned with hw */
+ __u32 sumr_sum_h;
+ __u32 sumg_sum_l;
+ __u32 sumg_sum_h;
+ __u32 sumb_sum_l;
+ __u32 sumb_sum_h;
+ __u32 sumrg_sum_l;
+ __u32 sumrg_sum_h;
+ __u32 sumbg_sum_l;
+ __u32 sumbg_sum_h;
+ struct neoisp_reg_stats_crois_s crois[NEO_CTEMP_REG_STATS_CROIS_CNT];
+ __u32 gr_gb_cnt_cnt;
+ __u32 gr_sum_sum;
+ __u32 gb_sum_sum;
+ __u32 gr2_sum_sum;
+ __u32 gb2_sum_sum;
+ __u32 pad[2];
+ __u32 grgb_sum_sum;
+};
+
+/**
+ * struct neoisp_drc_reg_stats_s - Dynamic Range Compression statistics
+ * @groi0_sum_val: Sum of pixels within the global region of interest 0
+ * @groi1_sum_val: Sum of pixels within the global region of interest 1
+ */
+struct neoisp_drc_reg_stats_s {
+ __u32 groi0_sum_val;
+ __u32 groi1_sum_val;
+};
+
+/**
+ * struct neoisp_af_reg_stats_sums_s - common Auto Focus sum registers pair
+ * @sum0: Provides the 32-bit accumulated value for filter 0 for a ROI
+ * @sum1: Provides the 32-bit accumulated value for filter 1 for a ROI
+ */
+struct neoisp_af_reg_stats_sums_s {
+ __u32 sum0;
+ __u32 sum1;
+};
+
+/**
+ * struct neoisp_af_reg_stats_s - Auto Focus statistics
+ * @rois: Array of filters 0 and 1 sums for each ROI
+ */
+struct neoisp_af_reg_stats_s {
+ struct neoisp_af_reg_stats_sums_s rois[NEO_AF_REG_STATS_ROIS_CNT];
+};
+
+/**
+ * struct neoisp_bnr_reg_stats_s - Bayer Noise Reduction statistics
+ * @edge_stat_edge_pixels: Number of edge pixels that are above the L threshold (u24)
+ * @edges_stat_edge_pixels: Number of edge pixels that are above the S threshold (u24)
+ */
+struct neoisp_bnr_reg_stats_s {
+ __u32 edge_stat_edge_pixels;
+ __u32 edges_stat_edge_pixels;
+};
+
+/**
+ * struct neoisp_nr_reg_stats_s - Noise Reduction statistics
+ * @edgecnt_val: Number of filtered pixels for respective camera context (u24)
+ */
+struct neoisp_nr_reg_stats_s {
+ __u32 edgecnt_val;
+};
+
+/**
+ * struct neoisp_ee_reg_stats_s - Edge enhancement statistics
+ * @edgecnt_val: Number of filtered pixels for respective camera context (u24)
+ */
+struct neoisp_ee_reg_stats_s {
+ __u32 edgecnt_val;
+};
+
+/**
+ * struct neoisp_df_reg_stats_s - Direction Filter statistics
+ * @edgecnt_val: Number of filtered pixels for respective camera context (u24)
+ */
+struct neoisp_df_reg_stats_s {
+ __u32 edgecnt_val;
+};
+
+/**
+ * struct neoisp_reg_stats_s - Contiguous statistics accessed over aliased address space
+ * @ct: Color temperature statistics
+ * @drc: Dynamic Range Compression statistics
+ * @af: Auto Focus statistics
+ * @bnr: Bayer Noise Reduction statistics
+ * @nr: Noise Reduction statistics
+ * @ee: Edge enhancement statistics
+ * @df: Contiguous statistics to access over aliased address space
+ */
+struct neoisp_reg_stats_s {
+ struct neoisp_ctemp_reg_stats_s ct;
+ struct neoisp_drc_reg_stats_s drc;
+ struct neoisp_af_reg_stats_s af;
+ struct neoisp_bnr_reg_stats_s bnr;
+ struct neoisp_nr_reg_stats_s nr;
+ struct neoisp_ee_reg_stats_s ee;
+ struct neoisp_df_reg_stats_s df;
+};
+
+/**
+ * struct neoisp_ctemp_mem_stats_s - Color Temperature statistics located in memory
+ * @ctemp_r_sum: Array of red sums
+ * @ctemp_g_sum: Array of green sums
+ * @ctemp_b_sum: Array of blue sums
+ * @ctemp_pix_cnt: Array of pixel counts
+ */
+struct neoisp_ctemp_mem_stats_s {
+ __u32 ctemp_r_sum[NEO_CTEMP_R_SUM_CNT];
+ __u32 ctemp_g_sum[NEO_CTEMP_G_SUM_CNT];
+ __u32 ctemp_b_sum[NEO_CTEMP_B_SUM_CNT];
+ __u16 ctemp_pix_cnt[NEO_CTEMP_PIX_CNT_CNT];
+};
+
+/**
+ * struct neoisp_rgbir_mem_stats_s - RGBIR statistics located in memory
+ * @rgbir_hist: Rgbir histograms
+ */
+struct neoisp_rgbir_mem_stats_s {
+ __u32 rgbir_hist[NEO_RGBIR_HIST_CNT];
+};
+
+/**
+ * struct neoisp_hist_mem_stats_s - Histograms located in memory
+ * @hist_stat: Array of histograms and statistics
+ */
+struct neoisp_hist_mem_stats_s {
+ __u32 hist_stat[NEO_HIST_STAT_CNT];
+};
+
+/**
+ * struct neoisp_drc_mem_stats_s - DRC statistics located in memory
+ * @drc_local_sum: DRC local sums array
+ * @drc_global_hist_roi0: DRC global histogram fir region of interest 0
+ * @drc_global_hist_roi1: DRC global histogram fir region of interest 1
+ */
+struct neoisp_drc_mem_stats_s {
+ __u32 drc_local_sum[NEO_DRC_LOCAL_SUM_CNT];
+ __u32 drc_global_hist_roi0[NEO_DRC_GLOBAL_HIST_ROI_CNT];
+ __u32 drc_global_hist_roi1[NEO_DRC_GLOBAL_HIST_ROI_CNT];
+};
+
+/**
+ * struct neoisp_mem_stats_s - Contiguous statistics accessed over local memories
+ * @ctemp: Color temperature statistics
+ * @rgbir: Dynamic Range Compression statistics
+ * @hist: Auto Focus statistics
+ * @drc: Bayer Noise Reduction statistics
+ */
+struct neoisp_mem_stats_s {
+ struct neoisp_ctemp_mem_stats_s ctemp;
+ struct neoisp_rgbir_mem_stats_s rgbir;
+ struct neoisp_hist_mem_stats_s hist;
+ struct neoisp_drc_mem_stats_s drc;
+};
+
+/**
+ * struct neoisp_meta_stats_s - Neoisp legacy statistics
+ *
+ * This structure contains all statistics provided by the various ISP blocks.
+ * It is used when userspace doesn't support extended API. The full statistic
+ * buffer is copied for every frame.
+ *
+ * Driver is responsible for correctly populating all the statistics blocks,
+ * whatever the block is accessed over aliased address space, or local memories.
+ *
+ * @regs: Aliased address space statistics
+ * @mems: Local memories statistics
+ */
+struct neoisp_meta_stats_s {
+ struct neoisp_reg_stats_s regs;
+ struct neoisp_mem_stats_s mems;
+};
+
+/*
+ * Extensible statistics
+ */
+
+/**
+ * enum neoisp_stats_block_type_e - Enumeration of Neoisp statistics blocks
+ *
+ * This enumeration defines the types of Neoisp statistics block. Each entry
+ * contains statistics specific to a processing block of the Neoisp. The block
+ * type allows the driver to correctly interpret the statistics block data.
+ *
+ * It is driver responsability to correctly set the type of each statistics block.
+ *
+ * @NEOISP_STATS_BLK_RCTEMP: Color Temperature statistics registers
+ * @NEOISP_STATS_BLK_RDRC: Dynamic Range Compression statistics registers
+ * @NEOISP_STATS_BLK_RAF: Auto Focus statistics registers
+ * @NEOISP_STATS_BLK_RBNR: Bayer Noise Reduction statistics registers
+ * @NEOISP_STATS_BLK_RNR: Noise Reduction statistics registers
+ * @NEOISP_STATS_BLK_REE: Edge enhancement statistics
+ * @NEOISP_STATS_BLK_RDF: Direction Filter statistics registers
+ * @NEOISP_STATS_BLK_MCTEMP: Color Temperature statistics memories
+ * @NEOISP_STATS_BLK_MRGBIR: RGBIR statistics memories
+ * @NEOISP_STATS_BLK_MHIST: Histograms statistics memories
+ * @NEOISP_STATS_BLK_MDRC: DRC statistics memories
+ */
+enum neoisp_stats_block_type_e {
+ NEOISP_STATS_BLK_RCTEMP,
+ NEOISP_STATS_BLK_RDRC,
+ NEOISP_STATS_BLK_RAF,
+ NEOISP_STATS_BLK_RBNR,
+ NEOISP_STATS_BLK_RNR,
+ NEOISP_STATS_BLK_REE,
+ NEOISP_STATS_BLK_RDF,
+ NEOISP_STATS_BLK_MCTEMP,
+ NEOISP_STATS_BLK_MRGBIR,
+ NEOISP_STATS_BLK_MHIST,
+ NEOISP_STATS_BLK_MDRC,
+};
+
+/**
+ * struct neoisp_ctemp_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_RCTEMP`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_ctemp_reg_stats_s`
+ */
+struct neoisp_ctemp_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_ctemp_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_drc_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_RDRC`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_drc_reg_stats_s`
+ */
+struct neoisp_drc_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_drc_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_af_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_RAF`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_af_reg_stats_s`
+ */
+struct neoisp_af_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_af_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_bnr_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_RBNR`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_bnr_reg_stats_s`
+ */
+struct neoisp_bnr_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_bnr_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_nr_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_RNR`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_nr_reg_stats_s`
+ */
+struct neoisp_nr_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_nr_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_ee_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_REE`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_ee_reg_stats_s`
+ */
+struct neoisp_ee_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_ee_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_df_reg_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_RDF`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_df_reg_stats_s`
+ */
+struct neoisp_df_reg_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_df_reg_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_ctemp_mem_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_MCTEMP`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_ctemp_mem_stats_s`
+ */
+struct neoisp_ctemp_mem_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_ctemp_mem_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_rgbir_mem_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_MRGBIR`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_rgbir_mem_stats_s`
+ */
+struct neoisp_rgbir_mem_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_rgbir_mem_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_hist_mem_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_MHIST`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_hist_mem_stats_s`
+ */
+struct neoisp_hist_mem_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_hist_mem_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * struct neoisp_drc_mem_stats_es - Neoisp extensible pipeline configuration
+ *
+ * Neoisp extensible pipelines alignment configuration block.
+ * Identified by :c:type:`NEOISP_STATS_BLK_MDRC`.
+ *
+ * @header: The Neoisp extensible statistics header, see
+ * :c:type:`v4l2_isp_stats_block_header`
+ * @stat: Pipeline configuration, see
+ * :c:type:`neoisp_drc_mem_stats_s`
+ */
+struct neoisp_drc_mem_stats_es {
+ struct v4l2_isp_stats_block_header header;
+ struct neoisp_drc_mem_stats_s stat;
+} __attribute__((aligned(8)));
+
+/**
+ * define NEOISP_EXT_STATS_MAX_SIZE - Maximum size of all Neoisp Statistics
+ *
+ * Though the statistics of the Neoisp are passed as optional blocks, the
+ * userspace still needs to know the absolute maximum size so that it can
+ * allocate a buffer sized appropriately to accommodate driver attempting to
+ * set all possible statistics in a single frame.
+ */
+#define NEOISP_EXT_STATS_MAX_SIZE \
+ (sizeof(struct neoisp_ctemp_reg_stats_es) + \
+ sizeof(struct neoisp_drc_reg_stats_es) + \
+ sizeof(struct neoisp_af_reg_stats_es) + \
+ sizeof(struct neoisp_bnr_reg_stats_es) + \
+ sizeof(struct neoisp_nr_reg_stats_es) + \
+ sizeof(struct neoisp_ee_reg_stats_es) + \
+ sizeof(struct neoisp_df_reg_stats_es) + \
+ sizeof(struct neoisp_ctemp_mem_stats_es) + \
+ sizeof(struct neoisp_rgbir_mem_stats_es) + \
+ sizeof(struct neoisp_hist_mem_stats_es) + \
+ sizeof(struct neoisp_drc_mem_stats_es))
+
+#endif /* __UAPI_NXP_NEOISP_H */
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* Re: [RFC v1 08/11] media: uapi: Add NXP NEOISP user interface header file
2026-01-23 8:09 ` [RFC v1 08/11] media: uapi: Add NXP NEOISP user interface header file Antoine Bouyer
@ 2026-02-09 23:29 ` Laurent Pinchart
0 siblings, 0 replies; 49+ messages in thread
From: Laurent Pinchart @ 2026-02-09 23:29 UTC (permalink / raw)
To: Antoine Bouyer
Cc: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, mchehab, robh, krzk+dt, conor+dt,
shawnguo, s.hauer, kernel, festevam, linux-kernel, linux-media,
devicetree, linux-arm-kernel
On Fri, Jan 23, 2026 at 09:09:35AM +0100, Antoine Bouyer wrote:
> Add user space api header file for meta data structures definitions.
>
> This header describes `parameters` buffer for the ISP blocks control by
> userspace, and `statistics` buffer for userspace and IPA handling.
>
> These 2 buffers both support legacy and extensible modes. Legacy mode is
> a static fixed buffer structure, while extensible mode uses the
> v4l2-isp generic definitions to support various amount of ISP blocks.
>
> Parameters buffer uses v4l2-isp generic definitions, so as other ISP
> devices (rkisp1, mali-c55). Statistics buffer uses the newly introduced
> generic `v4l2_isp_stats_buffer`, which behaves the same as the generic
> `v4l2_isp_params_buffer`.
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 +++++++++++++++++++++
> 1 file changed, 1968 insertions(+)
> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>
> diff --git a/include/uapi/linux/media/nxp/nxp_neoisp.h b/include/uapi/linux/media/nxp/nxp_neoisp.h
> new file mode 100644
> index 000000000000..186973a1a6b2
> --- /dev/null
> +++ b/include/uapi/linux/media/nxp/nxp_neoisp.h
> @@ -0,0 +1,1968 @@
> +/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */
> +/*
> + * NXP NEOISP userspace API
> + *
> + * Copyright 2023-2026 NXP
> + */
> +
> +#ifndef __UAPI_NXP_NEOISP_H
> +#define __UAPI_NXP_NEOISP_H
> +
> +#include <linux/media/v4l2-isp.h>
> +#include <linux/types.h>
> +#include <linux/v4l2-controls.h>
> +
> +/*
> + * Check Documentation/admin-guide/media/nxp-neoisp.rst for control details.
> + */
> +#define V4L2_CID_NEOISP_SUPPORTED_PARAMS_BLOCKS (V4L2_CID_USER_NEOISP_BASE + 1)
I wonder if we should turn this into a standard control, given that all
ISPs will need it.
Would a control to report the supported statistics block be useful too ?
[snip]
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread
* [RFC v1 10/11] media: platform: neoisp: Add debugfs support
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (7 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 08/11] media: uapi: Add NXP NEOISP user interface header file Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 11/11] arm64: dts: freescale: imx95: Add NXP neoisp device tree node Antoine Bouyer
` (2 subsequent siblings)
11 siblings, 0 replies; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Add debugfs entries to dump ISP registers, and some internal memory
regions used to store Vignetting, DRC global and DRC local coefficients.
Debug mode is activated with the `enable_debugfs` module's parameter, to
avoid runtime suspend which blocks register access when IP is not active,
so we can capture an ISP snapshot after a frame is decoded.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
drivers/media/platform/nxp/neoisp/Makefile | 2 +
drivers/media/platform/nxp/neoisp/neoisp.h | 16 +
.../platform/nxp/neoisp/neoisp_debugfs.c | 503 ++++++++++++++++++
.../media/platform/nxp/neoisp/neoisp_main.c | 14 +
4 files changed, 535 insertions(+)
create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
diff --git a/drivers/media/platform/nxp/neoisp/Makefile b/drivers/media/platform/nxp/neoisp/Makefile
index 7652df785e98..c68e216980dc 100644
--- a/drivers/media/platform/nxp/neoisp/Makefile
+++ b/drivers/media/platform/nxp/neoisp/Makefile
@@ -4,3 +4,5 @@ obj-$(CONFIG_VIDEO_NXP_NEOISP) += neoisp.o
neoisp-objs := neoisp_ctx.o \
neoisp_main.o
+
+neoisp-$(CONFIG_DEBUG_FS) += neoisp_debugfs.o
diff --git a/drivers/media/platform/nxp/neoisp/neoisp.h b/drivers/media/platform/nxp/neoisp/neoisp.h
index 381e11454d37..3402efdbc923 100644
--- a/drivers/media/platform/nxp/neoisp/neoisp.h
+++ b/drivers/media/platform/nxp/neoisp/neoisp.h
@@ -9,6 +9,7 @@
#define __NXP_NEOISP_H
#include <linux/bits.h>
+#include <linux/debugfs.h>
#include <linux/media/nxp/nxp_neoisp.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
@@ -232,8 +233,23 @@ struct neoisp_dev_s {
struct neoisp_job_s queued_job;
bool hw_busy; /* Non-zero if a job is queued or is being started */
spinlock_t hw_lock; /* Protects "hw_busy" flag and streaming_map */
+ struct dentry *debugfs_entry;
+ struct debugfs_regset32 *regset;
};
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+void neoisp_debugfs_init(struct neoisp_dev_s *neoispd);
+void neoisp_debugfs_exit(struct neoisp_dev_s *neoispd);
+#else
+static inline void neoisp_debugfs_init(struct neoisp_dev_s *neoispd)
+{
+}
+
+static inline void neoisp_debugfs_exit(struct neoisp_dev_s *neoispd)
+{
+}
+#endif
+
static inline int neoisp_node_link_is_enabled(struct neoisp_node_s *node)
{
return (node->intf_link->flags & MEDIA_LNK_FL_ENABLED);
diff --git a/drivers/media/platform/nxp/neoisp/neoisp_debugfs.c b/drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
new file mode 100644
index 000000000000..a4b9af1e9e86
--- /dev/null
+++ b/drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
@@ -0,0 +1,503 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * NEOISP debugfs definition
+ *
+ * Copyright 2024-2026 NXP
+ */
+
+#include <linux/debugfs.h>
+
+#include "neoisp.h"
+#include "neoisp_ctx.h"
+#include "neoisp_regs.h"
+
+#define NEOISP_DFS_REG(reg) {.name = #reg, .offset = reg}
+
+static const struct debugfs_reg32 neoisp_dfs_regs[] = {
+ NEOISP_DFS_REG(NEO_PIPE_CONF_SOFT_RESET),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_BUS_TXPARAM),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_REG_XFR_DIS),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_CSI_CTRL),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_FRAME_NUM),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_REG_SHD_CTRL),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_REG_SHD_CMD),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_TRIG_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_EN0_V2),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_STAT0_V2),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_CSI_STAT_V2),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG_CONF_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG0_IN_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG1_IN_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH0_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH1_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTIR_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG0_IN_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG1_IN_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH0_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH1_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTIR_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_SKIP_CTRL0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_EN0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_STAT0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_CSI_STAT),
+ NEOISP_DFS_REG(NEO_HC_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_RATIO01_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_RATIO23_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_RATIO4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_RATIO01_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_RATIO23_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_RATIO4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT4_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_R_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_GR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_GB_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_B_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_R_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_GR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_GB_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_B_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_R_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_GR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_GB_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_B_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_GAIN_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_GAIN_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_GAIN_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_LUMA_TH_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_LUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_DOWNSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_UPSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_POST_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_GAIN_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_GAIN_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_GAIN_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_LUMA_TH_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_LUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_DOWNSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_UPSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_POST_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_LINE_NUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_ROI_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_ROI_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_REDGAIN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_BLUEGAIN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_HOFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_VOFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT1_SLOPE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT2_SLOPE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_LUMA_TH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT0_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT1_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT2_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT3_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT4_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_R_GR_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB_B_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CNT_WHITE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMGL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMGH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRGL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRGH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBGL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBGH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_STAT_BLK_SIZE0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_STAT_CURR_BLK_Y0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR_AVG_IN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB_AVG_IN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR_GB_CNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR2_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB2_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GRGB_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM0_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM1_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM2_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM0_TH_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM1_TH_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM2_TH_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST0_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST1_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST0_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST1_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST2_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST2_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST3_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST3_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT3_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT4_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET3_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET4_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_RATIO01_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_RATIO23_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_RATIO4_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT0_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT1_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT2_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT3_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT4_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YPEAK_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGE_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGE_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGES_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGES_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGEA_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGEA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YLUMA_X_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YLUMA_Y_TH_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YLUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YALPHA_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CPEAK_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGE_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGE_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGES_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGES_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGEA_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGEA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CLUMA_X_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CLUMA_Y_TH_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CLUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CALPHA_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_EDGE_STAT_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_EDGES_STAT_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_STRETCH_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_CONF_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_STEPY_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_STEPX_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_C_LINE_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_C_ROW_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_C_FRACY_CAM0),
+ NEOISP_DFS_REG(NEO_IDBG1_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG1_CURR_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG1_IMA),
+ NEOISP_DFS_REG(NEO_IDBG1_IMD),
+ NEOISP_DFS_REG(NEO_IDBG1_DONE_STAT),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_ACTIVITY_CTL_CAM0),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_DYNAMICS_CTL0_CAM0),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_DYNAMICS_CTL2_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_GAIN_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT0_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT1_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT2_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT3_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT4_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT5_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GROI_SUM_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GBL_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_BLK_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_STRETCH_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_BLK_STEPY_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_BLK_STEPX_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_SUM_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ALPHA_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GROI0_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GROI1_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_STAT_BLK_Y_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_CURR_YFRACT_CAM0),
+ NEOISP_DFS_REG(NEO_NR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_NR_BLEND_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_NR_BLEND_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_NR_EDGECNT_CAM0),
+ NEOISP_DFS_REG(NEO_DF_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_DF_TH_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_DF_BLEND_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_DF_BLEND_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_DF_EDGECNT_CAM0),
+ NEOISP_DFS_REG(NEO_EE_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_EE_CORING_CAM0),
+ NEOISP_DFS_REG(NEO_EE_CLIP_CAM0),
+ NEOISP_DFS_REG(NEO_EE_MASKGAIN_CAM0),
+ NEOISP_DFS_REG(NEO_EE_EDGECNT_CAM0),
+ NEOISP_DFS_REG(NEO_CCONVMED_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_CAS_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_CAS_CORR_CAM0),
+ NEOISP_DFS_REG(NEO_CAS_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_PACKETIZER_CH0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_PACKETIZER_CH12_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_PACKETIZER_PACK_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT3_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT4_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT5_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IOFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IOFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IOFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT3_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT4_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT5_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OOFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OOFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OOFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_GAMMA0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_GAMMA1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_GAMMA2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_BLKLVL0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_BLKLVL1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_BLKLVL2_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_LOWTH_CTRL01_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_LOWTH_CTRL2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_MAT_CONFG_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_COEFFS0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_COEFFS1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_COEFFS2_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_COEFFS0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_COEFFS1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_COEFFS2_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_IDBG2_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG2_CURR_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG2_IMA),
+ NEOISP_DFS_REG(NEO_IDBG2_IMD),
+ NEOISP_DFS_REG(NEO_IDBG2_DONE_STAT),
+};
+
+/* Structure to store word when reading memory */
+union udata_t {
+ u8 byte[4];
+ u16 half[2];
+ u32 word;
+};
+
+static inline int neoisp_dump_memory(struct seq_file *m, enum isp_block_map_e map, int wsize)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+ union udata_t data;
+ u32 addr;
+ u32 *src = (u32 *)(uintptr_t)neoispd->mmio_tcm;
+ u32 offset = ISP_GET_OFF(map) / sizeof(u32);
+ u32 size = ISP_GET_SZ(map) / sizeof(u32);
+ int i, j;
+
+ for (i = 0; i < size; i++) {
+ addr = (offset + i) * sizeof(u32);
+ data.word = src[offset + i];
+
+ if (wsize == sizeof(u8)) {
+ for (j = 0; j < ARRAY_SIZE(data.byte); j++)
+ seq_printf(m, "%#x: %#x\n",
+ addr + (j * wsize), data.byte[j]);
+ }
+
+ if (wsize == sizeof(u16)) {
+ for (j = 0; j < ARRAY_SIZE(data.half); j++)
+ seq_printf(m, "%#x: %#x\n",
+ addr + (j * wsize), data.half[j]);
+ }
+ }
+
+ return 0;
+}
+
+static int neoisp_dump_vignetting_show(struct seq_file *m, void *private)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+
+ return neoisp_dump_memory(m, neoispd->info->mems->vignetting_table, sizeof(u16));
+}
+DEFINE_SHOW_ATTRIBUTE(neoisp_dump_vignetting);
+
+static int neoisp_dump_drc_global_show(struct seq_file *m, void *private)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+
+ return neoisp_dump_memory(m, neoispd->info->mems->drc_global_tonemap, sizeof(u16));
+}
+DEFINE_SHOW_ATTRIBUTE(neoisp_dump_drc_global);
+
+static int neoisp_dump_drc_local_show(struct seq_file *m, void *private)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+
+ return neoisp_dump_memory(m, neoispd->info->mems->drc_local_tonemap, sizeof(u8));
+}
+DEFINE_SHOW_ATTRIBUTE(neoisp_dump_drc_local);
+
+void neoisp_debugfs_init(struct neoisp_dev_s *neoispd)
+{
+ neoispd->regset = devm_kzalloc(&neoispd->pdev->dev, sizeof(*neoispd->regset), GFP_KERNEL);
+ if (!neoispd->regset)
+ return;
+
+ neoispd->regset->regs = neoisp_dfs_regs;
+ neoispd->regset->nregs = ARRAY_SIZE(neoisp_dfs_regs);
+ neoispd->regset->base = neoispd->mmio;
+
+ neoispd->debugfs_entry = debugfs_create_dir(dev_name(&neoispd->pdev->dev), NULL);
+
+ debugfs_create_regset32("registers", 0400, neoispd->debugfs_entry, neoispd->regset);
+
+ debugfs_create_file("vignetting", 0400, neoispd->debugfs_entry, neoispd,
+ &neoisp_dump_vignetting_fops);
+ debugfs_create_file("drc_global", 0400, neoispd->debugfs_entry, neoispd,
+ &neoisp_dump_drc_global_fops);
+ debugfs_create_file("drc_local", 0400, neoispd->debugfs_entry, neoispd,
+ &neoisp_dump_drc_local_fops);
+}
+
+void neoisp_debugfs_exit(struct neoisp_dev_s *neoispd)
+{
+ debugfs_remove_recursive(neoispd->debugfs_entry);
+}
diff --git a/drivers/media/platform/nxp/neoisp/neoisp_main.c b/drivers/media/platform/nxp/neoisp/neoisp_main.c
index f053a2136dad..a6d4dc40f9ea 100644
--- a/drivers/media/platform/nxp/neoisp/neoisp_main.c
+++ b/drivers/media/platform/nxp/neoisp/neoisp_main.c
@@ -9,6 +9,7 @@
*/
#include <linux/clk.h>
+#include <linux/debugfs.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/io.h>
@@ -35,6 +36,9 @@
#define NODE_NAME(node) \
(node_desc[(node)->id].ent_name + sizeof(NEOISP_NAME))
+static int enable_debugfs;
+module_param_named(enable_debugfs, enable_debugfs, uint, 0600);
+
static inline bool node_desc_is_output(const struct neoisp_node_desc_s *desc)
{
return desc->buf_type == V4L2_BUF_TYPE_META_OUTPUT ||
@@ -1765,9 +1769,16 @@ static int neoisp_probe(struct platform_device *pdev)
if (ret)
goto disable_nodes_err;
+ if (enable_debugfs) {
+ neoisp_debugfs_init(neoispd);
+ /* Increase pm_runtime counter to prevent suspend */
+ pm_runtime_resume_and_get(&pdev->dev);
+ }
+
pm_runtime_mark_last_busy(&pdev->dev);
pm_runtime_put_autosuspend(&pdev->dev);
+ dev_info(&pdev->dev, "probe: done (%d) debugfs (%x)\n", ret, enable_debugfs);
return ret;
disable_nodes_err:
@@ -1786,6 +1797,9 @@ static void neoisp_remove(struct platform_device *pdev)
struct neoisp_dev_s *neoispd = platform_get_drvdata(pdev);
int i;
+ if (enable_debugfs)
+ neoisp_debugfs_exit(neoispd);
+
for (i = NEOISP_NODE_GROUPS_COUNT - 1; i >= 0; i--)
neoisp_destroy_node_group(&neoispd->node_group[i]);
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* [RFC v1 11/11] arm64: dts: freescale: imx95: Add NXP neoisp device tree node
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (8 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 10/11] media: platform: neoisp: Add debugfs support Antoine Bouyer
@ 2026-01-23 8:09 ` Antoine Bouyer
2026-02-05 9:44 ` Krzysztof Kozlowski
2026-01-26 9:44 ` [RFC v1 00/11] Add iMX95 neoisp driver Michael Riesch
2026-02-06 20:51 ` Michael Riesch
11 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-23 8:09 UTC (permalink / raw)
To: julien.vuillaumier, alexi.birlinger, daniel.baluta, peng.fan,
frank.li, jacopo.mondi, laurent.pinchart, mchehab, robh, krzk+dt,
conor+dt, shawnguo, s.hauer, kernel, festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel,
Antoine Bouyer
Add neoisp device tree node to imx95.dtsi and enable it by default in
19x19 evk board.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts | 4 ++++
arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +++++++++++
2 files changed, 15 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
index aaa0da55a22b..9fbf22a57dba 100644
--- a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
@@ -511,6 +511,10 @@ &mu7 {
status = "okay";
};
+&neoisp0 {
+ status = "okay";
+};
+
&netcmix_blk_ctrl {
status = "okay";
};
diff --git a/arch/arm64/boot/dts/freescale/imx95.dtsi b/arch/arm64/boot/dts/freescale/imx95.dtsi
index e45014d50abe..03c7f3de6e9c 100644
--- a/arch/arm64/boot/dts/freescale/imx95.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx95.dtsi
@@ -1765,6 +1765,17 @@ smmu: iommu@490d0000 {
};
};
+ neoisp0: isp@4ae00000 {
+ compatible = "nxp,imx95-b0-neoisp";
+ reg = <0x0 0x4ae00000 0x0 0x8000>,
+ <0x0 0x4afe0000 0x0 0x10000>;
+ interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&scmi_clk IMX95_CLK_CAMCM0>;
+ clock-names = "camcm0";
+ power-domains = <&scmi_devpd IMX95_PD_CAMERA>;
+ status = "disabled";
+ };
+
usb3: usb@4c010010 {
compatible = "fsl,imx95-dwc3", "fsl,imx8mp-dwc3";
reg = <0x0 0x4c010010 0x0 0x04>,
--
2.52.0
^ permalink raw reply related [flat|nested] 49+ messages in thread* Re: [RFC v1 11/11] arm64: dts: freescale: imx95: Add NXP neoisp device tree node
2026-01-23 8:09 ` [RFC v1 11/11] arm64: dts: freescale: imx95: Add NXP neoisp device tree node Antoine Bouyer
@ 2026-02-05 9:44 ` Krzysztof Kozlowski
0 siblings, 0 replies; 49+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-05 9:44 UTC (permalink / raw)
To: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
On 23/01/2026 09:09, Antoine Bouyer wrote:
> Add neoisp device tree node to imx95.dtsi and enable it by default in
> 19x19 evk board.
>
> Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
> ---
> arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts | 4 ++++
> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +++++++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
> index aaa0da55a22b..9fbf22a57dba 100644
> --- a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
> @@ -511,6 +511,10 @@ &mu7 {
> status = "okay";
> };
>
> +&neoisp0 {
> + status = "okay";
> +};
> +
> &netcmix_blk_ctrl {
> status = "okay";
> };
> diff --git a/arch/arm64/boot/dts/freescale/imx95.dtsi b/arch/arm64/boot/dts/freescale/imx95.dtsi
> index e45014d50abe..03c7f3de6e9c 100644
> --- a/arch/arm64/boot/dts/freescale/imx95.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx95.dtsi
> @@ -1765,6 +1765,17 @@ smmu: iommu@490d0000 {
> };
> };
>
> + neoisp0: isp@4ae00000 {
> + compatible = "nxp,imx95-b0-neoisp";
And where are all other compatibles? Why did you define four compatibles
in the binding?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (9 preceding siblings ...)
2026-01-23 8:09 ` [RFC v1 11/11] arm64: dts: freescale: imx95: Add NXP neoisp device tree node Antoine Bouyer
@ 2026-01-26 9:44 ` Michael Riesch
2026-01-28 8:17 ` [EXT] " Antoine Bouyer
2026-02-06 20:51 ` Michael Riesch
11 siblings, 1 reply; 49+ messages in thread
From: Michael Riesch @ 2026-01-26 9:44 UTC (permalink / raw)
To: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
Hi Antoine,
On 1/23/26 09:09, Antoine Bouyer wrote:
> Hi all,
>
> This RFC patch series introduces the NXP Neo Image Signal Processor (ISP)
> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9 family.
> The series also includes updates to the generic v4l2-isp interface to
> support extended statistics required by the Neo ISP.
>
> The Neo ISP processes one or more camera streams, converting RAW formats
> into YUV or RGB outputs. Its architecture is largely influenced by the
> PISP driver. The hardware supports up to eight contexts, with three sink
> pads (main input, HDR input, and parameter buffers) and three source pads
> (RGB output, IR output, and statistics metadata).
>
> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> parameter/statistics buffers are supported through the generic v4l2-isp
> framework, similar to rkisp1 and Mali-C55. The driver currently supports
> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
How do you envisage the direct CSI-to-ISP streaming shall be supported?
- How shall the final media graph(s) look like?
- How many media devices are registered and which driver registers it
or them?
- How can the user decide whether direct (csi2isp) or indirect
(mem2mem) streaming shall be used?
While it is certainly OK to introduce this support only at a later
stage, it makes sense to consider this right from the start to avoid
some nasty changes e.g. in how this hardware is exposed to user space.
Also, we are facing a similiar challenge with recent Rockchip ISP
hardware (RK3588, RK3576, ...) and it would be great to hear your
thoughts about that.
Thanks in advance and best regards,
Michael
>
> This series is posted as RFC because extending the v4l2-isp interface may
> overlap with ongoing work. If similar development already exists, I am
> happy to rebase or adapt the series accordingly. If preferred, the series
> can also be split into two parts: the v4l2-isp rework and the Neo ISP
> driver introduction.
>
> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> consistent with the existing style in that file.
>
> Testing was performed on the i.MX95 EVK using the media/next kernel in
> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> using the downstream NXP kernel, as some hardware dependencies are not
> yet upstreamed.
>
> Thanks,
> Antoine
>
> ---
> Here are v4l2-compliance test results:
>
> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>
> Compliance test for neoisp device /dev/media0:
>
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
>
> Required ioctls:
> test MEDIA_IOC_DEVICE_INFO: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/media0 open: OK
> test MEDIA_IOC_DEVICE_INFO: OK
> test for unlimited opens: OK
>
> Media Controller ioctls:
> test MEDIA_IOC_G_TOPOLOGY: OK
> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> test MEDIA_IOC_SETUP_LINK: OK
>
> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/video0:
>
> Driver Info:
> Driver name : neoisp
> Card type : neoisp
> Bus info : platform:4ae00000.isp
> Driver version : 6.19.0
> Capabilities : 0x8ca03000
> Video Capture Multiplanar
> Video Output Multiplanar
> Metadata Capture
> Metadata Output
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04202000
> Video Output Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x0300000a
> Type : V4L Video
> Entity Info:
> ID : 0x00000008 (8)
> Name : neoisp-input0
> Function : V4L2 I/O
> Pad 0x01000009 : 0: Source
> Link 0x0200000c: to remote pad 0x1000002 of entity 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video0 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK
> test Composing: OK (Not Supported)
> test Scaling: OK
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/video1:
>
> Driver Info:
> Driver name : neoisp
> Card type : neoisp
> Bus info : platform:4ae00000.isp
> Driver version : 6.19.0
> Capabilities : 0x8ca03000
> Video Capture Multiplanar
> Video Output Multiplanar
> Metadata Capture
> Metadata Output
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04202000
> Video Output Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x03000010
> Type : V4L Video
> Entity Info:
> ID : 0x0000000e (14)
> Name : neoisp-input1
> Function : V4L2 I/O
> Pad 0x0100000f : 0: Source
> Link 0x02000012: to remote pad 0x1000003 of entity 'neoisp' (Image Signal Processor): Data
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video1 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK
> test Composing: OK (Not Supported)
> test Scaling: OK
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/video2:
>
> Driver Info:
> Driver name : neoisp
> Card type : neoisp
> Bus info : platform:4ae00000.isp
> Driver version : 6.19.0
> Capabilities : 0x8ca03000
> Video Capture Multiplanar
> Video Output Multiplanar
> Metadata Capture
> Metadata Output
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x0c200000
> Metadata Output
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x03000016
> Type : V4L Video
> Entity Info:
> ID : 0x00000014 (20)
> Name : neoisp-params
> Function : V4L2 I/O
> Pad 0x01000015 : 0: Source
> Link 0x02000018: to remote pad 0x1000004 of entity 'neoisp' (Image Signal Processor): Data, Enabled
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video2 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/video3:
>
> Driver Info:
> Driver name : neoisp
> Card type : neoisp
> Bus info : platform:4ae00000.isp
> Driver version : 6.19.0
> Capabilities : 0x8ca03000
> Video Capture Multiplanar
> Video Output Multiplanar
> Metadata Capture
> Metadata Output
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04201000
> Video Capture Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x0300001c
> Type : V4L Video
> Entity Info:
> ID : 0x0000001a (26)
> Name : neoisp-frame
> Function : V4L2 I/O
> Pad 0x0100001b : 0: Sink
> Link 0x0200001e: from remote pad 0x1000005 of entity 'neoisp' (Image Signal Processor): Data, Enabled
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video3 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/video4:
>
> Driver Info:
> Driver name : neoisp
> Card type : neoisp
> Bus info : platform:4ae00000.isp
> Driver version : 6.19.0
> Capabilities : 0x8ca03000
> Video Capture Multiplanar
> Video Output Multiplanar
> Metadata Capture
> Metadata Output
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04201000
> Video Capture Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x03000022
> Type : V4L Video
> Entity Info:
> ID : 0x00000020 (32)
> Name : neoisp-ir
> Function : V4L2 I/O
> Pad 0x01000021 : 0: Sink
> Link 0x02000024: from remote pad 0x1000006 of entity 'neoisp' (Image Signal Processor): Data
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video4 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/video5:
>
> Driver Info:
> Driver name : neoisp
> Card type : neoisp
> Bus info : platform:4ae00000.isp
> Driver version : 6.19.0
> Capabilities : 0x8ca03000
> Video Capture Multiplanar
> Video Output Multiplanar
> Metadata Capture
> Metadata Output
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04a00000
> Metadata Capture
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x03000028
> Type : V4L Video
> Entity Info:
> ID : 0x00000026 (38)
> Name : neoisp-stats
> Function : V4L2 I/O
> Pad 0x01000027 : 0: Sink
> Link 0x0200002a: from remote pad 0x1000007 of entity 'neoisp' (Image Signal Processor): Data, Enabled
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video5 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0, Warnings: 0
> --------------------------------------------------------------------------------
> Compliance test for neoisp device /dev/v4l-subdev0:
>
> Driver Info:
> Driver version : 6.19.0
> Capabilities : 0x00000000
> Client Capabilities: 0x0000000000000002
> interval-uses-which Media Driver Info:
> Driver name : neoisp
> Model : neoisp
> Serial :
> Bus info : platform:4ae00000.isp
> Media version : 6.19.0
> Hardware revision: 0x00000002 (2)
> Driver version : 6.19.0
> Interface Info:
> ID : 0x0300002c
> Type : V4L Sub-Device
> Entity Info:
> ID : 0x00000001 (1)
> Name : neoisp
> Function : Image Signal Processor
> Pad 0x01000002 : 0: Sink
> Link 0x0200000c: from remote pad 0x1000009 of entity 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> Pad 0x01000003 : 1: Sink
> Link 0x02000012: from remote pad 0x100000f of entity 'neoisp-input1' (V4L2 I/O): Data
> Pad 0x01000004 : 2: Sink
> Link 0x02000018: from remote pad 0x1000015 of entity 'neoisp-params' (V4L2 I/O): Data, Enabled
> Pad 0x01000005 : 3: Source
> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-frame' (V4L2 I/O): Data, Enabled
> Pad 0x01000006 : 4: Source
> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-ir' (V4L2 I/O): Data
> Pad 0x01000007 : 5: Source
> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-stats' (V4L2 I/O): Data, Enabled
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_SUDBEV_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/v4l-subdev0 open: OK
> test VIDIOC_SUBDEV_QUERYCAP: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 0):
> Try Stream 0
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> Active Stream 0
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 1):
> Try Stream 0
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> Active Stream 0
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 2):
> Try Stream 0
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> Active Stream 0
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 3):
> Try Stream 0
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> Active Stream 0
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 4):
> Try Stream 0
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> Active Stream 0
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 5):
> Try Stream 0
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> Active Stream 0
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> test VIDIOC_QUERYCTRL: OK
> test VIDIOC_G/S_CTRL: OK
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 1 Private Controls: 1
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK (Not Supported)
> test VIDIOC_TRY_FMT: OK (Not Supported)
> test VIDIOC_S_FMT: OK (Not Supported)
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK (Not Supported)
> test Requests: OK (Not Supported)
>
> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed: 0, Warnings: 0
>
> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384, Failed: 0, Warnings: 0
>
> ---
> Antoine Bouyer (11):
> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> media: v4l2-isp: Add helper function to compute extended stats size
> media: Documentation: uapi: Update V4L2 ISP for extensible stats
> media: Documentation: Add NXP neoisp driver documentation
> dt-bindings: media: Add nxp neoisp support
> media: v4l2-ctrls: Add user control base for NXP neoisp controls
> media: Add meta formats supported by NXP neoisp driver
> media: uapi: Add NXP NEOISP user interface header file
> media: platform: Add NXP Neoisp Image Signal Processor
> media: platform: neoisp: Add debugfs support
> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>
> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> .../admin-guide/media/nxp-neoisp.dot | 16 +
> .../admin-guide/media/nxp-neoisp.rst | 189 ++
> .../admin-guide/media/v4l-drivers.rst | 1 +
> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> .../userspace-api/media/v4l/meta-formats.rst | 1 +
> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> MAINTAINERS | 9 +
> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> drivers/media/platform/nxp/Kconfig | 1 +
> drivers/media/platform/nxp/Makefile | 1 +
> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> drivers/media/platform/nxp/neoisp/Makefile | 8 +
> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> include/media/v4l2-isp.h | 13 +
> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> include/uapi/linux/media/v4l2-isp.h | 85 +
> include/uapi/linux/v4l2-controls.h | 6 +
> include/uapi/linux/videodev2.h | 6 +
> 30 files changed, 11880 insertions(+), 3 deletions(-)
> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-diagram.dot
> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> create mode 100644 Documentation/devicetree/bindings/media/nxp,neoisp.yaml
> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-nxp-neoisp.rst
> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [EXT] Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-01-26 9:44 ` [RFC v1 00/11] Add iMX95 neoisp driver Michael Riesch
@ 2026-01-28 8:17 ` Antoine Bouyer
2026-01-28 23:00 ` Michael Riesch
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-01-28 8:17 UTC (permalink / raw)
To: Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
Hi Michael
On 1/26/26 10:44 AM, Michael Riesch wrote:
>
>
> Hi Antoine,
>
> On 1/23/26 09:09, Antoine Bouyer wrote:
>> Hi all,
>>
>> This RFC patch series introduces the NXP Neo Image Signal Processor (ISP)
>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9 family.
>> The series also includes updates to the generic v4l2-isp interface to
>> support extended statistics required by the Neo ISP.
>>
>> The Neo ISP processes one or more camera streams, converting RAW formats
>> into YUV or RGB outputs. Its architecture is largely influenced by the
>> PISP driver. The hardware supports up to eight contexts, with three sink
>> pads (main input, HDR input, and parameter buffers) and three source pads
>> (RGB output, IR output, and statistics metadata).
>>
>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
>> parameter/statistics buffers are supported through the generic v4l2-isp
>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
>
> How do you envisage the direct CSI-to-ISP streaming shall be supported?
At this stage, this streaming mode still needs to be evaluated on
neoisp. We should follow the integration model used by existing ISP
drivers to avoid duplicating solutions.
Below are my initial thoughts on the specific points you raised:
> - How shall the final media graph(s) look like?
The media entities would remain mostly identical, except for the absence
of ISI. The topology would be a direct linkg from
sensor->csi->formatter->neoisp.
> - How many media devices are registered and which driver registers it
> or them?
That will be part of the evaluation. My initial assumption is that
neoisp would be the appropriate component to register the media device
in this mode, since ISI is not involved, and ISI currently performs the
registration in the M2M configuration.
> - How can the user decide whether direct (csi2isp) or indirect
> (mem2mem) streaming shall be used?
That will also be part of the evaluation. From dts would be my first
option, but may prevent using both modes on same platform then.
>
> While it is certainly OK to introduce this support only at a later
> stage, it makes sense to consider this right from the start to avoid
> some nasty changes e.g. in how this hardware is exposed to user space.
>
> Also, we are facing a similiar challenge with recent Rockchip ISP
> hardware (RK3588, RK3576, ...) and it would be great to hear your
> thoughts about that.
Is there an existing discussion thread available on this topic? I would
be very interested in following it.
Thanks
Antoine
>
> Thanks in advance and best regards,
> Michael
>
>>
>> This series is posted as RFC because extending the v4l2-isp interface may
>> overlap with ongoing work. If similar development already exists, I am
>> happy to rebase or adapt the series accordingly. If preferred, the series
>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>> driver introduction.
>>
>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>> consistent with the existing style in that file.
>>
>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>> using the downstream NXP kernel, as some hardware dependencies are not
>> yet upstreamed.
>>
>> Thanks,
>> Antoine
>>
>> ---
>> Here are v4l2-compliance test results:
>>
>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>>
>> Compliance test for neoisp device /dev/media0:
>>
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>>
>> Required ioctls:
>> test MEDIA_IOC_DEVICE_INFO: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/media0 open: OK
>> test MEDIA_IOC_DEVICE_INFO: OK
>> test for unlimited opens: OK
>>
>> Media Controller ioctls:
>> test MEDIA_IOC_G_TOPOLOGY: OK
>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>> test MEDIA_IOC_SETUP_LINK: OK
>>
>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/video0:
>>
>> Driver Info:
>> Driver name : neoisp
>> Card type : neoisp
>> Bus info : platform:4ae00000.isp
>> Driver version : 6.19.0
>> Capabilities : 0x8ca03000
>> Video Capture Multiplanar
>> Video Output Multiplanar
>> Metadata Capture
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x04202000
>> Video Output Multiplanar
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x0300000a
>> Type : V4L Video
>> Entity Info:
>> ID : 0x00000008 (8)
>> Name : neoisp-input0
>> Function : V4L2 I/O
>> Pad 0x01000009 : 0: Source
>> Link 0x0200000c: to remote pad 0x1000002 of entity 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/video0 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK
>> test Composing: OK (Not Supported)
>> test Scaling: OK
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/video1:
>>
>> Driver Info:
>> Driver name : neoisp
>> Card type : neoisp
>> Bus info : platform:4ae00000.isp
>> Driver version : 6.19.0
>> Capabilities : 0x8ca03000
>> Video Capture Multiplanar
>> Video Output Multiplanar
>> Metadata Capture
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x04202000
>> Video Output Multiplanar
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x03000010
>> Type : V4L Video
>> Entity Info:
>> ID : 0x0000000e (14)
>> Name : neoisp-input1
>> Function : V4L2 I/O
>> Pad 0x0100000f : 0: Source
>> Link 0x02000012: to remote pad 0x1000003 of entity 'neoisp' (Image Signal Processor): Data
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/video1 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK
>> test Composing: OK (Not Supported)
>> test Scaling: OK
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/video2:
>>
>> Driver Info:
>> Driver name : neoisp
>> Card type : neoisp
>> Bus info : platform:4ae00000.isp
>> Driver version : 6.19.0
>> Capabilities : 0x8ca03000
>> Video Capture Multiplanar
>> Video Output Multiplanar
>> Metadata Capture
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x0c200000
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x03000016
>> Type : V4L Video
>> Entity Info:
>> ID : 0x00000014 (20)
>> Name : neoisp-params
>> Function : V4L2 I/O
>> Pad 0x01000015 : 0: Source
>> Link 0x02000018: to remote pad 0x1000004 of entity 'neoisp' (Image Signal Processor): Data, Enabled
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/video2 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK (Not Supported)
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/video3:
>>
>> Driver Info:
>> Driver name : neoisp
>> Card type : neoisp
>> Bus info : platform:4ae00000.isp
>> Driver version : 6.19.0
>> Capabilities : 0x8ca03000
>> Video Capture Multiplanar
>> Video Output Multiplanar
>> Metadata Capture
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x04201000
>> Video Capture Multiplanar
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x0300001c
>> Type : V4L Video
>> Entity Info:
>> ID : 0x0000001a (26)
>> Name : neoisp-frame
>> Function : V4L2 I/O
>> Pad 0x0100001b : 0: Sink
>> Link 0x0200001e: from remote pad 0x1000005 of entity 'neoisp' (Image Signal Processor): Data, Enabled
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/video3 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/video4:
>>
>> Driver Info:
>> Driver name : neoisp
>> Card type : neoisp
>> Bus info : platform:4ae00000.isp
>> Driver version : 6.19.0
>> Capabilities : 0x8ca03000
>> Video Capture Multiplanar
>> Video Output Multiplanar
>> Metadata Capture
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x04201000
>> Video Capture Multiplanar
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x03000022
>> Type : V4L Video
>> Entity Info:
>> ID : 0x00000020 (32)
>> Name : neoisp-ir
>> Function : V4L2 I/O
>> Pad 0x01000021 : 0: Sink
>> Link 0x02000024: from remote pad 0x1000006 of entity 'neoisp' (Image Signal Processor): Data
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/video4 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/video5:
>>
>> Driver Info:
>> Driver name : neoisp
>> Card type : neoisp
>> Bus info : platform:4ae00000.isp
>> Driver version : 6.19.0
>> Capabilities : 0x8ca03000
>> Video Capture Multiplanar
>> Video Output Multiplanar
>> Metadata Capture
>> Metadata Output
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x04a00000
>> Metadata Capture
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x03000028
>> Type : V4L Video
>> Entity Info:
>> ID : 0x00000026 (38)
>> Name : neoisp-stats
>> Function : V4L2 I/O
>> Pad 0x01000027 : 0: Sink
>> Link 0x0200002a: from remote pad 0x1000007 of entity 'neoisp' (Image Signal Processor): Data, Enabled
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/video5 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK (Not Supported)
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0, Warnings: 0
>> --------------------------------------------------------------------------------
>> Compliance test for neoisp device /dev/v4l-subdev0:
>>
>> Driver Info:
>> Driver version : 6.19.0
>> Capabilities : 0x00000000
>> Client Capabilities: 0x0000000000000002
>> interval-uses-which Media Driver Info:
>> Driver name : neoisp
>> Model : neoisp
>> Serial :
>> Bus info : platform:4ae00000.isp
>> Media version : 6.19.0
>> Hardware revision: 0x00000002 (2)
>> Driver version : 6.19.0
>> Interface Info:
>> ID : 0x0300002c
>> Type : V4L Sub-Device
>> Entity Info:
>> ID : 0x00000001 (1)
>> Name : neoisp
>> Function : Image Signal Processor
>> Pad 0x01000002 : 0: Sink
>> Link 0x0200000c: from remote pad 0x1000009 of entity 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
>> Pad 0x01000003 : 1: Sink
>> Link 0x02000012: from remote pad 0x100000f of entity 'neoisp-input1' (V4L2 I/O): Data
>> Pad 0x01000004 : 2: Sink
>> Link 0x02000018: from remote pad 0x1000015 of entity 'neoisp-params' (V4L2 I/O): Data, Enabled
>> Pad 0x01000005 : 3: Source
>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-frame' (V4L2 I/O): Data, Enabled
>> Pad 0x01000006 : 4: Source
>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-ir' (V4L2 I/O): Data
>> Pad 0x01000007 : 5: Source
>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-stats' (V4L2 I/O): Data, Enabled
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_SUDBEV_QUERYCAP: OK
>> test invalid ioctls: OK
>>
>> Allow for multiple opens:
>> test second /dev/v4l-subdev0 open: OK
>> test VIDIOC_SUBDEV_QUERYCAP: OK
>> test for unlimited opens: OK
>>
>> Debug ioctls:
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Sub-Device ioctls (Sink Pad 0):
>> Try Stream 0
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> Active Stream 0
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Sink Pad 1):
>> Try Stream 0
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> Active Stream 0
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Sink Pad 2):
>> Try Stream 0
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> Active Stream 0
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Source Pad 3):
>> Try Stream 0
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> Active Stream 0
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Source Pad 4):
>> Try Stream 0
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> Active Stream 0
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Source Pad 5):
>> Try Stream 0
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> Active Stream 0
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>> test VIDIOC_QUERYCTRL: OK
>> test VIDIOC_G/S_CTRL: OK
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 1 Private Controls: 1
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK (Not Supported)
>> test VIDIOC_TRY_FMT: OK (Not Supported)
>> test VIDIOC_S_FMT: OK (Not Supported)
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK (Not Supported)
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>> test CREATE_BUFS maximum buffers: OK
>> test VIDIOC_REMOVE_BUFS: OK
>> test VIDIOC_EXPBUF: OK (Not Supported)
>> test Requests: OK (Not Supported)
>>
>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed: 0, Warnings: 0
>>
>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384, Failed: 0, Warnings: 0
>>
>> ---
>> Antoine Bouyer (11):
>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
>> media: v4l2-isp: Add helper function to compute extended stats size
>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
>> media: Documentation: Add NXP neoisp driver documentation
>> dt-bindings: media: Add nxp neoisp support
>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
>> media: Add meta formats supported by NXP neoisp driver
>> media: uapi: Add NXP NEOISP user interface header file
>> media: platform: Add NXP Neoisp Image Signal Processor
>> media: platform: neoisp: Add debugfs support
>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>>
>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
>> .../admin-guide/media/nxp-neoisp.dot | 16 +
>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
>> .../admin-guide/media/v4l-drivers.rst | 1 +
>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
>> MAINTAINERS | 9 +
>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
>> drivers/media/platform/nxp/Kconfig | 1 +
>> drivers/media/platform/nxp/Makefile | 1 +
>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
>> include/media/v4l2-isp.h | 13 +
>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
>> include/uapi/linux/media/v4l2-isp.h | 85 +
>> include/uapi/linux/v4l2-controls.h | 6 +
>> include/uapi/linux/videodev2.h | 6 +
>> 30 files changed, 11880 insertions(+), 3 deletions(-)
>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-diagram.dot
>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
>> create mode 100644 Documentation/devicetree/bindings/media/nxp,neoisp.yaml
>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-nxp-neoisp.rst
>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [EXT] Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-01-28 8:17 ` [EXT] " Antoine Bouyer
@ 2026-01-28 23:00 ` Michael Riesch
2026-02-03 18:37 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Michael Riesch @ 2026-01-28 23:00 UTC (permalink / raw)
To: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
Hi Antoine,
Thanks for your response.
On 1/28/26 09:17, Antoine Bouyer wrote:
> Hi Michael
>
> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>
>>
>> Hi Antoine,
>>
>> On 1/23/26 09:09, Antoine Bouyer wrote:
>>> Hi all,
>>>
>>> This RFC patch series introduces the NXP Neo Image Signal Processor
>>> (ISP)
>>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
>>> family.
>>> The series also includes updates to the generic v4l2-isp interface to
>>> support extended statistics required by the Neo ISP.
>>>
>>> The Neo ISP processes one or more camera streams, converting RAW formats
>>> into YUV or RGB outputs. Its architecture is largely influenced by the
>>> PISP driver. The hardware supports up to eight contexts, with three sink
>>> pads (main input, HDR input, and parameter buffers) and three source
>>> pads
>>> (RGB output, IR output, and statistics metadata).
>>>
>>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
>>> parameter/statistics buffers are supported through the generic v4l2-isp
>>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
>>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
>>
>> How do you envisage the direct CSI-to-ISP streaming shall be supported?
>
> At this stage, this streaming mode still needs to be evaluated on
> neoisp. We should follow the integration model used by existing ISP
> drivers to avoid duplicating solutions.
Fair point, but I have had the impression that there are not many
examples (if any). The rkisp1 driver, for instance, only supports inline
mode although the HW should be able to do both.
But any pointers most welcome, I won't claim I have the full overview.
>
> Below are my initial thoughts on the specific points you raised:
>
>> - How shall the final media graph(s) look like?
>
> The media entities would remain mostly identical, except for the absence
> of ISI. The topology would be a direct linkg from sensor->csi-
>>formatter->neoisp.
OK, I thought that ISI was still around...
>
>> - How many media devices are registered and which driver registers it
>> or them?
>
> That will be part of the evaluation. My initial assumption is that
> neoisp would be the appropriate component to register the media device
> in this mode, since ISI is not involved, and ISI currently performs the
> registration in the M2M configuration.
... since it is not, your assumption seems very reasonable.
>
>> - How can the user decide whether direct (csi2isp) or indirect
>> (mem2mem) streaming shall be used?
>
> That will also be part of the evaluation. From dts would be my first
> option, but may prevent using both modes on same platform then.
Of course this depends what the hardware is able to do, but in case the
HW is reconfigurable easily, I doubt that device tree is a good choice
to solve that.
>
>>
>> While it is certainly OK to introduce this support only at a later
>> stage, it makes sense to consider this right from the start to avoid
>> some nasty changes e.g. in how this hardware is exposed to user space.
>>
>> Also, we are facing a similiar challenge with recent Rockchip ISP
>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>> thoughts about that.
>
> Is there an existing discussion thread available on this topic? I would
> be very interested in following it.
Not yet, I am afraid. But there should be one or two soon (TM) :-)
Thanks and regards,
Michael
>
> Thanks
> Antoine
>
>>
>> Thanks in advance and best regards,
>> Michael
>>
>>>
>>> This series is posted as RFC because extending the v4l2-isp interface
>>> may
>>> overlap with ongoing work. If similar development already exists, I am
>>> happy to rebase or adapt the series accordingly. If preferred, the
>>> series
>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>> driver introduction.
>>>
>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>> consistent with the existing style in that file.
>>>
>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>> using the downstream NXP kernel, as some hardware dependencies are not
>>> yet upstreamed.
>>>
>>> Thanks,
>>> Antoine
>>>
>>> ---
>>> Here are v4l2-compliance test results:
>>>
>>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
>>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>>>
>>> Compliance test for neoisp device /dev/media0:
>>>
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>>
>>> Required ioctls:
>>> test MEDIA_IOC_DEVICE_INFO: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/media0 open: OK
>>> test MEDIA_IOC_DEVICE_INFO: OK
>>> test for unlimited opens: OK
>>>
>>> Media Controller ioctls:
>>> test MEDIA_IOC_G_TOPOLOGY: OK
>>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
>>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>>> test MEDIA_IOC_SETUP_LINK: OK
>>>
>>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/video0:
>>>
>>> Driver Info:
>>> Driver name : neoisp
>>> Card type : neoisp
>>> Bus info : platform:4ae00000.isp
>>> Driver version : 6.19.0
>>> Capabilities : 0x8ca03000
>>> Video Capture Multiplanar
>>> Video Output Multiplanar
>>> Metadata Capture
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04202000
>>> Video Output Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x0300000a
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x00000008 (8)
>>> Name : neoisp-input0
>>> Function : V4L2 I/O
>>> Pad 0x01000009 : 0: Source
>>> Link 0x0200000c: to remote pad 0x1000002 of entity
>>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video0 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/video1:
>>>
>>> Driver Info:
>>> Driver name : neoisp
>>> Card type : neoisp
>>> Bus info : platform:4ae00000.isp
>>> Driver version : 6.19.0
>>> Capabilities : 0x8ca03000
>>> Video Capture Multiplanar
>>> Video Output Multiplanar
>>> Metadata Capture
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04202000
>>> Video Output Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x03000010
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x0000000e (14)
>>> Name : neoisp-input1
>>> Function : V4L2 I/O
>>> Pad 0x0100000f : 0: Source
>>> Link 0x02000012: to remote pad 0x1000003 of entity
>>> 'neoisp' (Image Signal Processor): Data
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video1 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/video2:
>>>
>>> Driver Info:
>>> Driver name : neoisp
>>> Card type : neoisp
>>> Bus info : platform:4ae00000.isp
>>> Driver version : 6.19.0
>>> Capabilities : 0x8ca03000
>>> Video Capture Multiplanar
>>> Video Output Multiplanar
>>> Metadata Capture
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x0c200000
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x03000016
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x00000014 (20)
>>> Name : neoisp-params
>>> Function : V4L2 I/O
>>> Pad 0x01000015 : 0: Source
>>> Link 0x02000018: to remote pad 0x1000004 of entity
>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video2 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK (Not Supported)
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/video3:
>>>
>>> Driver Info:
>>> Driver name : neoisp
>>> Card type : neoisp
>>> Bus info : platform:4ae00000.isp
>>> Driver version : 6.19.0
>>> Capabilities : 0x8ca03000
>>> Video Capture Multiplanar
>>> Video Output Multiplanar
>>> Metadata Capture
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04201000
>>> Video Capture Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x0300001c
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x0000001a (26)
>>> Name : neoisp-frame
>>> Function : V4L2 I/O
>>> Pad 0x0100001b : 0: Sink
>>> Link 0x0200001e: from remote pad 0x1000005 of entity
>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video3 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/video4:
>>>
>>> Driver Info:
>>> Driver name : neoisp
>>> Card type : neoisp
>>> Bus info : platform:4ae00000.isp
>>> Driver version : 6.19.0
>>> Capabilities : 0x8ca03000
>>> Video Capture Multiplanar
>>> Video Output Multiplanar
>>> Metadata Capture
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04201000
>>> Video Capture Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x03000022
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x00000020 (32)
>>> Name : neoisp-ir
>>> Function : V4L2 I/O
>>> Pad 0x01000021 : 0: Sink
>>> Link 0x02000024: from remote pad 0x1000006 of entity
>>> 'neoisp' (Image Signal Processor): Data
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video4 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/video5:
>>>
>>> Driver Info:
>>> Driver name : neoisp
>>> Card type : neoisp
>>> Bus info : platform:4ae00000.isp
>>> Driver version : 6.19.0
>>> Capabilities : 0x8ca03000
>>> Video Capture Multiplanar
>>> Video Output Multiplanar
>>> Metadata Capture
>>> Metadata Output
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04a00000
>>> Metadata Capture
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x03000028
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x00000026 (38)
>>> Name : neoisp-stats
>>> Function : V4L2 I/O
>>> Pad 0x01000027 : 0: Sink
>>> Link 0x0200002a: from remote pad 0x1000007 of entity
>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video5 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK (Not Supported)
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
>>> Warnings: 0
>>> --------------------------------------------------------------------------------
>>> Compliance test for neoisp device /dev/v4l-subdev0:
>>>
>>> Driver Info:
>>> Driver version : 6.19.0
>>> Capabilities : 0x00000000
>>> Client Capabilities: 0x0000000000000002
>>> interval-uses-which Media Driver Info:
>>> Driver name : neoisp
>>> Model : neoisp
>>> Serial :
>>> Bus info : platform:4ae00000.isp
>>> Media version : 6.19.0
>>> Hardware revision: 0x00000002 (2)
>>> Driver version : 6.19.0
>>> Interface Info:
>>> ID : 0x0300002c
>>> Type : V4L Sub-Device
>>> Entity Info:
>>> ID : 0x00000001 (1)
>>> Name : neoisp
>>> Function : Image Signal Processor
>>> Pad 0x01000002 : 0: Sink
>>> Link 0x0200000c: from remote pad 0x1000009 of entity
>>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
>>> Pad 0x01000003 : 1: Sink
>>> Link 0x02000012: from remote pad 0x100000f of entity
>>> 'neoisp-input1' (V4L2 I/O): Data
>>> Pad 0x01000004 : 2: Sink
>>> Link 0x02000018: from remote pad 0x1000015 of entity
>>> 'neoisp-params' (V4L2 I/O): Data, Enabled
>>> Pad 0x01000005 : 3: Source
>>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
>>> frame' (V4L2 I/O): Data, Enabled
>>> Pad 0x01000006 : 4: Source
>>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
>>> ir' (V4L2 I/O): Data
>>> Pad 0x01000007 : 5: Source
>>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
>>> stats' (V4L2 I/O): Data, Enabled
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_SUDBEV_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/v4l-subdev0 open: OK
>>> test VIDIOC_SUBDEV_QUERYCAP: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Sub-Device ioctls (Sink Pad 0):
>>> Try Stream 0
>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> Active Stream 0
>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>
>>> Sub-Device ioctls (Sink Pad 1):
>>> Try Stream 0
>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> Active Stream 0
>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>
>>> Sub-Device ioctls (Sink Pad 2):
>>> Try Stream 0
>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> Active Stream 0
>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>
>>> Sub-Device ioctls (Source Pad 3):
>>> Try Stream 0
>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> Active Stream 0
>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>
>>> Sub-Device ioctls (Source Pad 4):
>>> Try Stream 0
>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> Active Stream 0
>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>
>>> Sub-Device ioctls (Source Pad 5):
>>> Try Stream 0
>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> Active Stream 0
>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>> FRAME_INTERVAL: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>> test VIDIOC_QUERYCTRL: OK
>>> test VIDIOC_G/S_CTRL: OK
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 1 Private Controls: 1
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
>>> Supported)
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK (Not Supported)
>>> test VIDIOC_TRY_FMT: OK (Not Supported)
>>> test VIDIOC_S_FMT: OK (Not Supported)
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK (Not Supported)
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK (Not Supported)
>>> test Requests: OK (Not Supported)
>>>
>>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
>>> 0, Warnings: 0
>>>
>>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
>>> Failed: 0, Warnings: 0
>>>
>>> ---
>>> Antoine Bouyer (11):
>>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
>>> media: v4l2-isp: Add helper function to compute extended stats size
>>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
>>> media: Documentation: Add NXP neoisp driver documentation
>>> dt-bindings: media: Add nxp neoisp support
>>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
>>> media: Add meta formats supported by NXP neoisp driver
>>> media: uapi: Add NXP NEOISP user interface header file
>>> media: platform: Add NXP Neoisp Image Signal Processor
>>> media: platform: neoisp: Add debugfs support
>>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>>>
>>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
>>> .../admin-guide/media/nxp-neoisp.dot | 16 +
>>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
>>> .../admin-guide/media/v4l-drivers.rst | 1 +
>>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
>>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
>>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
>>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
>>> MAINTAINERS | 9 +
>>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
>>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
>>> drivers/media/platform/nxp/Kconfig | 1 +
>>> drivers/media/platform/nxp/Makefile | 1 +
>>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
>>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
>>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
>>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
>>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
>>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
>>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
>>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
>>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
>>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
>>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
>>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
>>> include/media/v4l2-isp.h | 13 +
>>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
>>> include/uapi/linux/media/v4l2-isp.h | 85 +
>>> include/uapi/linux/v4l2-controls.h | 6 +
>>> include/uapi/linux/videodev2.h | 6 +
>>> 30 files changed, 11880 insertions(+), 3 deletions(-)
>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
>>> diagram.dot
>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
>>> create mode 100644 Documentation/devicetree/bindings/media/
>>> nxp,neoisp.yaml
>>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
>>> nxp-neoisp.rst
>>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
>>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
>>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>>>
>>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [EXT] Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-01-28 23:00 ` Michael Riesch
@ 2026-02-03 18:37 ` Jacopo Mondi
2026-02-04 17:12 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-03 18:37 UTC (permalink / raw)
To: Michael Riesch
Cc: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam, linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
Hello
On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> Hi Antoine,
>
> Thanks for your response.
>
> On 1/28/26 09:17, Antoine Bouyer wrote:
> > Hi Michael
> >
> > On 1/26/26 10:44 AM, Michael Riesch wrote:
> >>
> >>
> >> Hi Antoine,
> >>
> >> On 1/23/26 09:09, Antoine Bouyer wrote:
> >>> Hi all,
> >>>
> >>> This RFC patch series introduces the NXP Neo Image Signal Processor
> >>> (ISP)
> >>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
> >>> family.
> >>> The series also includes updates to the generic v4l2-isp interface to
> >>> support extended statistics required by the Neo ISP.
> >>>
> >>> The Neo ISP processes one or more camera streams, converting RAW formats
> >>> into YUV or RGB outputs. Its architecture is largely influenced by the
> >>> PISP driver. The hardware supports up to eight contexts, with three sink
> >>> pads (main input, HDR input, and parameter buffers) and three source
> >>> pads
> >>> (RGB output, IR output, and statistics metadata).
> >>>
> >>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> >>> parameter/statistics buffers are supported through the generic v4l2-isp
> >>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
> >>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
> >>
> >> How do you envisage the direct CSI-to-ISP streaming shall be supported?
> >
> > At this stage, this streaming mode still needs to be evaluated on
> > neoisp. We should follow the integration model used by existing ISP
> > drivers to avoid duplicating solutions.
>
> Fair point, but I have had the impression that there are not many
> examples (if any). The rkisp1 driver, for instance, only supports inline
> mode although the HW should be able to do both.
>
> But any pointers most welcome, I won't claim I have the full overview.
>
> >
> > Below are my initial thoughts on the specific points you raised:
> >
> >> - How shall the final media graph(s) look like?
> >
> > The media entities would remain mostly identical, except for the absence
> > of ISI. The topology would be a direct linkg from sensor->csi-
> >>formatter->neoisp.
If support for inline mode has to be added later, the ISP will need to
be registered in the same media graph of the CSI-2 receiver to be able
to link the two, right ?
How do you envision to control the ISP operating mode, because I'm
afraid if you register the ISP in its own media graph, you're locking
yourself there as implementing inline mode would require a different
media topology with all the implications on the rest of the userspace
stack.
This might not be a problem if you know that the inline vs m2m mode is
SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
other as m2m. In this case you'll likely need two pipeline handlers
in libcamera, but if that's per SoC-line maybe is acceptable. The fact
you suggests in inline mode there won't be an ISI makes me think this
actually depends on the SoC design ?
However, if you plan to allow deferring inline/m2m mode selection to
the system integrators or even have it as a run-time parameter, then
you should really consider having the ISP in the same media graph as
the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
media graph, where you could select the operating mode through media link
enablement or dts endpoint connections
Niklas (in cc) has addressed a similar situation, where inline and m2m
mode can be selected by link enablement at runtime here
https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
(see risp_cs_internal_ops)
>
> OK, I thought that ISI was still around...
>
> >
> >> - How many media devices are registered and which driver registers it
> >> or them?
> >
> > That will be part of the evaluation. My initial assumption is that
> > neoisp would be the appropriate component to register the media device
> > in this mode, since ISI is not involved, and ISI currently performs the
> > registration in the M2M configuration.
Isn't the ISP registering its own media graph ?
Can we get a copy of all media graphs on an i.MX95 system including
the ISI and the CSI-2 receiver ?
If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
that's exactly what we're working on with the context framework :)
>
> ... since it is not, your assumption seems very reasonable.
>
> >
> >> - How can the user decide whether direct (csi2isp) or indirect
> >> (mem2mem) streaming shall be used?
> >
> > That will also be part of the evaluation. From dts would be my first
> > option, but may prevent using both modes on same platform then.
>
> Of course this depends what the hardware is able to do, but in case the
> HW is reconfigurable easily, I doubt that device tree is a good choice
> to solve that.
> >
> >>
> >> While it is certainly OK to introduce this support only at a later
> >> stage, it makes sense to consider this right from the start to avoid
> >> some nasty changes e.g. in how this hardware is exposed to user space.
> >>
> >> Also, we are facing a similiar challenge with recent Rockchip ISP
> >> hardware (RK3588, RK3576, ...) and it would be great to hear your
> >> thoughts about that.
> >
> > Is there an existing discussion thread available on this topic? I would
> > be very interested in following it.
>
> Not yet, I am afraid. But there should be one or two soon (TM) :-)
It's probably time to have one :)
>
> Thanks and regards,
> Michael
>
> >
> > Thanks
> > Antoine
> >
> >>
> >> Thanks in advance and best regards,
> >> Michael
> >>
> >>>
> >>> This series is posted as RFC because extending the v4l2-isp interface
> >>> may
> >>> overlap with ongoing work. If similar development already exists, I am
> >>> happy to rebase or adapt the series accordingly. If preferred, the
> >>> series
> >>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
> >>> driver introduction.
> >>>
> >>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> >>> consistent with the existing style in that file.
> >>>
> >>> Testing was performed on the i.MX95 EVK using the media/next kernel in
> >>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> >>> using the downstream NXP kernel, as some hardware dependencies are not
> >>> yet upstreamed.
> >>>
> >>> Thanks,
> >>> Antoine
> >>>
> >>> ---
> >>> Here are v4l2-compliance test results:
> >>>
> >>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> >>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
> >>>
> >>> Compliance test for neoisp device /dev/media0:
> >>>
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>>
> >>> Required ioctls:
> >>> test MEDIA_IOC_DEVICE_INFO: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/media0 open: OK
> >>> test MEDIA_IOC_DEVICE_INFO: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Media Controller ioctls:
> >>> test MEDIA_IOC_G_TOPOLOGY: OK
> >>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> >>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> >>> test MEDIA_IOC_SETUP_LINK: OK
> >>>
> >>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/video0:
> >>>
> >>> Driver Info:
> >>> Driver name : neoisp
> >>> Card type : neoisp
> >>> Bus info : platform:4ae00000.isp
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x8ca03000
> >>> Video Capture Multiplanar
> >>> Video Output Multiplanar
> >>> Metadata Capture
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Device Capabilities
> >>> Device Caps : 0x04202000
> >>> Video Output Multiplanar
> >>> Streaming
> >>> Extended Pix Format
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x0300000a
> >>> Type : V4L Video
> >>> Entity Info:
> >>> ID : 0x00000008 (8)
> >>> Name : neoisp-input0
> >>> Function : V4L2 I/O
> >>> Pad 0x01000009 : 0: Source
> >>> Link 0x0200000c: to remote pad 0x1000002 of entity
> >>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/video0 open: OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test VIDIOC_G/S_PRIORITY: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 0 Private Controls: 0
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK
> >>> test VIDIOC_TRY_FMT: OK
> >>> test VIDIOC_S_FMT: OK
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/video1:
> >>>
> >>> Driver Info:
> >>> Driver name : neoisp
> >>> Card type : neoisp
> >>> Bus info : platform:4ae00000.isp
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x8ca03000
> >>> Video Capture Multiplanar
> >>> Video Output Multiplanar
> >>> Metadata Capture
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Device Capabilities
> >>> Device Caps : 0x04202000
> >>> Video Output Multiplanar
> >>> Streaming
> >>> Extended Pix Format
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x03000010
> >>> Type : V4L Video
> >>> Entity Info:
> >>> ID : 0x0000000e (14)
> >>> Name : neoisp-input1
> >>> Function : V4L2 I/O
> >>> Pad 0x0100000f : 0: Source
> >>> Link 0x02000012: to remote pad 0x1000003 of entity
> >>> 'neoisp' (Image Signal Processor): Data
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/video1 open: OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test VIDIOC_G/S_PRIORITY: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 0 Private Controls: 0
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK
> >>> test VIDIOC_TRY_FMT: OK
> >>> test VIDIOC_S_FMT: OK
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/video2:
> >>>
> >>> Driver Info:
> >>> Driver name : neoisp
> >>> Card type : neoisp
> >>> Bus info : platform:4ae00000.isp
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x8ca03000
> >>> Video Capture Multiplanar
> >>> Video Output Multiplanar
> >>> Metadata Capture
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Device Capabilities
> >>> Device Caps : 0x0c200000
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x03000016
> >>> Type : V4L Video
> >>> Entity Info:
> >>> ID : 0x00000014 (20)
> >>> Name : neoisp-params
> >>> Function : V4L2 I/O
> >>> Pad 0x01000015 : 0: Source
> >>> Link 0x02000018: to remote pad 0x1000004 of entity
> >>> 'neoisp' (Image Signal Processor): Data, Enabled
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/video2 open: OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test VIDIOC_G/S_PRIORITY: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 0 Private Controls: 0
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK
> >>> test VIDIOC_TRY_FMT: OK
> >>> test VIDIOC_S_FMT: OK
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK (Not Supported)
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK (Not Supported)
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/video3:
> >>>
> >>> Driver Info:
> >>> Driver name : neoisp
> >>> Card type : neoisp
> >>> Bus info : platform:4ae00000.isp
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x8ca03000
> >>> Video Capture Multiplanar
> >>> Video Output Multiplanar
> >>> Metadata Capture
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Device Capabilities
> >>> Device Caps : 0x04201000
> >>> Video Capture Multiplanar
> >>> Streaming
> >>> Extended Pix Format
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x0300001c
> >>> Type : V4L Video
> >>> Entity Info:
> >>> ID : 0x0000001a (26)
> >>> Name : neoisp-frame
> >>> Function : V4L2 I/O
> >>> Pad 0x0100001b : 0: Sink
> >>> Link 0x0200001e: from remote pad 0x1000005 of entity
> >>> 'neoisp' (Image Signal Processor): Data, Enabled
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/video3 open: OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test VIDIOC_G/S_PRIORITY: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 0 Private Controls: 0
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK
> >>> test VIDIOC_TRY_FMT: OK
> >>> test VIDIOC_S_FMT: OK
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK (Not Supported)
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/video4:
> >>>
> >>> Driver Info:
> >>> Driver name : neoisp
> >>> Card type : neoisp
> >>> Bus info : platform:4ae00000.isp
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x8ca03000
> >>> Video Capture Multiplanar
> >>> Video Output Multiplanar
> >>> Metadata Capture
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Device Capabilities
> >>> Device Caps : 0x04201000
> >>> Video Capture Multiplanar
> >>> Streaming
> >>> Extended Pix Format
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x03000022
> >>> Type : V4L Video
> >>> Entity Info:
> >>> ID : 0x00000020 (32)
> >>> Name : neoisp-ir
> >>> Function : V4L2 I/O
> >>> Pad 0x01000021 : 0: Sink
> >>> Link 0x02000024: from remote pad 0x1000006 of entity
> >>> 'neoisp' (Image Signal Processor): Data
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/video4 open: OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test VIDIOC_G/S_PRIORITY: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 0 Private Controls: 0
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK
> >>> test VIDIOC_TRY_FMT: OK
> >>> test VIDIOC_S_FMT: OK
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK (Not Supported)
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/video5:
> >>>
> >>> Driver Info:
> >>> Driver name : neoisp
> >>> Card type : neoisp
> >>> Bus info : platform:4ae00000.isp
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x8ca03000
> >>> Video Capture Multiplanar
> >>> Video Output Multiplanar
> >>> Metadata Capture
> >>> Metadata Output
> >>> Streaming
> >>> Extended Pix Format
> >>> Device Capabilities
> >>> Device Caps : 0x04a00000
> >>> Metadata Capture
> >>> Streaming
> >>> Extended Pix Format
> >>> Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x03000028
> >>> Type : V4L Video
> >>> Entity Info:
> >>> ID : 0x00000026 (38)
> >>> Name : neoisp-stats
> >>> Function : V4L2 I/O
> >>> Pad 0x01000027 : 0: Sink
> >>> Link 0x0200002a: from remote pad 0x1000007 of entity
> >>> 'neoisp' (Image Signal Processor): Data, Enabled
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/video5 open: OK
> >>> test VIDIOC_QUERYCAP: OK
> >>> test VIDIOC_G/S_PRIORITY: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 0 Private Controls: 0
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK
> >>> test VIDIOC_TRY_FMT: OK
> >>> test VIDIOC_S_FMT: OK
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK (Not Supported)
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK (Not Supported)
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
> >>> Warnings: 0
> >>> --------------------------------------------------------------------------------
> >>> Compliance test for neoisp device /dev/v4l-subdev0:
> >>>
> >>> Driver Info:
> >>> Driver version : 6.19.0
> >>> Capabilities : 0x00000000
> >>> Client Capabilities: 0x0000000000000002
> >>> interval-uses-which Media Driver Info:
> >>> Driver name : neoisp
> >>> Model : neoisp
> >>> Serial :
> >>> Bus info : platform:4ae00000.isp
> >>> Media version : 6.19.0
> >>> Hardware revision: 0x00000002 (2)
> >>> Driver version : 6.19.0
> >>> Interface Info:
> >>> ID : 0x0300002c
> >>> Type : V4L Sub-Device
> >>> Entity Info:
> >>> ID : 0x00000001 (1)
> >>> Name : neoisp
> >>> Function : Image Signal Processor
> >>> Pad 0x01000002 : 0: Sink
> >>> Link 0x0200000c: from remote pad 0x1000009 of entity
> >>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> >>> Pad 0x01000003 : 1: Sink
> >>> Link 0x02000012: from remote pad 0x100000f of entity
> >>> 'neoisp-input1' (V4L2 I/O): Data
> >>> Pad 0x01000004 : 2: Sink
> >>> Link 0x02000018: from remote pad 0x1000015 of entity
> >>> 'neoisp-params' (V4L2 I/O): Data, Enabled
> >>> Pad 0x01000005 : 3: Source
> >>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
> >>> frame' (V4L2 I/O): Data, Enabled
> >>> Pad 0x01000006 : 4: Source
> >>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
> >>> ir' (V4L2 I/O): Data
> >>> Pad 0x01000007 : 5: Source
> >>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
> >>> stats' (V4L2 I/O): Data, Enabled
> >>>
> >>> Required ioctls:
> >>> test MC information (see 'Media Driver Info' above): OK
> >>> test VIDIOC_SUDBEV_QUERYCAP: OK
> >>> test invalid ioctls: OK
> >>>
> >>> Allow for multiple opens:
> >>> test second /dev/v4l-subdev0 open: OK
> >>> test VIDIOC_SUBDEV_QUERYCAP: OK
> >>> test for unlimited opens: OK
> >>>
> >>> Debug ioctls:
> >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> >>>
> >>> Input ioctls:
> >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> >>>
> >>> Output ioctls:
> >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> >>>
> >>> Input/Output configuration ioctls:
> >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> >>>
> >>> Sub-Device ioctls (Sink Pad 0):
> >>> Try Stream 0
> >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> Active Stream 0
> >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> >>>
> >>> Sub-Device ioctls (Sink Pad 1):
> >>> Try Stream 0
> >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> Active Stream 0
> >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> >>>
> >>> Sub-Device ioctls (Sink Pad 2):
> >>> Try Stream 0
> >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> Active Stream 0
> >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> >>>
> >>> Sub-Device ioctls (Source Pad 3):
> >>> Try Stream 0
> >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> Active Stream 0
> >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> >>>
> >>> Sub-Device ioctls (Source Pad 4):
> >>> Try Stream 0
> >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> Active Stream 0
> >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> >>>
> >>> Sub-Device ioctls (Source Pad 5):
> >>> Try Stream 0
> >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> Active Stream 0
> >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> >>> FRAME_INTERVAL: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> >>>
> >>> Control ioctls:
> >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> >>> test VIDIOC_QUERYCTRL: OK
> >>> test VIDIOC_G/S_CTRL: OK
> >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> >>> Standard Controls: 1 Private Controls: 1
> >>>
> >>> Format ioctls:
> >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
> >>> Supported)
> >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> >>> test VIDIOC_G_FBUF: OK (Not Supported)
> >>> test VIDIOC_G_FMT: OK (Not Supported)
> >>> test VIDIOC_TRY_FMT: OK (Not Supported)
> >>> test VIDIOC_S_FMT: OK (Not Supported)
> >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> >>> test Cropping: OK (Not Supported)
> >>> test Composing: OK (Not Supported)
> >>> test Scaling: OK (Not Supported)
> >>>
> >>> Codec ioctls:
> >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> >>>
> >>> Buffer ioctls:
> >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> >>> test CREATE_BUFS maximum buffers: OK
> >>> test VIDIOC_REMOVE_BUFS: OK
> >>> test VIDIOC_EXPBUF: OK (Not Supported)
> >>> test Requests: OK (Not Supported)
> >>>
> >>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
> >>> 0, Warnings: 0
> >>>
> >>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
> >>> Failed: 0, Warnings: 0
> >>>
> >>> ---
> >>> Antoine Bouyer (11):
> >>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> >>> media: v4l2-isp: Add helper function to compute extended stats size
> >>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
> >>> media: Documentation: Add NXP neoisp driver documentation
> >>> dt-bindings: media: Add nxp neoisp support
> >>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
> >>> media: Add meta formats supported by NXP neoisp driver
> >>> media: uapi: Add NXP NEOISP user interface header file
> >>> media: platform: Add NXP Neoisp Image Signal Processor
> >>> media: platform: neoisp: Add debugfs support
> >>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
> >>>
> >>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> >>> .../admin-guide/media/nxp-neoisp.dot | 16 +
> >>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
> >>> .../admin-guide/media/v4l-drivers.rst | 1 +
> >>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> >>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
> >>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> >>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> >>> MAINTAINERS | 9 +
> >>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> >>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> >>> drivers/media/platform/nxp/Kconfig | 1 +
> >>> drivers/media/platform/nxp/Makefile | 1 +
> >>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> >>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
> >>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> >>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> >>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> >>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> >>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> >>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> >>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> >>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> >>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> >>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> >>> include/media/v4l2-isp.h | 13 +
> >>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> >>> include/uapi/linux/media/v4l2-isp.h | 85 +
> >>> include/uapi/linux/v4l2-controls.h | 6 +
> >>> include/uapi/linux/videodev2.h | 6 +
> >>> 30 files changed, 11880 insertions(+), 3 deletions(-)
> >>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
> >>> diagram.dot
> >>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> >>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> >>> create mode 100644 Documentation/devicetree/bindings/media/
> >>> nxp,neoisp.yaml
> >>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
> >>> nxp-neoisp.rst
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> >>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
> >>>
> >>
> >
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [EXT] Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-03 18:37 ` Jacopo Mondi
@ 2026-02-04 17:12 ` Jacopo Mondi
2026-02-04 18:30 ` Antoine Bouyer
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-04 17:12 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Michael Riesch, Antoine Bouyer, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li,
laurent.pinchart, mchehab, robh, krzk+dt, conor+dt, shawnguo,
s.hauer, kernel, festevam, linux-kernel, linux-media, devicetree,
linux-arm-kernel, niklas soderlund
Hello,
On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> Hello
>
> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> > Hi Antoine,
> >
> > Thanks for your response.
> >
> > On 1/28/26 09:17, Antoine Bouyer wrote:
> > > Hi Michael
> > >
> > > On 1/26/26 10:44 AM, Michael Riesch wrote:
> > >>
> > >>
> > >> Hi Antoine,
> > >>
> > >> On 1/23/26 09:09, Antoine Bouyer wrote:
> > >>> Hi all,
> > >>>
> > >>> This RFC patch series introduces the NXP Neo Image Signal Processor
> > >>> (ISP)
> > >>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
> > >>> family.
> > >>> The series also includes updates to the generic v4l2-isp interface to
> > >>> support extended statistics required by the Neo ISP.
> > >>>
> > >>> The Neo ISP processes one or more camera streams, converting RAW formats
> > >>> into YUV or RGB outputs. Its architecture is largely influenced by the
> > >>> PISP driver. The hardware supports up to eight contexts, with three sink
> > >>> pads (main input, HDR input, and parameter buffers) and three source
> > >>> pads
> > >>> (RGB output, IR output, and statistics metadata).
> > >>>
> > >>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> > >>> parameter/statistics buffers are supported through the generic v4l2-isp
> > >>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
> > >>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
> > >>
> > >> How do you envisage the direct CSI-to-ISP streaming shall be supported?
> > >
> > > At this stage, this streaming mode still needs to be evaluated on
> > > neoisp. We should follow the integration model used by existing ISP
> > > drivers to avoid duplicating solutions.
> >
> > Fair point, but I have had the impression that there are not many
> > examples (if any). The rkisp1 driver, for instance, only supports inline
> > mode although the HW should be able to do both.
> >
> > But any pointers most welcome, I won't claim I have the full overview.
> >
> > >
> > > Below are my initial thoughts on the specific points you raised:
> > >
> > >> - How shall the final media graph(s) look like?
> > >
> > > The media entities would remain mostly identical, except for the absence
> > > of ISI. The topology would be a direct linkg from sensor->csi-
> > >>formatter->neoisp.
>
> If support for inline mode has to be added later, the ISP will need to
> be registered in the same media graph of the CSI-2 receiver to be able
> to link the two, right ?
>
> How do you envision to control the ISP operating mode, because I'm
> afraid if you register the ISP in its own media graph, you're locking
> yourself there as implementing inline mode would require a different
> media topology with all the implications on the rest of the userspace
> stack.
>
> This might not be a problem if you know that the inline vs m2m mode is
> SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
> other as m2m. In this case you'll likely need two pipeline handlers
> in libcamera, but if that's per SoC-line maybe is acceptable. The fact
> you suggests in inline mode there won't be an ISI makes me think this
> actually depends on the SoC design ?
One small correction after some more research:
we actually already have a pipeline in libcamera that supports inline
and (will soon) support m2m: the mali c55 one. My take on "probably
need two pipeline handlers" was not correct then.
As said, Mali-C55 can be integrated inline or in m2m mode and this is
decided based on the device tree endpoint connections.
So, if you know neoisp will be integrated either inline or m2m in
different SoC lines, maybe deferring it to device tree is good enough
at the expense of a slightly more complicated pipeline ?
I guess this has implications on the bindings definition as well..
>
> However, if you plan to allow deferring inline/m2m mode selection to
> the system integrators or even have it as a run-time parameter, then
> you should really consider having the ISP in the same media graph as
> the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
> media graph, where you could select the operating mode through media link
> enablement or dts endpoint connections
>
> Niklas (in cc) has addressed a similar situation, where inline and m2m
> mode can be selected by link enablement at runtime here
> https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
> (see risp_cs_internal_ops)
>
> >
> > OK, I thought that ISI was still around...
> >
> > >
> > >> - How many media devices are registered and which driver registers it
> > >> or them?
> > >
> > > That will be part of the evaluation. My initial assumption is that
> > > neoisp would be the appropriate component to register the media device
> > > in this mode, since ISI is not involved, and ISI currently performs the
> > > registration in the M2M configuration.
>
> Isn't the ISP registering its own media graph ?
>
> Can we get a copy of all media graphs on an i.MX95 system including
> the ISI and the CSI-2 receiver ?
>
> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> that's exactly what we're working on with the context framework :)
>
>
> >
> > ... since it is not, your assumption seems very reasonable.
> >
> > >
> > >> - How can the user decide whether direct (csi2isp) or indirect
> > >> (mem2mem) streaming shall be used?
> > >
> > > That will also be part of the evaluation. From dts would be my first
> > > option, but may prevent using both modes on same platform then.
> >
> > Of course this depends what the hardware is able to do, but in case the
> > HW is reconfigurable easily, I doubt that device tree is a good choice
> > to solve that.
> > >
> > >>
> > >> While it is certainly OK to introduce this support only at a later
> > >> stage, it makes sense to consider this right from the start to avoid
> > >> some nasty changes e.g. in how this hardware is exposed to user space.
> > >>
> > >> Also, we are facing a similiar challenge with recent Rockchip ISP
> > >> hardware (RK3588, RK3576, ...) and it would be great to hear your
> > >> thoughts about that.
> > >
> > > Is there an existing discussion thread available on this topic? I would
> > > be very interested in following it.
> >
> > Not yet, I am afraid. But there should be one or two soon (TM) :-)
>
> It's probably time to have one :)
>
> >
> > Thanks and regards,
> > Michael
> >
> > >
> > > Thanks
> > > Antoine
> > >
> > >>
> > >> Thanks in advance and best regards,
> > >> Michael
> > >>
> > >>>
> > >>> This series is posted as RFC because extending the v4l2-isp interface
> > >>> may
> > >>> overlap with ongoing work. If similar development already exists, I am
> > >>> happy to rebase or adapt the series accordingly. If preferred, the
> > >>> series
> > >>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
> > >>> driver introduction.
> > >>>
> > >>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> > >>> consistent with the existing style in that file.
> > >>>
> > >>> Testing was performed on the i.MX95 EVK using the media/next kernel in
> > >>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> > >>> using the downstream NXP kernel, as some hardware dependencies are not
> > >>> yet upstreamed.
> > >>>
> > >>> Thanks,
> > >>> Antoine
> > >>>
> > >>> ---
> > >>> Here are v4l2-compliance test results:
> > >>>
> > >>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> > >>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
> > >>>
> > >>> Compliance test for neoisp device /dev/media0:
> > >>>
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>>
> > >>> Required ioctls:
> > >>> test MEDIA_IOC_DEVICE_INFO: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/media0 open: OK
> > >>> test MEDIA_IOC_DEVICE_INFO: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Media Controller ioctls:
> > >>> test MEDIA_IOC_G_TOPOLOGY: OK
> > >>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> > >>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> > >>> test MEDIA_IOC_SETUP_LINK: OK
> > >>>
> > >>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/video0:
> > >>>
> > >>> Driver Info:
> > >>> Driver name : neoisp
> > >>> Card type : neoisp
> > >>> Bus info : platform:4ae00000.isp
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x8ca03000
> > >>> Video Capture Multiplanar
> > >>> Video Output Multiplanar
> > >>> Metadata Capture
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Device Capabilities
> > >>> Device Caps : 0x04202000
> > >>> Video Output Multiplanar
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x0300000a
> > >>> Type : V4L Video
> > >>> Entity Info:
> > >>> ID : 0x00000008 (8)
> > >>> Name : neoisp-input0
> > >>> Function : V4L2 I/O
> > >>> Pad 0x01000009 : 0: Source
> > >>> Link 0x0200000c: to remote pad 0x1000002 of entity
> > >>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/video0 open: OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test VIDIOC_G/S_PRIORITY: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 0 Private Controls: 0
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK
> > >>> test VIDIOC_TRY_FMT: OK
> > >>> test VIDIOC_S_FMT: OK
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/video1:
> > >>>
> > >>> Driver Info:
> > >>> Driver name : neoisp
> > >>> Card type : neoisp
> > >>> Bus info : platform:4ae00000.isp
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x8ca03000
> > >>> Video Capture Multiplanar
> > >>> Video Output Multiplanar
> > >>> Metadata Capture
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Device Capabilities
> > >>> Device Caps : 0x04202000
> > >>> Video Output Multiplanar
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x03000010
> > >>> Type : V4L Video
> > >>> Entity Info:
> > >>> ID : 0x0000000e (14)
> > >>> Name : neoisp-input1
> > >>> Function : V4L2 I/O
> > >>> Pad 0x0100000f : 0: Source
> > >>> Link 0x02000012: to remote pad 0x1000003 of entity
> > >>> 'neoisp' (Image Signal Processor): Data
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/video1 open: OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test VIDIOC_G/S_PRIORITY: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 0 Private Controls: 0
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK
> > >>> test VIDIOC_TRY_FMT: OK
> > >>> test VIDIOC_S_FMT: OK
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/video2:
> > >>>
> > >>> Driver Info:
> > >>> Driver name : neoisp
> > >>> Card type : neoisp
> > >>> Bus info : platform:4ae00000.isp
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x8ca03000
> > >>> Video Capture Multiplanar
> > >>> Video Output Multiplanar
> > >>> Metadata Capture
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Device Capabilities
> > >>> Device Caps : 0x0c200000
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x03000016
> > >>> Type : V4L Video
> > >>> Entity Info:
> > >>> ID : 0x00000014 (20)
> > >>> Name : neoisp-params
> > >>> Function : V4L2 I/O
> > >>> Pad 0x01000015 : 0: Source
> > >>> Link 0x02000018: to remote pad 0x1000004 of entity
> > >>> 'neoisp' (Image Signal Processor): Data, Enabled
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/video2 open: OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test VIDIOC_G/S_PRIORITY: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 0 Private Controls: 0
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK
> > >>> test VIDIOC_TRY_FMT: OK
> > >>> test VIDIOC_S_FMT: OK
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK (Not Supported)
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK (Not Supported)
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/video3:
> > >>>
> > >>> Driver Info:
> > >>> Driver name : neoisp
> > >>> Card type : neoisp
> > >>> Bus info : platform:4ae00000.isp
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x8ca03000
> > >>> Video Capture Multiplanar
> > >>> Video Output Multiplanar
> > >>> Metadata Capture
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Device Capabilities
> > >>> Device Caps : 0x04201000
> > >>> Video Capture Multiplanar
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x0300001c
> > >>> Type : V4L Video
> > >>> Entity Info:
> > >>> ID : 0x0000001a (26)
> > >>> Name : neoisp-frame
> > >>> Function : V4L2 I/O
> > >>> Pad 0x0100001b : 0: Sink
> > >>> Link 0x0200001e: from remote pad 0x1000005 of entity
> > >>> 'neoisp' (Image Signal Processor): Data, Enabled
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/video3 open: OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test VIDIOC_G/S_PRIORITY: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 0 Private Controls: 0
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK
> > >>> test VIDIOC_TRY_FMT: OK
> > >>> test VIDIOC_S_FMT: OK
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK (Not Supported)
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/video4:
> > >>>
> > >>> Driver Info:
> > >>> Driver name : neoisp
> > >>> Card type : neoisp
> > >>> Bus info : platform:4ae00000.isp
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x8ca03000
> > >>> Video Capture Multiplanar
> > >>> Video Output Multiplanar
> > >>> Metadata Capture
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Device Capabilities
> > >>> Device Caps : 0x04201000
> > >>> Video Capture Multiplanar
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x03000022
> > >>> Type : V4L Video
> > >>> Entity Info:
> > >>> ID : 0x00000020 (32)
> > >>> Name : neoisp-ir
> > >>> Function : V4L2 I/O
> > >>> Pad 0x01000021 : 0: Sink
> > >>> Link 0x02000024: from remote pad 0x1000006 of entity
> > >>> 'neoisp' (Image Signal Processor): Data
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/video4 open: OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test VIDIOC_G/S_PRIORITY: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 0 Private Controls: 0
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK
> > >>> test VIDIOC_TRY_FMT: OK
> > >>> test VIDIOC_S_FMT: OK
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK (Not Supported)
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/video5:
> > >>>
> > >>> Driver Info:
> > >>> Driver name : neoisp
> > >>> Card type : neoisp
> > >>> Bus info : platform:4ae00000.isp
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x8ca03000
> > >>> Video Capture Multiplanar
> > >>> Video Output Multiplanar
> > >>> Metadata Capture
> > >>> Metadata Output
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Device Capabilities
> > >>> Device Caps : 0x04a00000
> > >>> Metadata Capture
> > >>> Streaming
> > >>> Extended Pix Format
> > >>> Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x03000028
> > >>> Type : V4L Video
> > >>> Entity Info:
> > >>> ID : 0x00000026 (38)
> > >>> Name : neoisp-stats
> > >>> Function : V4L2 I/O
> > >>> Pad 0x01000027 : 0: Sink
> > >>> Link 0x0200002a: from remote pad 0x1000007 of entity
> > >>> 'neoisp' (Image Signal Processor): Data, Enabled
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/video5 open: OK
> > >>> test VIDIOC_QUERYCAP: OK
> > >>> test VIDIOC_G/S_PRIORITY: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > >>> test VIDIOC_QUERYCTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S_CTRL: OK (Not Supported)
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 0 Private Controls: 0
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK
> > >>> test VIDIOC_TRY_FMT: OK
> > >>> test VIDIOC_S_FMT: OK
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK (Not Supported)
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK (Not Supported)
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
> > >>> Warnings: 0
> > >>> --------------------------------------------------------------------------------
> > >>> Compliance test for neoisp device /dev/v4l-subdev0:
> > >>>
> > >>> Driver Info:
> > >>> Driver version : 6.19.0
> > >>> Capabilities : 0x00000000
> > >>> Client Capabilities: 0x0000000000000002
> > >>> interval-uses-which Media Driver Info:
> > >>> Driver name : neoisp
> > >>> Model : neoisp
> > >>> Serial :
> > >>> Bus info : platform:4ae00000.isp
> > >>> Media version : 6.19.0
> > >>> Hardware revision: 0x00000002 (2)
> > >>> Driver version : 6.19.0
> > >>> Interface Info:
> > >>> ID : 0x0300002c
> > >>> Type : V4L Sub-Device
> > >>> Entity Info:
> > >>> ID : 0x00000001 (1)
> > >>> Name : neoisp
> > >>> Function : Image Signal Processor
> > >>> Pad 0x01000002 : 0: Sink
> > >>> Link 0x0200000c: from remote pad 0x1000009 of entity
> > >>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> > >>> Pad 0x01000003 : 1: Sink
> > >>> Link 0x02000012: from remote pad 0x100000f of entity
> > >>> 'neoisp-input1' (V4L2 I/O): Data
> > >>> Pad 0x01000004 : 2: Sink
> > >>> Link 0x02000018: from remote pad 0x1000015 of entity
> > >>> 'neoisp-params' (V4L2 I/O): Data, Enabled
> > >>> Pad 0x01000005 : 3: Source
> > >>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
> > >>> frame' (V4L2 I/O): Data, Enabled
> > >>> Pad 0x01000006 : 4: Source
> > >>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
> > >>> ir' (V4L2 I/O): Data
> > >>> Pad 0x01000007 : 5: Source
> > >>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
> > >>> stats' (V4L2 I/O): Data, Enabled
> > >>>
> > >>> Required ioctls:
> > >>> test MC information (see 'Media Driver Info' above): OK
> > >>> test VIDIOC_SUDBEV_QUERYCAP: OK
> > >>> test invalid ioctls: OK
> > >>>
> > >>> Allow for multiple opens:
> > >>> test second /dev/v4l-subdev0 open: OK
> > >>> test VIDIOC_SUBDEV_QUERYCAP: OK
> > >>> test for unlimited opens: OK
> > >>>
> > >>> Debug ioctls:
> > >>> test VIDIOC_LOG_STATUS: OK (Not Supported)
> > >>>
> > >>> Input ioctls:
> > >>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > >>> Inputs: 0 Audio Inputs: 0 Tuners: 0
> > >>>
> > >>> Output ioctls:
> > >>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > >>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > >>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > >>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > >>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > >>> Outputs: 0 Audio Outputs: 0 Modulators: 0
> > >>>
> > >>> Input/Output configuration ioctls:
> > >>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > >>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > >>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > >>> test VIDIOC_G/S_EDID: OK (Not Supported)
> > >>>
> > >>> Sub-Device ioctls (Sink Pad 0):
> > >>> Try Stream 0
> > >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> Active Stream 0
> > >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > >>>
> > >>> Sub-Device ioctls (Sink Pad 1):
> > >>> Try Stream 0
> > >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> Active Stream 0
> > >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > >>>
> > >>> Sub-Device ioctls (Sink Pad 2):
> > >>> Try Stream 0
> > >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> Active Stream 0
> > >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > >>>
> > >>> Sub-Device ioctls (Source Pad 3):
> > >>> Try Stream 0
> > >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> Active Stream 0
> > >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > >>>
> > >>> Sub-Device ioctls (Source Pad 4):
> > >>> Try Stream 0
> > >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> Active Stream 0
> > >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > >>>
> > >>> Sub-Device ioctls (Source Pad 5):
> > >>> Try Stream 0
> > >>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> Active Stream 0
> > >>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > >>> FRAME_INTERVAL: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > >>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > >>>
> > >>> Control ioctls:
> > >>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> > >>> test VIDIOC_QUERYCTRL: OK
> > >>> test VIDIOC_G/S_CTRL: OK
> > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> > >>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> > >>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > >>> Standard Controls: 1 Private Controls: 1
> > >>>
> > >>> Format ioctls:
> > >>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
> > >>> Supported)
> > >>> test VIDIOC_G/S_PARM: OK (Not Supported)
> > >>> test VIDIOC_G_FBUF: OK (Not Supported)
> > >>> test VIDIOC_G_FMT: OK (Not Supported)
> > >>> test VIDIOC_TRY_FMT: OK (Not Supported)
> > >>> test VIDIOC_S_FMT: OK (Not Supported)
> > >>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > >>> test Cropping: OK (Not Supported)
> > >>> test Composing: OK (Not Supported)
> > >>> test Scaling: OK (Not Supported)
> > >>>
> > >>> Codec ioctls:
> > >>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > >>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > >>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > >>>
> > >>> Buffer ioctls:
> > >>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> > >>> test CREATE_BUFS maximum buffers: OK
> > >>> test VIDIOC_REMOVE_BUFS: OK
> > >>> test VIDIOC_EXPBUF: OK (Not Supported)
> > >>> test Requests: OK (Not Supported)
> > >>>
> > >>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
> > >>> 0, Warnings: 0
> > >>>
> > >>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
> > >>> Failed: 0, Warnings: 0
> > >>>
> > >>> ---
> > >>> Antoine Bouyer (11):
> > >>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> > >>> media: v4l2-isp: Add helper function to compute extended stats size
> > >>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
> > >>> media: Documentation: Add NXP neoisp driver documentation
> > >>> dt-bindings: media: Add nxp neoisp support
> > >>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
> > >>> media: Add meta formats supported by NXP neoisp driver
> > >>> media: uapi: Add NXP NEOISP user interface header file
> > >>> media: platform: Add NXP Neoisp Image Signal Processor
> > >>> media: platform: neoisp: Add debugfs support
> > >>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
> > >>>
> > >>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> > >>> .../admin-guide/media/nxp-neoisp.dot | 16 +
> > >>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
> > >>> .../admin-guide/media/v4l-drivers.rst | 1 +
> > >>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> > >>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
> > >>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> > >>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> > >>> MAINTAINERS | 9 +
> > >>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> > >>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> > >>> drivers/media/platform/nxp/Kconfig | 1 +
> > >>> drivers/media/platform/nxp/Makefile | 1 +
> > >>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> > >>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
> > >>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> > >>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> > >>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> > >>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> > >>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> > >>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> > >>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> > >>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> > >>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> > >>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> > >>> include/media/v4l2-isp.h | 13 +
> > >>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> > >>> include/uapi/linux/media/v4l2-isp.h | 85 +
> > >>> include/uapi/linux/v4l2-controls.h | 6 +
> > >>> include/uapi/linux/videodev2.h | 6 +
> > >>> 30 files changed, 11880 insertions(+), 3 deletions(-)
> > >>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
> > >>> diagram.dot
> > >>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> > >>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> > >>> create mode 100644 Documentation/devicetree/bindings/media/
> > >>> nxp,neoisp.yaml
> > >>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
> > >>> nxp-neoisp.rst
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> > >>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> > >>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
> > >>>
> > >>
> > >
> >
> >
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-04 17:12 ` Jacopo Mondi
@ 2026-02-04 18:30 ` Antoine Bouyer
2026-02-05 9:40 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-02-04 18:30 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
Hi Jacopo
Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
>
> Hello,
>
> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
>> Hello
>>
>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
>>> Hi Antoine,
>>>
>>> Thanks for your response.
>>>
>>> On 1/28/26 09:17, Antoine Bouyer wrote:
>>>> Hi Michael
>>>>
>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>>>>
>>>>>
>>>>> Hi Antoine,
>>>>>
>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> This RFC patch series introduces the NXP Neo Image Signal Processor
>>>>>> (ISP)
>>>>>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
>>>>>> family.
>>>>>> The series also includes updates to the generic v4l2-isp interface to
>>>>>> support extended statistics required by the Neo ISP.
>>>>>>
>>>>>> The Neo ISP processes one or more camera streams, converting RAW formats
>>>>>> into YUV or RGB outputs. Its architecture is largely influenced by the
>>>>>> PISP driver. The hardware supports up to eight contexts, with three sink
>>>>>> pads (main input, HDR input, and parameter buffers) and three source
>>>>>> pads
>>>>>> (RGB output, IR output, and statistics metadata).
>>>>>>
>>>>>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
>>>>>> parameter/statistics buffers are supported through the generic v4l2-isp
>>>>>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
>>>>>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
>>>>>
>>>>> How do you envisage the direct CSI-to-ISP streaming shall be supported?
>>>>
>>>> At this stage, this streaming mode still needs to be evaluated on
>>>> neoisp. We should follow the integration model used by existing ISP
>>>> drivers to avoid duplicating solutions.
>>>
>>> Fair point, but I have had the impression that there are not many
>>> examples (if any). The rkisp1 driver, for instance, only supports inline
>>> mode although the HW should be able to do both.
>>>
>>> But any pointers most welcome, I won't claim I have the full overview.
>>>
>>>>
>>>> Below are my initial thoughts on the specific points you raised:
>>>>
>>>>> - How shall the final media graph(s) look like?
>>>>
>>>> The media entities would remain mostly identical, except for the absence
>>>> of ISI. The topology would be a direct linkg from sensor->csi-
>>>>> formatter->neoisp.
>>
>> If support for inline mode has to be added later, the ISP will need to
>> be registered in the same media graph of the CSI-2 receiver to be able
>> to link the two, right ?
yes correct.
>>
>> How do you envision to control the ISP operating mode, because I'm
>> afraid if you register the ISP in its own media graph, you're locking
>> yourself there as implementing inline mode would require a different
>> media topology with all the implications on the rest of the userspace
>> stack.
>>
>> This might not be a problem if you know that the inline vs m2m mode is
>> SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
>> other as m2m. In this case you'll likely need two pipeline handlers
>> in libcamera, but if that's per SoC-line maybe is acceptable. The fact
>> you suggests in inline mode there won't be an ISI makes me think this
>> actually depends on the SoC design ?
Actually, this is not really at SoC synthesis time, neoisp HW does
support both modes, that is configurable. But ISP HW can run in a single
mode only once it is configured. Streaming mode is tightly coupled with
CSI HW, then ISP cannot be used in M2M mode with another sensor
simultaneously.
>
> One small correction after some more research:
>
> we actually already have a pipeline in libcamera that supports inline
> and (will soon) support m2m: the mali c55 one. My take on "probably
> need two pipeline handlers" was not correct then.
Yes, I saw your patchwork on libcamera about this coming upgrade. Spent
some time analyzing it ':) Seems we are quite aligned as per my
understanding: inline mode (i.e. streaming mode with neoisp) _or_ M2M
mode using IVC video device from Mali. Is that right ?
>
> As said, Mali-C55 can be integrated inline or in m2m mode and this is
> decided based on the device tree endpoint connections.
Good. Do you have an example available ?
>
> So, if you know neoisp will be integrated either inline or m2m in
> different SoC lines, maybe deferring it to device tree is good enough
> at the expense of a slightly more complicated pipeline ?
As said, SoC/ISP HW does support both modes. But I think that the
selection can be done in device tree too. So that after bootup, a camera
will be used only in 1 mode.
>
> I guess this has implications on the bindings definition as well..
Most probably yes. Can this be done as second phase once evaluation is
completed ?
>
>>
>> However, if you plan to allow deferring inline/m2m mode selection to
>> the system integrators or even have it as a run-time parameter, then
>> you should really consider having the ISP in the same media graph as
>> the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
>> media graph, where you could select the operating mode through media link
>> enablement or dts endpoint connections
>>
>> Niklas (in cc) has addressed a similar situation, where inline and m2m
>> mode can be selected by link enablement at runtime here
>> https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
>> (see risp_cs_internal_ops)
>>
>>>
>>> OK, I thought that ISI was still around...
>>>
>>>>
>>>>> - How many media devices are registered and which driver registers it
>>>>> or them?
>>>>
>>>> That will be part of the evaluation. My initial assumption is that
>>>> neoisp would be the appropriate component to register the media device
>>>> in this mode, since ISI is not involved, and ISI currently performs the
>>>> registration in the M2M configuration.
>>
>> Isn't the ISP registering its own media graph ?
Yes, 8 copies of ISP media graph, that can be used with the 8 output
video devices of the ISI media graph.
>>
>> Can we get a copy of all media graphs on an i.MX95 system including
>> the ISI and the CSI-2 receiver ?
Here is an example with multiple sensors. Or do you need it in another
format ?
digraph board {
rankdir=TB
n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3>
3 | <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 |
<port7> 7 | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12>
12}}", shape=Mrecord, style=filled, fillcolor=green]
n00000001:port5 -> n0000000f:port0 [style=bold]
n00000001:port6 -> n0000001a:port0 [style=bold]
n00000001:port7 -> n00000025:port0 [style=bold]
n00000001:port8 -> n00000030:port0 [style=bold]
n00000001:port9 -> n0000003b:port0 [style=bold]
n00000001:port10 -> n00000046:port0 [style=bold]
n00000001:port11 -> n00000051:port0 [style=bold]
n00000001:port12 -> n0000005c:port0 [style=bold]
n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000000f:port1 -> n00000012 [style=bold]
n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
style=filled, fillcolor=yellow]
n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000001a:port1 -> n0000001d [style=bold]
n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
style=filled, fillcolor=yellow]
n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000025:port1 -> n00000028 [style=bold]
n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
style=filled, fillcolor=yellow]
n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000030:port1 -> n00000033 [style=bold]
n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
style=filled, fillcolor=yellow]
n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000003b:port1 -> n0000003e [style=bold]
n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
style=filled, fillcolor=yellow]
n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000046:port1 -> n00000049 [style=bold]
n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
style=filled, fillcolor=yellow]
n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n00000051:port1 -> n00000054 [style=bold]
n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
style=filled, fillcolor=yellow]
n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
{<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
n0000005c:port1 -> n0000005f [style=bold]
n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
style=filled, fillcolor=yellow]
n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
fillcolor=yellow]
n00000067 -> n00000001:port4 [style=bold]
n0000006e [label="{{<port0> 0} |
4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
shape=Mrecord, style=filled, fillcolor=green]
n0000006e:port1 -> n00000001:port2 [style=bold]
n00000073 [label="{{<port0> 0} |
csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
style=filled, fillcolor=green]
n00000073:port1 -> n0000006e:port0 [style=bold]
n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3>
3} | max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
shape=Mrecord, style=filled, fillcolor=green]
n00000078:port4 -> n00000073:port0 [style=dashed]
n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
{<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n00000081:port0 -> n00000078:port0 [style=bold]
n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
{<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n00000085:port0 -> n00000078:port1 [style=bold]
n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
{<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n00000089:port0 -> n00000078:port2 [style=bold]
n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
{<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
n0000008d:port0 -> n00000078:port3 [style=bold]
}
>>
>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
>> that's exactly what we're working on with the context framework :)
>>
Ok. Then I should have a look to context framework too ...
>>
>>>
>>> ... since it is not, your assumption seems very reasonable.
>>>
>>>>
>>>>> - How can the user decide whether direct (csi2isp) or indirect
>>>>> (mem2mem) streaming shall be used?
>>>>
>>>> That will also be part of the evaluation. From dts would be my first
>>>> option, but may prevent using both modes on same platform then.
>>>
>>> Of course this depends what the hardware is able to do, but in case the
>>> HW is reconfigurable easily, I doubt that device tree is a good choice
>>> to solve that.
>>>>
>>>>>
>>>>> While it is certainly OK to introduce this support only at a later
>>>>> stage, it makes sense to consider this right from the start to avoid
>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
>>>>>
>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>>>>> thoughts about that.
>>>>
>>>> Is there an existing discussion thread available on this topic? I would
>>>> be very interested in following it.
>>>
>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
>>
>> It's probably time to have one :)
Good. Please loop me in ;)
BR
Antoine
>>
>>>
>>> Thanks and regards,
>>> Michael
>>>
>>>>
>>>> Thanks
>>>> Antoine
>>>>
>>>>>
>>>>> Thanks in advance and best regards,
>>>>> Michael
>>>>>
>>>>>>
>>>>>> This series is posted as RFC because extending the v4l2-isp interface
>>>>>> may
>>>>>> overlap with ongoing work. If similar development already exists, I am
>>>>>> happy to rebase or adapt the series accordingly. If preferred, the
>>>>>> series
>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>>>>> driver introduction.
>>>>>>
>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>>>>> consistent with the existing style in that file.
>>>>>>
>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
>>>>>> yet upstreamed.
>>>>>>
>>>>>> Thanks,
>>>>>> Antoine
>>>>>>
>>>>>> ---
>>>>>> Here are v4l2-compliance test results:
>>>>>>
>>>>>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
>>>>>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>>>>>>
>>>>>> Compliance test for neoisp device /dev/media0:
>>>>>>
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/media0 open: OK
>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Media Controller ioctls:
>>>>>> test MEDIA_IOC_G_TOPOLOGY: OK
>>>>>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
>>>>>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>>>>>> test MEDIA_IOC_SETUP_LINK: OK
>>>>>>
>>>>>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/video0:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Card type : neoisp
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x8ca03000
>>>>>> Video Capture Multiplanar
>>>>>> Video Output Multiplanar
>>>>>> Metadata Capture
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Device Capabilities
>>>>>> Device Caps : 0x04202000
>>>>>> Video Output Multiplanar
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x0300000a
>>>>>> Type : V4L Video
>>>>>> Entity Info:
>>>>>> ID : 0x00000008 (8)
>>>>>> Name : neoisp-input0
>>>>>> Function : V4L2 I/O
>>>>>> Pad 0x01000009 : 0: Source
>>>>>> Link 0x0200000c: to remote pad 0x1000002 of entity
>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/video0 open: OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK
>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>> test VIDIOC_S_FMT: OK
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/video1:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Card type : neoisp
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x8ca03000
>>>>>> Video Capture Multiplanar
>>>>>> Video Output Multiplanar
>>>>>> Metadata Capture
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Device Capabilities
>>>>>> Device Caps : 0x04202000
>>>>>> Video Output Multiplanar
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x03000010
>>>>>> Type : V4L Video
>>>>>> Entity Info:
>>>>>> ID : 0x0000000e (14)
>>>>>> Name : neoisp-input1
>>>>>> Function : V4L2 I/O
>>>>>> Pad 0x0100000f : 0: Source
>>>>>> Link 0x02000012: to remote pad 0x1000003 of entity
>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/video1 open: OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK
>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>> test VIDIOC_S_FMT: OK
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/video2:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Card type : neoisp
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x8ca03000
>>>>>> Video Capture Multiplanar
>>>>>> Video Output Multiplanar
>>>>>> Metadata Capture
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Device Capabilities
>>>>>> Device Caps : 0x0c200000
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x03000016
>>>>>> Type : V4L Video
>>>>>> Entity Info:
>>>>>> ID : 0x00000014 (20)
>>>>>> Name : neoisp-params
>>>>>> Function : V4L2 I/O
>>>>>> Pad 0x01000015 : 0: Source
>>>>>> Link 0x02000018: to remote pad 0x1000004 of entity
>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/video2 open: OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK
>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>> test VIDIOC_S_FMT: OK
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK (Not Supported)
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK (Not Supported)
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/video3:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Card type : neoisp
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x8ca03000
>>>>>> Video Capture Multiplanar
>>>>>> Video Output Multiplanar
>>>>>> Metadata Capture
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Device Capabilities
>>>>>> Device Caps : 0x04201000
>>>>>> Video Capture Multiplanar
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x0300001c
>>>>>> Type : V4L Video
>>>>>> Entity Info:
>>>>>> ID : 0x0000001a (26)
>>>>>> Name : neoisp-frame
>>>>>> Function : V4L2 I/O
>>>>>> Pad 0x0100001b : 0: Sink
>>>>>> Link 0x0200001e: from remote pad 0x1000005 of entity
>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/video3 open: OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK
>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>> test VIDIOC_S_FMT: OK
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK (Not Supported)
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/video4:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Card type : neoisp
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x8ca03000
>>>>>> Video Capture Multiplanar
>>>>>> Video Output Multiplanar
>>>>>> Metadata Capture
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Device Capabilities
>>>>>> Device Caps : 0x04201000
>>>>>> Video Capture Multiplanar
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x03000022
>>>>>> Type : V4L Video
>>>>>> Entity Info:
>>>>>> ID : 0x00000020 (32)
>>>>>> Name : neoisp-ir
>>>>>> Function : V4L2 I/O
>>>>>> Pad 0x01000021 : 0: Sink
>>>>>> Link 0x02000024: from remote pad 0x1000006 of entity
>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/video4 open: OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK
>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>> test VIDIOC_S_FMT: OK
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK (Not Supported)
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/video5:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Card type : neoisp
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x8ca03000
>>>>>> Video Capture Multiplanar
>>>>>> Video Output Multiplanar
>>>>>> Metadata Capture
>>>>>> Metadata Output
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Device Capabilities
>>>>>> Device Caps : 0x04a00000
>>>>>> Metadata Capture
>>>>>> Streaming
>>>>>> Extended Pix Format
>>>>>> Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x03000028
>>>>>> Type : V4L Video
>>>>>> Entity Info:
>>>>>> ID : 0x00000026 (38)
>>>>>> Name : neoisp-stats
>>>>>> Function : V4L2 I/O
>>>>>> Pad 0x01000027 : 0: Sink
>>>>>> Link 0x0200002a: from remote pad 0x1000007 of entity
>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/video5 open: OK
>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK
>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>> test VIDIOC_S_FMT: OK
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK (Not Supported)
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK (Not Supported)
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
>>>>>> Warnings: 0
>>>>>> --------------------------------------------------------------------------------
>>>>>> Compliance test for neoisp device /dev/v4l-subdev0:
>>>>>>
>>>>>> Driver Info:
>>>>>> Driver version : 6.19.0
>>>>>> Capabilities : 0x00000000
>>>>>> Client Capabilities: 0x0000000000000002
>>>>>> interval-uses-which Media Driver Info:
>>>>>> Driver name : neoisp
>>>>>> Model : neoisp
>>>>>> Serial :
>>>>>> Bus info : platform:4ae00000.isp
>>>>>> Media version : 6.19.0
>>>>>> Hardware revision: 0x00000002 (2)
>>>>>> Driver version : 6.19.0
>>>>>> Interface Info:
>>>>>> ID : 0x0300002c
>>>>>> Type : V4L Sub-Device
>>>>>> Entity Info:
>>>>>> ID : 0x00000001 (1)
>>>>>> Name : neoisp
>>>>>> Function : Image Signal Processor
>>>>>> Pad 0x01000002 : 0: Sink
>>>>>> Link 0x0200000c: from remote pad 0x1000009 of entity
>>>>>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
>>>>>> Pad 0x01000003 : 1: Sink
>>>>>> Link 0x02000012: from remote pad 0x100000f of entity
>>>>>> 'neoisp-input1' (V4L2 I/O): Data
>>>>>> Pad 0x01000004 : 2: Sink
>>>>>> Link 0x02000018: from remote pad 0x1000015 of entity
>>>>>> 'neoisp-params' (V4L2 I/O): Data, Enabled
>>>>>> Pad 0x01000005 : 3: Source
>>>>>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
>>>>>> frame' (V4L2 I/O): Data, Enabled
>>>>>> Pad 0x01000006 : 4: Source
>>>>>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
>>>>>> ir' (V4L2 I/O): Data
>>>>>> Pad 0x01000007 : 5: Source
>>>>>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
>>>>>> stats' (V4L2 I/O): Data, Enabled
>>>>>>
>>>>>> Required ioctls:
>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>> test VIDIOC_SUDBEV_QUERYCAP: OK
>>>>>> test invalid ioctls: OK
>>>>>>
>>>>>> Allow for multiple opens:
>>>>>> test second /dev/v4l-subdev0 open: OK
>>>>>> test VIDIOC_SUBDEV_QUERYCAP: OK
>>>>>> test for unlimited opens: OK
>>>>>>
>>>>>> Debug ioctls:
>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>
>>>>>> Input ioctls:
>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>
>>>>>> Output ioctls:
>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>
>>>>>> Input/Output configuration ioctls:
>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>
>>>>>> Sub-Device ioctls (Sink Pad 0):
>>>>>> Try Stream 0
>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> Active Stream 0
>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>
>>>>>> Sub-Device ioctls (Sink Pad 1):
>>>>>> Try Stream 0
>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> Active Stream 0
>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>
>>>>>> Sub-Device ioctls (Sink Pad 2):
>>>>>> Try Stream 0
>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> Active Stream 0
>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>
>>>>>> Sub-Device ioctls (Source Pad 3):
>>>>>> Try Stream 0
>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> Active Stream 0
>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>
>>>>>> Sub-Device ioctls (Source Pad 4):
>>>>>> Try Stream 0
>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> Active Stream 0
>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>
>>>>>> Sub-Device ioctls (Source Pad 5):
>>>>>> Try Stream 0
>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> Active Stream 0
>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>
>>>>>> Control ioctls:
>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>>>>> test VIDIOC_QUERYCTRL: OK
>>>>>> test VIDIOC_G/S_CTRL: OK
>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>> Standard Controls: 1 Private Controls: 1
>>>>>>
>>>>>> Format ioctls:
>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
>>>>>> Supported)
>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>> test VIDIOC_G_FMT: OK (Not Supported)
>>>>>> test VIDIOC_TRY_FMT: OK (Not Supported)
>>>>>> test VIDIOC_S_FMT: OK (Not Supported)
>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>> test Cropping: OK (Not Supported)
>>>>>> test Composing: OK (Not Supported)
>>>>>> test Scaling: OK (Not Supported)
>>>>>>
>>>>>> Codec ioctls:
>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>
>>>>>> Buffer ioctls:
>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>> test VIDIOC_EXPBUF: OK (Not Supported)
>>>>>> test Requests: OK (Not Supported)
>>>>>>
>>>>>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
>>>>>> 0, Warnings: 0
>>>>>>
>>>>>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
>>>>>> Failed: 0, Warnings: 0
>>>>>>
>>>>>> ---
>>>>>> Antoine Bouyer (11):
>>>>>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
>>>>>> media: v4l2-isp: Add helper function to compute extended stats size
>>>>>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
>>>>>> media: Documentation: Add NXP neoisp driver documentation
>>>>>> dt-bindings: media: Add nxp neoisp support
>>>>>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
>>>>>> media: Add meta formats supported by NXP neoisp driver
>>>>>> media: uapi: Add NXP NEOISP user interface header file
>>>>>> media: platform: Add NXP Neoisp Image Signal Processor
>>>>>> media: platform: neoisp: Add debugfs support
>>>>>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>>>>>>
>>>>>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
>>>>>> .../admin-guide/media/nxp-neoisp.dot | 16 +
>>>>>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
>>>>>> .../admin-guide/media/v4l-drivers.rst | 1 +
>>>>>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
>>>>>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
>>>>>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
>>>>>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
>>>>>> MAINTAINERS | 9 +
>>>>>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
>>>>>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
>>>>>> drivers/media/platform/nxp/Kconfig | 1 +
>>>>>> drivers/media/platform/nxp/Makefile | 1 +
>>>>>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
>>>>>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
>>>>>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
>>>>>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
>>>>>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
>>>>>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
>>>>>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
>>>>>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
>>>>>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
>>>>>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
>>>>>> include/media/v4l2-isp.h | 13 +
>>>>>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
>>>>>> include/uapi/linux/media/v4l2-isp.h | 85 +
>>>>>> include/uapi/linux/v4l2-controls.h | 6 +
>>>>>> include/uapi/linux/videodev2.h | 6 +
>>>>>> 30 files changed, 11880 insertions(+), 3 deletions(-)
>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
>>>>>> diagram.dot
>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
>>>>>> create mode 100644 Documentation/devicetree/bindings/media/
>>>>>> nxp,neoisp.yaml
>>>>>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
>>>>>> nxp-neoisp.rst
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
>>>>>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-04 18:30 ` Antoine Bouyer
@ 2026-02-05 9:40 ` Jacopo Mondi
2026-02-09 13:19 ` Anthony McGivern
` (3 more replies)
0 siblings, 4 replies; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-05 9:40 UTC (permalink / raw)
To: Antoine Bouyer
Cc: Jacopo Mondi, Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
Hi Antoine
On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> Hi Jacopo
>
> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> >
> > Hello,
> >
> > On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> > > Hello
> > >
> > > On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> > > > Hi Antoine,
> > > >
> > > > Thanks for your response.
> > > >
> > > > On 1/28/26 09:17, Antoine Bouyer wrote:
> > > > > Hi Michael
> > > > >
> > > > > On 1/26/26 10:44 AM, Michael Riesch wrote:
> > > > > >
> > > > > >
> > > > > > Hi Antoine,
> > > > > >
> > > > > > On 1/23/26 09:09, Antoine Bouyer wrote:
> > > > > > > Hi all,
> > > > > > >
> > > > > > > This RFC patch series introduces the NXP Neo Image Signal Processor
> > > > > > > (ISP)
> > > > > > > driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
> > > > > > > family.
> > > > > > > The series also includes updates to the generic v4l2-isp interface to
> > > > > > > support extended statistics required by the Neo ISP.
> > > > > > >
> > > > > > > The Neo ISP processes one or more camera streams, converting RAW formats
> > > > > > > into YUV or RGB outputs. Its architecture is largely influenced by the
> > > > > > > PISP driver. The hardware supports up to eight contexts, with three sink
> > > > > > > pads (main input, HDR input, and parameter buffers) and three source
> > > > > > > pads
> > > > > > > (RGB output, IR output, and statistics metadata).
> > > > > > >
> > > > > > > At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> > > > > > > parameter/statistics buffers are supported through the generic v4l2-isp
> > > > > > > framework, similar to rkisp1 and Mali-C55. The driver currently supports
> > > > > > > M2M operation; direct CSI-to-ISP streaming is not yet implemented.
> > > > > >
> > > > > > How do you envisage the direct CSI-to-ISP streaming shall be supported?
> > > > >
> > > > > At this stage, this streaming mode still needs to be evaluated on
> > > > > neoisp. We should follow the integration model used by existing ISP
> > > > > drivers to avoid duplicating solutions.
> > > >
> > > > Fair point, but I have had the impression that there are not many
> > > > examples (if any). The rkisp1 driver, for instance, only supports inline
> > > > mode although the HW should be able to do both.
> > > >
> > > > But any pointers most welcome, I won't claim I have the full overview.
> > > >
> > > > >
> > > > > Below are my initial thoughts on the specific points you raised:
> > > > >
> > > > > > - How shall the final media graph(s) look like?
> > > > >
> > > > > The media entities would remain mostly identical, except for the absence
> > > > > of ISI. The topology would be a direct linkg from sensor->csi-
> > > > > > formatter->neoisp.
> > >
> > > If support for inline mode has to be added later, the ISP will need to
> > > be registered in the same media graph of the CSI-2 receiver to be able
> > > to link the two, right ?
>
> yes correct.
>
> > >
> > > How do you envision to control the ISP operating mode, because I'm
> > > afraid if you register the ISP in its own media graph, you're locking
> > > yourself there as implementing inline mode would require a different
> > > media topology with all the implications on the rest of the userspace
> > > stack.
> > >
> > > This might not be a problem if you know that the inline vs m2m mode is
> > > SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
> > > other as m2m. In this case you'll likely need two pipeline handlers
> > > in libcamera, but if that's per SoC-line maybe is acceptable. The fact
> > > you suggests in inline mode there won't be an ISI makes me think this
> > > actually depends on the SoC design ?
>
> Actually, this is not really at SoC synthesis time, neoisp HW does support
> both modes, that is configurable. But ISP HW can run in a single mode only
> once it is configured. Streaming mode is tightly coupled with CSI HW, then
> ISP cannot be used in M2M mode with another sensor simultaneously.
>
Yes, my point is trying to understand "how it is configured" and what
your expectations are.
Will the board .dts (or a camera .dtso) decide how the ISP is operated
by defining its endpoint connections ? Assuming with the same SoC both
inline and m2m modes are possible, without differences in the SoC
design/integration, will users of the same board have to modify the
.dts or load ad-hoc .dtso to decide what mode is in use ?
Then, the question of how the media topology will look and which
components registers what has to be clarified.
Let's try to make a taxonomy of the cases we have in mainline (or on
their way to mainline).
In the mali example I mentioned, the operating mode is selected by the
.dtsi as Mali can be integrated either inline or in m2m mode in
different SoCs. RZ/V2H in example, will always be m2m as it doesn't
interface the CSI-2 receiver with the ISP but rather interfaces the
ISP with a companion chip the performs memory access on its behalf
(the IVC). A different design that incorporates Mali inline will
instead have to interface the CSI-2 receiver with the ISP with
internal busses/glue logic and will then have to described this in dts.
This is fine as the ISP integration is different and then having the
description in dts is legit.
The ISP driver unconditionally registers an async notifier and the
downstream component (csi-2 or IVC) will register its async subdev(s)
which will all appear in the ISP media graph. This is possible because
the assumption is that the CSI-2 receiver (or the companion chip)
won't register their own media graph.
The Renesas V4H example I mentioned is instead different. The ISP can
be operated in inline and m2m, on the same SoC without any
modification to hardware and to the dts/dtsi. It's basically a user
choice we defer to runtime.
The V4H already has a component that registers a media graph: the
CSI-2/VIN block which is found in many SoCs of the same (and older)
generations. The ISP is present only in some SoC, but the CSI-2/VIN is
always there. In this case, to support both inline and m2m modes, the
VIN registers the media device and, with the trick I pointed you to in
Niklas' code, the ISP registers a subdev in the VIN media graph. Then
the inline/m2m mode can be selected by media link enablement at
run-time. Now, inline mode is not yet supported on V4H and there might
be dragons there, but at least, both modes should be possible on the same
SoC.
On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
RPi knows the only SoC where the PiPS will be found is their one. The
ISP cannot function inline and will always be m2m. In this case, a
dedicated media graph for the ISP is the simplest and cleanest
solution.
RkISP1 instead will always be inline only. It registers a media device
and an async notifier, the connected CSI-2 receiver will register an
async subdev and will be connected to the device tree endpoint of the
ISP device node.
What model is the closest one to the neoisp integration that you
envision on NXP SoCs ?
> >
> > One small correction after some more research:
> >
> > we actually already have a pipeline in libcamera that supports inline
> > and (will soon) support m2m: the mali c55 one. My take on "probably
> > need two pipeline handlers" was not correct then.
>
> Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
> time analyzing it ':) Seems we are quite aligned as per my understanding:
> inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
> device from Mali. Is that right ?
>
> >
> > As said, Mali-C55 can be integrated inline or in m2m mode and this is
> > decided based on the device tree endpoint connections.
>
> Good. Do you have an example available ?
It's in mainline, but there's nothing exciting there as the assumption
is that there will always be a connection on the first endpoint and
the driver simply registers a notifier for the connected async subdev. If
it's a CSI-2 receiver then we're inline. If it's a companion chip
we're m2m.
The libcamera pipeline (not upstream yet) inspects the media entity
function of the entity connected to the ISP sink pad#0. If it's a
CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
operated the pipeline differently.
>
> >
> > So, if you know neoisp will be integrated either inline or m2m in
> > different SoC lines, maybe deferring it to device tree is good enough
> > at the expense of a slightly more complicated pipeline ?
>
> As said, SoC/ISP HW does support both modes. But I think that the selection
> can be done in device tree too. So that after bootup, a camera will be used
> only in 1 mode.
>
> >
> > I guess this has implications on the bindings definition as well..
>
> Most probably yes. Can this be done as second phase once evaluation is
> completed ?
>
I think you should asses from the very beginning what is the planned
integration model of the ISP in order not to corner yourself in a
place where it will be hard to support inline without re-writing
the driver's media device registration logic.
Looking at the below media graph of CSI/ISI you should ask the question "how
will I register the ISP subdev in the CSI-2 media graph when inline"
and "how will I describe inline vs m2m mode if the underlying hardware
design doesn't change?" as deferring it to the .dts might not be the
most correct way to go in that case ?
> >
> > >
> > > However, if you plan to allow deferring inline/m2m mode selection to
> > > the system integrators or even have it as a run-time parameter, then
> > > you should really consider having the ISP in the same media graph as
> > > the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
> > > media graph, where you could select the operating mode through media link
> > > enablement or dts endpoint connections
> > >
> > > Niklas (in cc) has addressed a similar situation, where inline and m2m
> > > mode can be selected by link enablement at runtime here
> > > https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
> > > (see risp_cs_internal_ops)
> > >
> > > >
> > > > OK, I thought that ISI was still around...
> > > >
> > > > >
> > > > > > - How many media devices are registered and which driver registers it
> > > > > > or them?
> > > > >
> > > > > That will be part of the evaluation. My initial assumption is that
> > > > > neoisp would be the appropriate component to register the media device
> > > > > in this mode, since ISI is not involved, and ISI currently performs the
> > > > > registration in the M2M configuration.
> > >
> > > Isn't the ISP registering its own media graph ?
>
> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> devices of the ISI media graph.
>
I suggest you do what RPi does. The mainline driver only registers one
instance and they carry a little patch downstream that implements the
for() loop where multiple instances are registered. Duplicating media graphs
is not desirable (at least in mainline) as we can have ISPs with 256
contexts, we don't want 256 media graphs.
A framework level solution with proper priority handling and job
scheduling is what is required and that's what the context work should
end up being.
> > >
> > > Can we get a copy of all media graphs on an i.MX95 system including
> > > the ISI and the CSI-2 receiver ?
>
> Here is an example with multiple sensors. Or do you need it in another
> format ?
No it's fine, thanks!
>
>
> digraph board {
> rankdir=TB
> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
> <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
> | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
> shape=Mrecord, style=filled, fillcolor=green]
> n00000001:port5 -> n0000000f:port0 [style=bold]
> n00000001:port6 -> n0000001a:port0 [style=bold]
> n00000001:port7 -> n00000025:port0 [style=bold]
> n00000001:port8 -> n00000030:port0 [style=bold]
> n00000001:port9 -> n0000003b:port0 [style=bold]
> n00000001:port10 -> n00000046:port0 [style=bold]
> n00000001:port11 -> n00000051:port0 [style=bold]
> n00000001:port12 -> n0000005c:port0 [style=bold]
> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n0000000f:port1 -> n00000012 [style=bold]
> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
> style=filled, fillcolor=yellow]
> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n0000001a:port1 -> n0000001d [style=bold]
> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
> style=filled, fillcolor=yellow]
> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000025:port1 -> n00000028 [style=bold]
> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
> style=filled, fillcolor=yellow]
> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000030:port1 -> n00000033 [style=bold]
> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
> style=filled, fillcolor=yellow]
> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n0000003b:port1 -> n0000003e [style=bold]
> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
> style=filled, fillcolor=yellow]
> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000046:port1 -> n00000049 [style=bold]
> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
> style=filled, fillcolor=yellow]
> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000051:port1 -> n00000054 [style=bold]
> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
> style=filled, fillcolor=yellow]
> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> n0000005c:port1 -> n0000005f [style=bold]
> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
> style=filled, fillcolor=yellow]
> n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
> fillcolor=yellow]
> n00000067 -> n00000001:port4 [style=bold]
> n0000006e [label="{{<port0> 0} |
> 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
> shape=Mrecord, style=filled, fillcolor=green]
> n0000006e:port1 -> n00000001:port2 [style=bold]
> n00000073 [label="{{<port0> 0} |
> csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
> style=filled, fillcolor=green]
> n00000073:port1 -> n0000006e:port0 [style=bold]
> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
> max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
> shape=Mrecord, style=filled, fillcolor=green]
> n00000078:port4 -> n00000073:port0 [style=dashed]
> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000081:port0 -> n00000078:port0 [style=bold]
> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000085:port0 -> n00000078:port1 [style=bold]
> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> n00000089:port0 -> n00000078:port2 [style=bold]
> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> n0000008d:port0 -> n00000078:port3 [style=bold]
> }
>
>
> > >
> > > If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> > > that's exactly what we're working on with the context framework :)
> > >
>
> Ok. Then I should have a look to context framework too ...
>
Please, I hope to be able to resume working on it sooner or later
given the right use case.
> > >
> > > >
> > > > ... since it is not, your assumption seems very reasonable.
> > > >
> > > > >
> > > > > > - How can the user decide whether direct (csi2isp) or indirect
> > > > > > (mem2mem) streaming shall be used?
> > > > >
> > > > > That will also be part of the evaluation. From dts would be my first
> > > > > option, but may prevent using both modes on same platform then.
> > > >
> > > > Of course this depends what the hardware is able to do, but in case the
> > > > HW is reconfigurable easily, I doubt that device tree is a good choice
> > > > to solve that.
> > > > >
> > > > > >
> > > > > > While it is certainly OK to introduce this support only at a later
> > > > > > stage, it makes sense to consider this right from the start to avoid
> > > > > > some nasty changes e.g. in how this hardware is exposed to user space.
> > > > > >
> > > > > > Also, we are facing a similiar challenge with recent Rockchip ISP
> > > > > > hardware (RK3588, RK3576, ...) and it would be great to hear your
> > > > > > thoughts about that.
> > > > >
> > > > > Is there an existing discussion thread available on this topic? I would
> > > > > be very interested in following it.
> > > >
> > > > Not yet, I am afraid. But there should be one or two soon (TM) :-)
> > >
> > > It's probably time to have one :)
>
> Good. Please loop me in ;)
You are in, this is the conversation ;)
It might be a good discussion point for the media summit in Nice
co-located with Embedded Recipes if people with interest in the topic
will going the be there.
I'm also adding Anthony from ARM as I know he's going through the same
inline/m2m duality you're now facing.
Thanks
j
>
> BR
> Antoine
>
> > >
> > > >
> > > > Thanks and regards,
> > > > Michael
> > > >
> > > > >
> > > > > Thanks
> > > > > Antoine
> > > > >
> > > > > >
> > > > > > Thanks in advance and best regards,
> > > > > > Michael
> > > > > >
> > > > > > >
> > > > > > > This series is posted as RFC because extending the v4l2-isp interface
> > > > > > > may
> > > > > > > overlap with ongoing work. If similar development already exists, I am
> > > > > > > happy to rebase or adapt the series accordingly. If preferred, the
> > > > > > > series
> > > > > > > can also be split into two parts: the v4l2-isp rework and the Neo ISP
> > > > > > > driver introduction.
> > > > > > >
> > > > > > > A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> > > > > > > consistent with the existing style in that file.
> > > > > > >
> > > > > > > Testing was performed on the i.MX95 EVK using the media/next kernel in
> > > > > > > standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> > > > > > > using the downstream NXP kernel, as some hardware dependencies are not
> > > > > > > yet upstreamed.
> > > > > > >
> > > > > > > Thanks,
> > > > > > > Antoine
> > > > > > >
> > > > > > > ---
> > > > > > > Here are v4l2-compliance test results:
> > > > > > >
> > > > > > > v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> > > > > > > v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
> > > > > > >
> > > > > > > Compliance test for neoisp device /dev/media0:
> > > > > > >
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/media0 open: OK
> > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Media Controller ioctls:
> > > > > > > test MEDIA_IOC_G_TOPOLOGY: OK
> > > > > > > Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> > > > > > > test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> > > > > > > test MEDIA_IOC_SETUP_LINK: OK
> > > > > > >
> > > > > > > Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/video0:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Card type : neoisp
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x8ca03000
> > > > > > > Video Capture Multiplanar
> > > > > > > Video Output Multiplanar
> > > > > > > Metadata Capture
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Device Capabilities
> > > > > > > Device Caps : 0x04202000
> > > > > > > Video Output Multiplanar
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x0300000a
> > > > > > > Type : V4L Video
> > > > > > > Entity Info:
> > > > > > > ID : 0x00000008 (8)
> > > > > > > Name : neoisp-input0
> > > > > > > Function : V4L2 I/O
> > > > > > > Pad 0x01000009 : 0: Source
> > > > > > > Link 0x0200000c: to remote pad 0x1000002 of entity
> > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/video0 open: OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/video1:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Card type : neoisp
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x8ca03000
> > > > > > > Video Capture Multiplanar
> > > > > > > Video Output Multiplanar
> > > > > > > Metadata Capture
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Device Capabilities
> > > > > > > Device Caps : 0x04202000
> > > > > > > Video Output Multiplanar
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x03000010
> > > > > > > Type : V4L Video
> > > > > > > Entity Info:
> > > > > > > ID : 0x0000000e (14)
> > > > > > > Name : neoisp-input1
> > > > > > > Function : V4L2 I/O
> > > > > > > Pad 0x0100000f : 0: Source
> > > > > > > Link 0x02000012: to remote pad 0x1000003 of entity
> > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/video1 open: OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/video2:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Card type : neoisp
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x8ca03000
> > > > > > > Video Capture Multiplanar
> > > > > > > Video Output Multiplanar
> > > > > > > Metadata Capture
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Device Capabilities
> > > > > > > Device Caps : 0x0c200000
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x03000016
> > > > > > > Type : V4L Video
> > > > > > > Entity Info:
> > > > > > > ID : 0x00000014 (20)
> > > > > > > Name : neoisp-params
> > > > > > > Function : V4L2 I/O
> > > > > > > Pad 0x01000015 : 0: Source
> > > > > > > Link 0x02000018: to remote pad 0x1000004 of entity
> > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/video2 open: OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK (Not Supported)
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK (Not Supported)
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/video3:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Card type : neoisp
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x8ca03000
> > > > > > > Video Capture Multiplanar
> > > > > > > Video Output Multiplanar
> > > > > > > Metadata Capture
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Device Capabilities
> > > > > > > Device Caps : 0x04201000
> > > > > > > Video Capture Multiplanar
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x0300001c
> > > > > > > Type : V4L Video
> > > > > > > Entity Info:
> > > > > > > ID : 0x0000001a (26)
> > > > > > > Name : neoisp-frame
> > > > > > > Function : V4L2 I/O
> > > > > > > Pad 0x0100001b : 0: Sink
> > > > > > > Link 0x0200001e: from remote pad 0x1000005 of entity
> > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/video3 open: OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK (Not Supported)
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/video4:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Card type : neoisp
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x8ca03000
> > > > > > > Video Capture Multiplanar
> > > > > > > Video Output Multiplanar
> > > > > > > Metadata Capture
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Device Capabilities
> > > > > > > Device Caps : 0x04201000
> > > > > > > Video Capture Multiplanar
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x03000022
> > > > > > > Type : V4L Video
> > > > > > > Entity Info:
> > > > > > > ID : 0x00000020 (32)
> > > > > > > Name : neoisp-ir
> > > > > > > Function : V4L2 I/O
> > > > > > > Pad 0x01000021 : 0: Sink
> > > > > > > Link 0x02000024: from remote pad 0x1000006 of entity
> > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/video4 open: OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK (Not Supported)
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/video5:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Card type : neoisp
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x8ca03000
> > > > > > > Video Capture Multiplanar
> > > > > > > Video Output Multiplanar
> > > > > > > Metadata Capture
> > > > > > > Metadata Output
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Device Capabilities
> > > > > > > Device Caps : 0x04a00000
> > > > > > > Metadata Capture
> > > > > > > Streaming
> > > > > > > Extended Pix Format
> > > > > > > Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x03000028
> > > > > > > Type : V4L Video
> > > > > > > Entity Info:
> > > > > > > ID : 0x00000026 (38)
> > > > > > > Name : neoisp-stats
> > > > > > > Function : V4L2 I/O
> > > > > > > Pad 0x01000027 : 0: Sink
> > > > > > > Link 0x0200002a: from remote pad 0x1000007 of entity
> > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/video5 open: OK
> > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK (Not Supported)
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK (Not Supported)
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
> > > > > > > Warnings: 0
> > > > > > > --------------------------------------------------------------------------------
> > > > > > > Compliance test for neoisp device /dev/v4l-subdev0:
> > > > > > >
> > > > > > > Driver Info:
> > > > > > > Driver version : 6.19.0
> > > > > > > Capabilities : 0x00000000
> > > > > > > Client Capabilities: 0x0000000000000002
> > > > > > > interval-uses-which Media Driver Info:
> > > > > > > Driver name : neoisp
> > > > > > > Model : neoisp
> > > > > > > Serial :
> > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > Media version : 6.19.0
> > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > Driver version : 6.19.0
> > > > > > > Interface Info:
> > > > > > > ID : 0x0300002c
> > > > > > > Type : V4L Sub-Device
> > > > > > > Entity Info:
> > > > > > > ID : 0x00000001 (1)
> > > > > > > Name : neoisp
> > > > > > > Function : Image Signal Processor
> > > > > > > Pad 0x01000002 : 0: Sink
> > > > > > > Link 0x0200000c: from remote pad 0x1000009 of entity
> > > > > > > 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> > > > > > > Pad 0x01000003 : 1: Sink
> > > > > > > Link 0x02000012: from remote pad 0x100000f of entity
> > > > > > > 'neoisp-input1' (V4L2 I/O): Data
> > > > > > > Pad 0x01000004 : 2: Sink
> > > > > > > Link 0x02000018: from remote pad 0x1000015 of entity
> > > > > > > 'neoisp-params' (V4L2 I/O): Data, Enabled
> > > > > > > Pad 0x01000005 : 3: Source
> > > > > > > Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
> > > > > > > frame' (V4L2 I/O): Data, Enabled
> > > > > > > Pad 0x01000006 : 4: Source
> > > > > > > Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
> > > > > > > ir' (V4L2 I/O): Data
> > > > > > > Pad 0x01000007 : 5: Source
> > > > > > > Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
> > > > > > > stats' (V4L2 I/O): Data, Enabled
> > > > > > >
> > > > > > > Required ioctls:
> > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > test VIDIOC_SUDBEV_QUERYCAP: OK
> > > > > > > test invalid ioctls: OK
> > > > > > >
> > > > > > > Allow for multiple opens:
> > > > > > > test second /dev/v4l-subdev0 open: OK
> > > > > > > test VIDIOC_SUBDEV_QUERYCAP: OK
> > > > > > > test for unlimited opens: OK
> > > > > > >
> > > > > > > Debug ioctls:
> > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > >
> > > > > > > Input ioctls:
> > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > >
> > > > > > > Output ioctls:
> > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > >
> > > > > > > Input/Output configuration ioctls:
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > >
> > > > > > > Sub-Device ioctls (Sink Pad 0):
> > > > > > > Try Stream 0
> > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > Active Stream 0
> > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > >
> > > > > > > Sub-Device ioctls (Sink Pad 1):
> > > > > > > Try Stream 0
> > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > Active Stream 0
> > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > >
> > > > > > > Sub-Device ioctls (Sink Pad 2):
> > > > > > > Try Stream 0
> > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > Active Stream 0
> > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > >
> > > > > > > Sub-Device ioctls (Source Pad 3):
> > > > > > > Try Stream 0
> > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > Active Stream 0
> > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > >
> > > > > > > Sub-Device ioctls (Source Pad 4):
> > > > > > > Try Stream 0
> > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > Active Stream 0
> > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > >
> > > > > > > Sub-Device ioctls (Source Pad 5):
> > > > > > > Try Stream 0
> > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > Active Stream 0
> > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > >
> > > > > > > Control ioctls:
> > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> > > > > > > test VIDIOC_QUERYCTRL: OK
> > > > > > > test VIDIOC_G/S_CTRL: OK
> > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > Standard Controls: 1 Private Controls: 1
> > > > > > >
> > > > > > > Format ioctls:
> > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
> > > > > > > Supported)
> > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > test VIDIOC_G_FMT: OK (Not Supported)
> > > > > > > test VIDIOC_TRY_FMT: OK (Not Supported)
> > > > > > > test VIDIOC_S_FMT: OK (Not Supported)
> > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > test Cropping: OK (Not Supported)
> > > > > > > test Composing: OK (Not Supported)
> > > > > > > test Scaling: OK (Not Supported)
> > > > > > >
> > > > > > > Codec ioctls:
> > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > >
> > > > > > > Buffer ioctls:
> > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > test VIDIOC_EXPBUF: OK (Not Supported)
> > > > > > > test Requests: OK (Not Supported)
> > > > > > >
> > > > > > > Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
> > > > > > > 0, Warnings: 0
> > > > > > >
> > > > > > > Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
> > > > > > > Failed: 0, Warnings: 0
> > > > > > >
> > > > > > > ---
> > > > > > > Antoine Bouyer (11):
> > > > > > > media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> > > > > > > media: v4l2-isp: Add helper function to compute extended stats size
> > > > > > > media: Documentation: uapi: Update V4L2 ISP for extensible stats
> > > > > > > media: Documentation: Add NXP neoisp driver documentation
> > > > > > > dt-bindings: media: Add nxp neoisp support
> > > > > > > media: v4l2-ctrls: Add user control base for NXP neoisp controls
> > > > > > > media: Add meta formats supported by NXP neoisp driver
> > > > > > > media: uapi: Add NXP NEOISP user interface header file
> > > > > > > media: platform: Add NXP Neoisp Image Signal Processor
> > > > > > > media: platform: neoisp: Add debugfs support
> > > > > > > arm64: dts: freescale: imx95: Add NXP neoisp device tree node
> > > > > > >
> > > > > > > .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> > > > > > > .../admin-guide/media/nxp-neoisp.dot | 16 +
> > > > > > > .../admin-guide/media/nxp-neoisp.rst | 189 ++
> > > > > > > .../admin-guide/media/v4l-drivers.rst | 1 +
> > > > > > > .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> > > > > > > .../userspace-api/media/v4l/meta-formats.rst | 1 +
> > > > > > > .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> > > > > > > .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> > > > > > > MAINTAINERS | 9 +
> > > > > > > .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> > > > > > > arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> > > > > > > drivers/media/platform/nxp/Kconfig | 1 +
> > > > > > > drivers/media/platform/nxp/Makefile | 1 +
> > > > > > > drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> > > > > > > drivers/media/platform/nxp/neoisp/Makefile | 8 +
> > > > > > > drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> > > > > > > .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> > > > > > > .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> > > > > > > drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> > > > > > > .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> > > > > > > .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> > > > > > > .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> > > > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> > > > > > > include/media/v4l2-isp.h | 13 +
> > > > > > > include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> > > > > > > include/uapi/linux/media/v4l2-isp.h | 85 +
> > > > > > > include/uapi/linux/v4l2-controls.h | 6 +
> > > > > > > include/uapi/linux/videodev2.h | 6 +
> > > > > > > 30 files changed, 11880 insertions(+), 3 deletions(-)
> > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
> > > > > > > diagram.dot
> > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> > > > > > > create mode 100644 Documentation/devicetree/bindings/media/
> > > > > > > nxp,neoisp.yaml
> > > > > > > create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
> > > > > > > nxp-neoisp.rst
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> > > > > > > create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > >
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-05 9:40 ` Jacopo Mondi
@ 2026-02-09 13:19 ` Anthony McGivern
2026-02-10 0:20 ` Laurent Pinchart
2026-02-10 0:03 ` Laurent Pinchart
` (2 subsequent siblings)
3 siblings, 1 reply; 49+ messages in thread
From: Anthony McGivern @ 2026-02-09 13:19 UTC (permalink / raw)
To: Jacopo Mondi, Antoine Bouyer
Cc: Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
Hello,
On 05/02/2026 09:40, Jacopo Mondi wrote:
> Hi Antoine
>
> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
>> Hi Jacopo
>>
>> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
>>> Hello,
>>>
>>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
>>>> Hello
>>>>
>>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
>>>>> Hi Antoine,
>>>>>
>>>>> Thanks for your response.
>>>>>
>>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
>>>>>> Hi Michael
>>>>>>
>>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>>>>>>
>>>>>>> Hi Antoine,
>>>>>>>
>>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> This RFC patch series introduces the NXP Neo Image Signal Processor
>>>>>>>> (ISP)
>>>>>>>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
>>>>>>>> family.
>>>>>>>> The series also includes updates to the generic v4l2-isp interface to
>>>>>>>> support extended statistics required by the Neo ISP.
>>>>>>>>
>>>>>>>> The Neo ISP processes one or more camera streams, converting RAW formats
>>>>>>>> into YUV or RGB outputs. Its architecture is largely influenced by the
>>>>>>>> PISP driver. The hardware supports up to eight contexts, with three sink
>>>>>>>> pads (main input, HDR input, and parameter buffers) and three source
>>>>>>>> pads
>>>>>>>> (RGB output, IR output, and statistics metadata).
>>>>>>>>
>>>>>>>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
>>>>>>>> parameter/statistics buffers are supported through the generic v4l2-isp
>>>>>>>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
>>>>>>>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
>>>>>>> How do you envisage the direct CSI-to-ISP streaming shall be supported?
>>>>>> At this stage, this streaming mode still needs to be evaluated on
>>>>>> neoisp. We should follow the integration model used by existing ISP
>>>>>> drivers to avoid duplicating solutions.
>>>>> Fair point, but I have had the impression that there are not many
>>>>> examples (if any). The rkisp1 driver, for instance, only supports inline
>>>>> mode although the HW should be able to do both.
>>>>>
>>>>> But any pointers most welcome, I won't claim I have the full overview.
>>>>>
>>>>>> Below are my initial thoughts on the specific points you raised:
>>>>>>
>>>>>>> - How shall the final media graph(s) look like?
>>>>>> The media entities would remain mostly identical, except for the absence
>>>>>> of ISI. The topology would be a direct linkg from sensor->csi-
>>>>>>> formatter->neoisp.
>>>> If support for inline mode has to be added later, the ISP will need to
>>>> be registered in the same media graph of the CSI-2 receiver to be able
>>>> to link the two, right ?
>> yes correct.
>>
>>>> How do you envision to control the ISP operating mode, because I'm
>>>> afraid if you register the ISP in its own media graph, you're locking
>>>> yourself there as implementing inline mode would require a different
>>>> media topology with all the implications on the rest of the userspace
>>>> stack.
>>>>
>>>> This might not be a problem if you know that the inline vs m2m mode is
>>>> SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
>>>> other as m2m. In this case you'll likely need two pipeline handlers
>>>> in libcamera, but if that's per SoC-line maybe is acceptable. The fact
>>>> you suggests in inline mode there won't be an ISI makes me think this
>>>> actually depends on the SoC design ?
>> Actually, this is not really at SoC synthesis time, neoisp HW does support
>> both modes, that is configurable. But ISP HW can run in a single mode only
>> once it is configured. Streaming mode is tightly coupled with CSI HW, then
>> ISP cannot be used in M2M mode with another sensor simultaneously.
>>
> Yes, my point is trying to understand "how it is configured" and what
> your expectations are.
>
> Will the board .dts (or a camera .dtso) decide how the ISP is operated
> by defining its endpoint connections ? Assuming with the same SoC both
> inline and m2m modes are possible, without differences in the SoC
> design/integration, will users of the same board have to modify the
> .dts or load ad-hoc .dtso to decide what mode is in use ?
>
> Then, the question of how the media topology will look and which
> components registers what has to be clarified.
>
> Let's try to make a taxonomy of the cases we have in mainline (or on
> their way to mainline).
>
> In the mali example I mentioned, the operating mode is selected by the
> .dtsi as Mali can be integrated either inline or in m2m mode in
> different SoCs. RZ/V2H in example, will always be m2m as it doesn't
> interface the CSI-2 receiver with the ISP but rather interfaces the
> ISP with a companion chip the performs memory access on its behalf
> (the IVC). A different design that incorporates Mali inline will
> instead have to interface the CSI-2 receiver with the ISP with
> internal busses/glue logic and will then have to described this in dts.
>
> This is fine as the ISP integration is different and then having the
> description in dts is legit.
>
> The ISP driver unconditionally registers an async notifier and the
> downstream component (csi-2 or IVC) will register its async subdev(s)
> which will all appear in the ISP media graph. This is possible because
> the assumption is that the CSI-2 receiver (or the companion chip)
> won't register their own media graph.
>
> The Renesas V4H example I mentioned is instead different. The ISP can
> be operated in inline and m2m, on the same SoC without any
> modification to hardware and to the dts/dtsi. It's basically a user
> choice we defer to runtime.
>
> The V4H already has a component that registers a media graph: the
> CSI-2/VIN block which is found in many SoCs of the same (and older)
> generations. The ISP is present only in some SoC, but the CSI-2/VIN is
> always there. In this case, to support both inline and m2m modes, the
> VIN registers the media device and, with the trick I pointed you to in
> Niklas' code, the ISP registers a subdev in the VIN media graph. Then
> the inline/m2m mode can be selected by media link enablement at
> run-time. Now, inline mode is not yet supported on V4H and there might
> be dragons there, but at least, both modes should be possible on the same
> SoC.
>
> On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
>
> RPi knows the only SoC where the PiPS will be found is their one. The
> ISP cannot function inline and will always be m2m. In this case, a
> dedicated media graph for the ISP is the simplest and cleanest
> solution.
>
> RkISP1 instead will always be inline only. It registers a media device
> and an async notifier, the connected CSI-2 receiver will register an
> async subdev and will be connected to the device tree endpoint of the
> ISP device node.
>
> What model is the closest one to the neoisp integration that you
> envision on NXP SoCs ?
>
>>> One small correction after some more research:
>>>
>>> we actually already have a pipeline in libcamera that supports inline
>>> and (will soon) support m2m: the mali c55 one. My take on "probably
>>> need two pipeline handlers" was not correct then.
>> Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
>> time analyzing it ':) Seems we are quite aligned as per my understanding:
>> inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
>> device from Mali. Is that right ?
>>
>>> As said, Mali-C55 can be integrated inline or in m2m mode and this is
>>> decided based on the device tree endpoint connections.
>> Good. Do you have an example available ?
> It's in mainline, but there's nothing exciting there as the assumption
> is that there will always be a connection on the first endpoint and
> the driver simply registers a notifier for the connected async subdev. If
> it's a CSI-2 receiver then we're inline. If it's a companion chip
> we're m2m.
>
> The libcamera pipeline (not upstream yet) inspects the media entity
> function of the entity connected to the ISP sink pad#0. If it's a
> CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
> operated the pipeline differently.
>
>>> So, if you know neoisp will be integrated either inline or m2m in
>>> different SoC lines, maybe deferring it to device tree is good enough
>>> at the expense of a slightly more complicated pipeline ?
>> As said, SoC/ISP HW does support both modes. But I think that the selection
>> can be done in device tree too. So that after bootup, a camera will be used
>> only in 1 mode.
>>
>>> I guess this has implications on the bindings definition as well..
>> Most probably yes. Can this be done as second phase once evaluation is
>> completed ?
>>
> I think you should asses from the very beginning what is the planned
> integration model of the ISP in order not to corner yourself in a
> place where it will be hard to support inline without re-writing
> the driver's media device registration logic.
>
> Looking at the below media graph of CSI/ISI you should ask the question "how
> will I register the ISP subdev in the CSI-2 media graph when inline"
> and "how will I describe inline vs m2m mode if the underlying hardware
> design doesn't change?" as deferring it to the .dts might not be the
> most correct way to go in that case ?
>
>>>> However, if you plan to allow deferring inline/m2m mode selection to
>>>> the system integrators or even have it as a run-time parameter, then
>>>> you should really consider having the ISP in the same media graph as
>>>> the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
>>>> media graph, where you could select the operating mode through media link
>>>> enablement or dts endpoint connections
>>>>
>>>> Niklas (in cc) has addressed a similar situation, where inline and m2m
>>>> mode can be selected by link enablement at runtime here
>>>> https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
>>>> (see risp_cs_internal_ops)
>>>>
>>>>> OK, I thought that ISI was still around...
>>>>>
>>>>>>> - How many media devices are registered and which driver registers it
>>>>>>> or them?
>>>>>> That will be part of the evaluation. My initial assumption is that
>>>>>> neoisp would be the appropriate component to register the media device
>>>>>> in this mode, since ISI is not involved, and ISI currently performs the
>>>>>> registration in the M2M configuration.
>>>> Isn't the ISP registering its own media graph ?
>> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
>> devices of the ISI media graph.
>>
> I suggest you do what RPi does. The mainline driver only registers one
> instance and they carry a little patch downstream that implements the
> for() loop where multiple instances are registered. Duplicating media graphs
> is not desirable (at least in mainline) as we can have ISPs with 256
> contexts, we don't want 256 media graphs.
>
> A framework level solution with proper priority handling and job
> scheduling is what is required and that's what the context work should
> end up being.
Our Mali-C720 ISP can support up to 16 contexts, each with over a dozen
subdevs and capture nodes. As we imagine this will not be feasible for
upstreaming :) So using this framework is definitely the way we would
like to go. We are mainly limited by the lack of per-context graph/streams
configuration at this point.
>
>>>> Can we get a copy of all media graphs on an i.MX95 system including
>>>> the ISI and the CSI-2 receiver ?
>> Here is an example with multiple sensors. Or do you need it in another
>> format ?
> No it's fine, thanks!
>
>>
>> digraph board {
>> rankdir=TB
>> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
>> <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
>> | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
>> shape=Mrecord, style=filled, fillcolor=green]
>> n00000001:port5 -> n0000000f:port0 [style=bold]
>> n00000001:port6 -> n0000001a:port0 [style=bold]
>> n00000001:port7 -> n00000025:port0 [style=bold]
>> n00000001:port8 -> n00000030:port0 [style=bold]
>> n00000001:port9 -> n0000003b:port0 [style=bold]
>> n00000001:port10 -> n00000046:port0 [style=bold]
>> n00000001:port11 -> n00000051:port0 [style=bold]
>> n00000001:port12 -> n0000005c:port0 [style=bold]
>> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000000f:port1 -> n00000012 [style=bold]
>> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
>> style=filled, fillcolor=yellow]
>> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000001a:port1 -> n0000001d [style=bold]
>> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000025:port1 -> n00000028 [style=bold]
>> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000030:port1 -> n00000033 [style=bold]
>> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
>> style=filled, fillcolor=yellow]
>> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000003b:port1 -> n0000003e [style=bold]
>> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000046:port1 -> n00000049 [style=bold]
>> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000051:port1 -> n00000054 [style=bold]
>> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
>> style=filled, fillcolor=yellow]
>> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000005c:port1 -> n0000005f [style=bold]
>> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
>> fillcolor=yellow]
>> n00000067 -> n00000001:port4 [style=bold]
>> n0000006e [label="{{<port0> 0} |
>> 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
>> shape=Mrecord, style=filled, fillcolor=green]
>> n0000006e:port1 -> n00000001:port2 [style=bold]
>> n00000073 [label="{{<port0> 0} |
>> csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
>> style=filled, fillcolor=green]
>> n00000073:port1 -> n0000006e:port0 [style=bold]
>> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
>> max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
>> shape=Mrecord, style=filled, fillcolor=green]
>> n00000078:port4 -> n00000073:port0 [style=dashed]
>> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000081:port0 -> n00000078:port0 [style=bold]
>> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000085:port0 -> n00000078:port1 [style=bold]
>> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000089:port0 -> n00000078:port2 [style=bold]
>> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000008d:port0 -> n00000078:port3 [style=bold]
>> }
>>
This was an interesting point from our sides too regarding the context framework,
how would shared inputs be linked to independent contexts? For example, one input
port with 4 sensors where each is processed by a separate context.
As a test of multi-context with duplicated media graphs, we would segregate our
inputs between media devices, though this is less flexible as it strictly ties
one sensor to a particular context.
>>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
>>>> that's exactly what we're working on with the context framework :)
>>>>
>> Ok. Then I should have a look to context framework too ...
>>
> Please, I hope to be able to resume working on it sooner or later
> given the right use case.
>
>>>>> ... since it is not, your assumption seems very reasonable.
>>>>>
>>>>>>> - How can the user decide whether direct (csi2isp) or indirect
>>>>>>> (mem2mem) streaming shall be used?
>>>>>> That will also be part of the evaluation. From dts would be my first
>>>>>> option, but may prevent using both modes on same platform then.
>>>>> Of course this depends what the hardware is able to do, but in case the
>>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
>>>>> to solve that.
>>>>>>> While it is certainly OK to introduce this support only at a later
>>>>>>> stage, it makes sense to consider this right from the start to avoid
>>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
>>>>>>>
>>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
>>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>>>>>>> thoughts about that.
>>>>>> Is there an existing discussion thread available on this topic? I would
>>>>>> be very interested in following it.
>>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
>>>> It's probably time to have one :)
>> Good. Please loop me in ;)
> You are in, this is the conversation ;)
>
> It might be a good discussion point for the media summit in Nice
> co-located with Embedded Recipes if people with interest in the topic
> will going the be there.
>
> I'm also adding Anthony from ARM as I know he's going through the same
> inline/m2m duality you're now facing.
>
> Thanks
> j
We make the issue even more complex as individual contexts can run in either
inline or m2m mode simultaneously... Though in our case the ISP does not
have any external dependencies for this like with Mali-C55 + IVC.
As a side note, was there any thought into how Libcamera may support a pure m2m
usecase, say by passing user provided frames rather than indirectly coming from
a sensor? Perhaps there is already something for this that I've missed.
Thanks,
Anthony
>> BR
>> Antoine
>>
>>>>> Thanks and regards,
>>>>> Michael
>>>>>
>>>>>> Thanks
>>>>>> Antoine
>>>>>>
>>>>>>> Thanks in advance and best regards,
>>>>>>> Michael
>>>>>>>
>>>>>>>> This series is posted as RFC because extending the v4l2-isp interface
>>>>>>>> may
>>>>>>>> overlap with ongoing work. If similar development already exists, I am
>>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the
>>>>>>>> series
>>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>>>>>>> driver introduction.
>>>>>>>>
>>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>>>>>>> consistent with the existing style in that file.
>>>>>>>>
>>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
>>>>>>>> yet upstreamed.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Antoine
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Here are v4l2-compliance test results:
>>>>>>>>
>>>>>>>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
>>>>>>>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>>>>>>>>
>>>>>>>> Compliance test for neoisp device /dev/media0:
>>>>>>>>
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/media0 open: OK
>>>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Media Controller ioctls:
>>>>>>>> test MEDIA_IOC_G_TOPOLOGY: OK
>>>>>>>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
>>>>>>>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>>>>>>>> test MEDIA_IOC_SETUP_LINK: OK
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video0:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04202000
>>>>>>>> Video Output Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x0300000a
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000008 (8)
>>>>>>>> Name : neoisp-input0
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000009 : 0: Source
>>>>>>>> Link 0x0200000c: to remote pad 0x1000002 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video0 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video1:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04202000
>>>>>>>> Video Output Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000010
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x0000000e (14)
>>>>>>>> Name : neoisp-input1
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x0100000f : 0: Source
>>>>>>>> Link 0x02000012: to remote pad 0x1000003 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video1 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video2:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x0c200000
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000016
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000014 (20)
>>>>>>>> Name : neoisp-params
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000015 : 0: Source
>>>>>>>> Link 0x02000018: to remote pad 0x1000004 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video2 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video3:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04201000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x0300001c
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x0000001a (26)
>>>>>>>> Name : neoisp-frame
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x0100001b : 0: Sink
>>>>>>>> Link 0x0200001e: from remote pad 0x1000005 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video3 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video4:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04201000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000022
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000020 (32)
>>>>>>>> Name : neoisp-ir
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000021 : 0: Sink
>>>>>>>> Link 0x02000024: from remote pad 0x1000006 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video4 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video5:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04a00000
>>>>>>>> Metadata Capture
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000028
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000026 (38)
>>>>>>>> Name : neoisp-stats
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000027 : 0: Sink
>>>>>>>> Link 0x0200002a: from remote pad 0x1000007 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video5 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/v4l-subdev0:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x00000000
>>>>>>>> Client Capabilities: 0x0000000000000002
>>>>>>>> interval-uses-which Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x0300002c
>>>>>>>> Type : V4L Sub-Device
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000001 (1)
>>>>>>>> Name : neoisp
>>>>>>>> Function : Image Signal Processor
>>>>>>>> Pad 0x01000002 : 0: Sink
>>>>>>>> Link 0x0200000c: from remote pad 0x1000009 of entity
>>>>>>>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
>>>>>>>> Pad 0x01000003 : 1: Sink
>>>>>>>> Link 0x02000012: from remote pad 0x100000f of entity
>>>>>>>> 'neoisp-input1' (V4L2 I/O): Data
>>>>>>>> Pad 0x01000004 : 2: Sink
>>>>>>>> Link 0x02000018: from remote pad 0x1000015 of entity
>>>>>>>> 'neoisp-params' (V4L2 I/O): Data, Enabled
>>>>>>>> Pad 0x01000005 : 3: Source
>>>>>>>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
>>>>>>>> frame' (V4L2 I/O): Data, Enabled
>>>>>>>> Pad 0x01000006 : 4: Source
>>>>>>>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
>>>>>>>> ir' (V4L2 I/O): Data
>>>>>>>> Pad 0x01000007 : 5: Source
>>>>>>>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
>>>>>>>> stats' (V4L2 I/O): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_SUDBEV_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/v4l-subdev0 open: OK
>>>>>>>> test VIDIOC_SUBDEV_QUERYCAP: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Sink Pad 0):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Sink Pad 1):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Sink Pad 2):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Source Pad 3):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Source Pad 4):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Source Pad 5):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>>>>>>> test VIDIOC_QUERYCTRL: OK
>>>>>>>> test VIDIOC_G/S_CTRL: OK
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 1 Private Controls: 1
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
>>>>>>>> Supported)
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK (Not Supported)
>>>>>>>> test VIDIOC_TRY_FMT: OK (Not Supported)
>>>>>>>> test VIDIOC_S_FMT: OK (Not Supported)
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK (Not Supported)
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
>>>>>>>> 0, Warnings: 0
>>>>>>>>
>>>>>>>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
>>>>>>>> Failed: 0, Warnings: 0
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Antoine Bouyer (11):
>>>>>>>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
>>>>>>>> media: v4l2-isp: Add helper function to compute extended stats size
>>>>>>>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
>>>>>>>> media: Documentation: Add NXP neoisp driver documentation
>>>>>>>> dt-bindings: media: Add nxp neoisp support
>>>>>>>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
>>>>>>>> media: Add meta formats supported by NXP neoisp driver
>>>>>>>> media: uapi: Add NXP NEOISP user interface header file
>>>>>>>> media: platform: Add NXP Neoisp Image Signal Processor
>>>>>>>> media: platform: neoisp: Add debugfs support
>>>>>>>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>>>>>>>>
>>>>>>>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
>>>>>>>> .../admin-guide/media/nxp-neoisp.dot | 16 +
>>>>>>>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
>>>>>>>> .../admin-guide/media/v4l-drivers.rst | 1 +
>>>>>>>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
>>>>>>>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
>>>>>>>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
>>>>>>>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
>>>>>>>> MAINTAINERS | 9 +
>>>>>>>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
>>>>>>>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
>>>>>>>> drivers/media/platform/nxp/Kconfig | 1 +
>>>>>>>> drivers/media/platform/nxp/Makefile | 1 +
>>>>>>>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
>>>>>>>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
>>>>>>>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
>>>>>>>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
>>>>>>>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
>>>>>>>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
>>>>>>>> include/media/v4l2-isp.h | 13 +
>>>>>>>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
>>>>>>>> include/uapi/linux/media/v4l2-isp.h | 85 +
>>>>>>>> include/uapi/linux/v4l2-controls.h | 6 +
>>>>>>>> include/uapi/linux/videodev2.h | 6 +
>>>>>>>> 30 files changed, 11880 insertions(+), 3 deletions(-)
>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
>>>>>>>> diagram.dot
>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
>>>>>>>> create mode 100644 Documentation/devicetree/bindings/media/
>>>>>>>> nxp,neoisp.yaml
>>>>>>>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
>>>>>>>> nxp-neoisp.rst
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
>>>>>>>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>>>>>>>>
>>>>>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-09 13:19 ` Anthony McGivern
@ 2026-02-10 0:20 ` Laurent Pinchart
2026-02-10 12:20 ` Anthony McGivern
0 siblings, 1 reply; 49+ messages in thread
From: Laurent Pinchart @ 2026-02-10 0:20 UTC (permalink / raw)
To: Anthony McGivern
Cc: Jacopo Mondi, Antoine Bouyer, Michael Riesch, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li, mchehab, robh,
krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
Hi Anthony,
On Mon, Feb 09, 2026 at 01:19:43PM +0000, Anthony McGivern wrote:
> On 05/02/2026 09:40, Jacopo Mondi wrote:
> > On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> >> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> >>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> >>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> >>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
> >>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
> >>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
[snip]
> >>>>>>> - How many media devices are registered and which driver registers it
> >>>>>>> or them?
> >>>>>>
> >>>>>> That will be part of the evaluation. My initial assumption is that
> >>>>>> neoisp would be the appropriate component to register the media device
> >>>>>> in this mode, since ISI is not involved, and ISI currently performs the
> >>>>>> registration in the M2M configuration.
> >>>>
> >>>> Isn't the ISP registering its own media graph ?
> >>
> >> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> >> devices of the ISI media graph.
> >
> > I suggest you do what RPi does. The mainline driver only registers one
> > instance and they carry a little patch downstream that implements the
> > for() loop where multiple instances are registered. Duplicating media graphs
> > is not desirable (at least in mainline) as we can have ISPs with 256
> > contexts, we don't want 256 media graphs.
> >
> > A framework level solution with proper priority handling and job
> > scheduling is what is required and that's what the context work should
> > end up being.
>
> Our Mali-C720 ISP can support up to 16 contexts, each with over a dozen
> subdevs and capture nodes. As we imagine this will not be feasible for
> upstreaming :) So using this framework is definitely the way we would
> like to go. We are mainly limited by the lack of per-context graph/streams
> configuration at this point.
>
> >>>> Can we get a copy of all media graphs on an i.MX95 system including
> >>>> the ISI and the CSI-2 receiver ?
> >>
> >> Here is an example with multiple sensors. Or do you need it in another
> >> format ?
> >
> > No it's fine, thanks!
> >
> >> digraph board {
> >> rankdir=TB
> >> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 | <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7 | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000001:port5 -> n0000000f:port0 [style=bold]
> >> n00000001:port6 -> n0000001a:port0 [style=bold]
> >> n00000001:port7 -> n00000025:port0 [style=bold]
> >> n00000001:port8 -> n00000030:port0 [style=bold]
> >> n00000001:port9 -> n0000003b:port0 [style=bold]
> >> n00000001:port10 -> n00000046:port0 [style=bold]
> >> n00000001:port11 -> n00000051:port0 [style=bold]
> >> n00000001:port12 -> n0000005c:port0 [style=bold]
> >> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n0000000f:port1 -> n00000012 [style=bold]
> >> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box, style=filled, fillcolor=yellow]
> >> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n0000001a:port1 -> n0000001d [style=bold]
> >> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box, style=filled, fillcolor=yellow]
> >> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000025:port1 -> n00000028 [style=bold]
> >> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box, style=filled, fillcolor=yellow]
> >> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000030:port1 -> n00000033 [style=bold]
> >> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box, style=filled, fillcolor=yellow]
> >> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n0000003b:port1 -> n0000003e [style=bold]
> >> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box, style=filled, fillcolor=yellow]
> >> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000046:port1 -> n00000049 [style=bold]
> >> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box, style=filled, fillcolor=yellow]
> >> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000051:port1 -> n00000054 [style=bold]
> >> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box, style=filled, fillcolor=yellow]
> >> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n0000005c:port1 -> n0000005f [style=bold]
> >> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box, style=filled, fillcolor=yellow]
> >> n00000067 [label="mxc_isi.output\n", shape=box, style=filled, fillcolor=yellow]
> >> n00000067 -> n00000001:port4 [style=bold]
> >> n0000006e [label="{{<port0> 0} | 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n0000006e:port1 -> n00000001:port2 [style=bold]
> >> n00000073 [label="{{<port0> 0} | csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000073:port1 -> n0000006e:port0 [style=bold]
> >> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} | max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000078:port4 -> n00000073:port0 [style=dashed]
> >> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000081:port0 -> n00000078:port0 [style=bold]
> >> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000085:port0 -> n00000078:port1 [style=bold]
> >> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n00000089:port0 -> n00000078:port2 [style=bold]
> >> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >> n0000008d:port0 -> n00000078:port3 [style=bold]
> >> }
>
> This was an interesting point from our sides too regarding the context framework,
> how would shared inputs be linked to independent contexts? For example, one input
> port with 4 sensors where each is processed by a separate context.
If the multi-context ISP operates in M2M mode, the capture and ISP
pipelines will be disjoint (even if they're in the same media graphs).
Linking the two will be done by userspace, through memory buffers shared
between the pipelines.
> As a test of multi-context with duplicated media graphs, we would segregate our
> inputs between media devices, though this is less flexible as it strictly ties
> one sensor to a particular context.
>
> >>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> >>>> that's exactly what we're working on with the context framework :)
> >>
> >> Ok. Then I should have a look to context framework too ...
> >
> > Please, I hope to be able to resume working on it sooner or later
> > given the right use case.
> >
> >>>>> ... since it is not, your assumption seems very reasonable.
> >>>>>
> >>>>>>> - How can the user decide whether direct (csi2isp) or indirect
> >>>>>>> (mem2mem) streaming shall be used?
> >>>>>>
> >>>>>> That will also be part of the evaluation. From dts would be my first
> >>>>>> option, but may prevent using both modes on same platform then.
> >>>>>
> >>>>> Of course this depends what the hardware is able to do, but in case the
> >>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
> >>>>> to solve that.
> >>>>>
> >>>>>>> While it is certainly OK to introduce this support only at a later
> >>>>>>> stage, it makes sense to consider this right from the start to avoid
> >>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
> >>>>>>>
> >>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
> >>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
> >>>>>>> thoughts about that.
> >>>>>>
> >>>>>> Is there an existing discussion thread available on this topic? I would
> >>>>>> be very interested in following it.
> >>>>>
> >>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
> >>>>
> >>>> It's probably time to have one :)
> >>
> >> Good. Please loop me in ;)
> >
> > You are in, this is the conversation ;)
> >
> > It might be a good discussion point for the media summit in Nice
> > co-located with Embedded Recipes if people with interest in the topic
> > will going the be there.
> >
> > I'm also adding Anthony from ARM as I know he's going through the same
> > inline/m2m duality you're now facing.
>
> We make the issue even more complex as individual contexts can run in either
> inline or m2m mode simultaneously... Though in our case the ISP does not
> have any external dependencies for this like with Mali-C55 + IVC.
Simultaneously ? Can a single ISP instance run in inline and offline
mode simultaneously ? How does that work ?
> As a side note, was there any thought into how Libcamera may support a pure m2m
> usecase, say by passing user provided frames rather than indirectly coming from
> a sensor? Perhaps there is already something for this that I've missed.
https://lists.libcamera.org/pipermail/libcamera-devel/2025-December/055627.html
I expect more work to be needed before we can finalize an API, as I
think different people will have very different ideas of how this should
work.
> >>>>>>>> This series is posted as RFC because extending the v4l2-isp interface may
> >>>>>>>> overlap with ongoing work. If similar development already exists, I am
> >>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the series
> >>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
> >>>>>>>> driver introduction.
> >>>>>>>>
> >>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> >>>>>>>> consistent with the existing style in that file.
> >>>>>>>>
> >>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
> >>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> >>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
> >>>>>>>> yet upstreamed.
[snip]
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-10 0:20 ` Laurent Pinchart
@ 2026-02-10 12:20 ` Anthony McGivern
2026-02-10 16:02 ` Laurent Pinchart
0 siblings, 1 reply; 49+ messages in thread
From: Anthony McGivern @ 2026-02-10 12:20 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Jacopo Mondi, Antoine Bouyer, Michael Riesch, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li, mchehab, robh,
krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
Hi Laurent,
On 10/02/2026 00:20, Laurent Pinchart wrote:
> Hi Anthony,
>
> On Mon, Feb 09, 2026 at 01:19:43PM +0000, Anthony McGivern wrote:
>> On 05/02/2026 09:40, Jacopo Mondi wrote:
>>> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
>>>> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
>>>>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
>>>>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
>>>>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
>>>>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>>>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
> [snip]
>
>>>>>>>>> - How many media devices are registered and which driver registers it
>>>>>>>>> or them?
>>>>>>>> That will be part of the evaluation. My initial assumption is that
>>>>>>>> neoisp would be the appropriate component to register the media device
>>>>>>>> in this mode, since ISI is not involved, and ISI currently performs the
>>>>>>>> registration in the M2M configuration.
>>>>>> Isn't the ISP registering its own media graph ?
>>>> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
>>>> devices of the ISI media graph.
>>> I suggest you do what RPi does. The mainline driver only registers one
>>> instance and they carry a little patch downstream that implements the
>>> for() loop where multiple instances are registered. Duplicating media graphs
>>> is not desirable (at least in mainline) as we can have ISPs with 256
>>> contexts, we don't want 256 media graphs.
>>>
>>> A framework level solution with proper priority handling and job
>>> scheduling is what is required and that's what the context work should
>>> end up being.
>> Our Mali-C720 ISP can support up to 16 contexts, each with over a dozen
>> subdevs and capture nodes. As we imagine this will not be feasible for
>> upstreaming :) So using this framework is definitely the way we would
>> like to go. We are mainly limited by the lack of per-context graph/streams
>> configuration at this point.
>>
>>>>>> Can we get a copy of all media graphs on an i.MX95 system including
>>>>>> the ISI and the CSI-2 receiver ?
>>>> Here is an example with multiple sensors. Or do you need it in another
>>>> format ?
>>> No it's fine, thanks!
>>>
>>>> digraph board {
>>>> rankdir=TB
>>>> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 | <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7 | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000001:port5 -> n0000000f:port0 [style=bold]
>>>> n00000001:port6 -> n0000001a:port0 [style=bold]
>>>> n00000001:port7 -> n00000025:port0 [style=bold]
>>>> n00000001:port8 -> n00000030:port0 [style=bold]
>>>> n00000001:port9 -> n0000003b:port0 [style=bold]
>>>> n00000001:port10 -> n00000046:port0 [style=bold]
>>>> n00000001:port11 -> n00000051:port0 [style=bold]
>>>> n00000001:port12 -> n0000005c:port0 [style=bold]
>>>> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000000f:port1 -> n00000012 [style=bold]
>>>> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box, style=filled, fillcolor=yellow]
>>>> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000001a:port1 -> n0000001d [style=bold]
>>>> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box, style=filled, fillcolor=yellow]
>>>> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000025:port1 -> n00000028 [style=bold]
>>>> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box, style=filled, fillcolor=yellow]
>>>> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000030:port1 -> n00000033 [style=bold]
>>>> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box, style=filled, fillcolor=yellow]
>>>> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000003b:port1 -> n0000003e [style=bold]
>>>> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box, style=filled, fillcolor=yellow]
>>>> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000046:port1 -> n00000049 [style=bold]
>>>> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box, style=filled, fillcolor=yellow]
>>>> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000051:port1 -> n00000054 [style=bold]
>>>> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box, style=filled, fillcolor=yellow]
>>>> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000005c:port1 -> n0000005f [style=bold]
>>>> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box, style=filled, fillcolor=yellow]
>>>> n00000067 [label="mxc_isi.output\n", shape=box, style=filled, fillcolor=yellow]
>>>> n00000067 -> n00000001:port4 [style=bold]
>>>> n0000006e [label="{{<port0> 0} | 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000006e:port1 -> n00000001:port2 [style=bold]
>>>> n00000073 [label="{{<port0> 0} | csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000073:port1 -> n0000006e:port0 [style=bold]
>>>> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} | max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000078:port4 -> n00000073:port0 [style=dashed]
>>>> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000081:port0 -> n00000078:port0 [style=bold]
>>>> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000085:port0 -> n00000078:port1 [style=bold]
>>>> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000089:port0 -> n00000078:port2 [style=bold]
>>>> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000008d:port0 -> n00000078:port3 [style=bold]
>>>> }
>> This was an interesting point from our sides too regarding the context framework,
>> how would shared inputs be linked to independent contexts? For example, one input
>> port with 4 sensors where each is processed by a separate context.
> If the multi-context ISP operates in M2M mode, the capture and ISP
> pipelines will be disjoint (even if they're in the same media graphs).
> Linking the two will be done by userspace, through memory buffers shared
> between the pipelines.
In our ISP we don't have to operate in a pure M2M mode for multi-context.
Instead, we have a time division mode for multiple inline sensors simultaneously.
The context management unit writes incoming frames from multiple sensors to memory
buffers and automatically schedule them for processing, injecting the buffer into
the pipeline once it is available.
In the driver we just configure the context, provide internally allocated DMA buffers
and the scheduler automatically handles the rest. Of course we can get interrupts
for these events if we have use for them.
While we could do this through userspace, it doesn't make full use of the ISP's
capabilities such as its hardware scheduling. From a media graph perspective, I
think it should be considered as an inline ISP with the buffers simply acting as
temporary storage while the ISP is busy.
I guess my thought was the camera "frontend" would effectively have some shared
state across all contexts, but the outputs from this would go to per context instances.
Perhaps a similar thing would apply with this CSI-2 receiver and the ISI since they
appear to deal with multiple sensors that are then divided across their 8 contexts?
>> As a test of multi-context with duplicated media graphs, we would segregate our
>> inputs between media devices, though this is less flexible as it strictly ties
>> one sensor to a particular context.
>>
>>>>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
>>>>>> that's exactly what we're working on with the context framework :)
>>>> Ok. Then I should have a look to context framework too ...
>>> Please, I hope to be able to resume working on it sooner or later
>>> given the right use case.
>>>
>>>>>>> ... since it is not, your assumption seems very reasonable.
>>>>>>>
>>>>>>>>> - How can the user decide whether direct (csi2isp) or indirect
>>>>>>>>> (mem2mem) streaming shall be used?
>>>>>>>> That will also be part of the evaluation. From dts would be my first
>>>>>>>> option, but may prevent using both modes on same platform then.
>>>>>>> Of course this depends what the hardware is able to do, but in case the
>>>>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
>>>>>>> to solve that.
>>>>>>>
>>>>>>>>> While it is certainly OK to introduce this support only at a later
>>>>>>>>> stage, it makes sense to consider this right from the start to avoid
>>>>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
>>>>>>>>>
>>>>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
>>>>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>>>>>>>>> thoughts about that.
>>>>>>>> Is there an existing discussion thread available on this topic? I would
>>>>>>>> be very interested in following it.
>>>>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
>>>>>> It's probably time to have one :)
>>>> Good. Please loop me in ;)
>>> You are in, this is the conversation ;)
>>>
>>> It might be a good discussion point for the media summit in Nice
>>> co-located with Embedded Recipes if people with interest in the topic
>>> will going the be there.
>>>
>>> I'm also adding Anthony from ARM as I know he's going through the same
>>> inline/m2m duality you're now facing.
>> We make the issue even more complex as individual contexts can run in either
>> inline or m2m mode simultaneously... Though in our case the ISP does not
>> have any external dependencies for this like with Mali-C55 + IVC.
> Simultaneously ? Can a single ISP instance run in inline and offline
> mode simultaneously ? How does that work ?
Technically speaking the inline still require memory buffers but once configured
the ISP can run without involvement from the driver. The buffering is effectively
invisible at this point.
The context management unit facilitates this through the aformentioned hardware
scheduling. Each individual context may choose to use inline mode or M2M mode.
In inline mode, that context is "schedulable" when it's input buffer isready,
which occurs automatically once the image is fully written to memory.
In M2M mode, the context is "schedulable" when the user triggers it via SW.
>> As a side note, was there any thought into how Libcamera may support a pure m2m
>> usecase, say by passing user provided frames rather than indirectly coming from
>> a sensor? Perhaps there is already something for this that I've missed.
> https://lists.libcamera.org/pipermail/libcamera-devel/2025-December/055627.html
>
> I expect more work to be needed before we can finalize an API, as I
> think different people will have very different ideas of how this should
> work.
Ah nice thanks :)
I took a quick skim through and it seems pretty good. When I have some time
I will try pull this series to test on our side.
Thanks,
Anthony
>>>>>>>>>> This series is posted as RFC because extending the v4l2-isp interface may
>>>>>>>>>> overlap with ongoing work. If similar development already exists, I am
>>>>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the series
>>>>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>>>>>>>>> driver introduction.
>>>>>>>>>>
>>>>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>>>>>>>>> consistent with the existing style in that file.
>>>>>>>>>>
>>>>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>>>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>>>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
>>>>>>>>>> yet upstreamed.
> [snip]
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-10 12:20 ` Anthony McGivern
@ 2026-02-10 16:02 ` Laurent Pinchart
2026-02-12 8:43 ` Anthony McGivern
0 siblings, 1 reply; 49+ messages in thread
From: Laurent Pinchart @ 2026-02-10 16:02 UTC (permalink / raw)
To: Anthony McGivern
Cc: Jacopo Mondi, Antoine Bouyer, Michael Riesch, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li, mchehab, robh,
krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
On Tue, Feb 10, 2026 at 12:20:42PM +0000, Anthony McGivern wrote:
> On 10/02/2026 00:20, Laurent Pinchart wrote:
> > On Mon, Feb 09, 2026 at 01:19:43PM +0000, Anthony McGivern wrote:
> >> On 05/02/2026 09:40, Jacopo Mondi wrote:
> >>> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> >>>> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> >>>>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> >>>>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> >>>>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
> >>>>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
> >>>>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
> >
> > [snip]
> >
> >>>>>>>>> - How many media devices are registered and which driver registers it
> >>>>>>>>> or them?
> >>>>>>>>
> >>>>>>>> That will be part of the evaluation. My initial assumption is that
> >>>>>>>> neoisp would be the appropriate component to register the media device
> >>>>>>>> in this mode, since ISI is not involved, and ISI currently performs the
> >>>>>>>> registration in the M2M configuration.
> >>>>>>
> >>>>>> Isn't the ISP registering its own media graph ?
> >>>>
> >>>> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> >>>> devices of the ISI media graph.
> >>>
> >>> I suggest you do what RPi does. The mainline driver only registers one
> >>> instance and they carry a little patch downstream that implements the
> >>> for() loop where multiple instances are registered. Duplicating media graphs
> >>> is not desirable (at least in mainline) as we can have ISPs with 256
> >>> contexts, we don't want 256 media graphs.
> >>>
> >>> A framework level solution with proper priority handling and job
> >>> scheduling is what is required and that's what the context work should
> >>> end up being.
> >>
> >> Our Mali-C720 ISP can support up to 16 contexts, each with over a dozen
> >> subdevs and capture nodes. As we imagine this will not be feasible for
> >> upstreaming :) So using this framework is definitely the way we would
> >> like to go. We are mainly limited by the lack of per-context graph/streams
> >> configuration at this point.
> >>
> >>>>>> Can we get a copy of all media graphs on an i.MX95 system including
> >>>>>> the ISI and the CSI-2 receiver ?
> >>>>
> >>>> Here is an example with multiple sensors. Or do you need it in another
> >>>> format ?
> >>>
> >>> No it's fine, thanks!
> >>>
> >>>> digraph board {
> >>>> rankdir=TB
> >>>> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 | <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7 | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000001:port5 -> n0000000f:port0 [style=bold]
> >>>> n00000001:port6 -> n0000001a:port0 [style=bold]
> >>>> n00000001:port7 -> n00000025:port0 [style=bold]
> >>>> n00000001:port8 -> n00000030:port0 [style=bold]
> >>>> n00000001:port9 -> n0000003b:port0 [style=bold]
> >>>> n00000001:port10 -> n00000046:port0 [style=bold]
> >>>> n00000001:port11 -> n00000051:port0 [style=bold]
> >>>> n00000001:port12 -> n0000005c:port0 [style=bold]
> >>>> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n0000000f:port1 -> n00000012 [style=bold]
> >>>> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box, style=filled, fillcolor=yellow]
> >>>> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n0000001a:port1 -> n0000001d [style=bold]
> >>>> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box, style=filled, fillcolor=yellow]
> >>>> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000025:port1 -> n00000028 [style=bold]
> >>>> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box, style=filled, fillcolor=yellow]
> >>>> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000030:port1 -> n00000033 [style=bold]
> >>>> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box, style=filled, fillcolor=yellow]
> >>>> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n0000003b:port1 -> n0000003e [style=bold]
> >>>> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box, style=filled, fillcolor=yellow]
> >>>> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000046:port1 -> n00000049 [style=bold]
> >>>> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box, style=filled, fillcolor=yellow]
> >>>> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000051:port1 -> n00000054 [style=bold]
> >>>> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box, style=filled, fillcolor=yellow]
> >>>> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n0000005c:port1 -> n0000005f [style=bold]
> >>>> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box, style=filled, fillcolor=yellow]
> >>>> n00000067 [label="mxc_isi.output\n", shape=box, style=filled, fillcolor=yellow]
> >>>> n00000067 -> n00000001:port4 [style=bold]
> >>>> n0000006e [label="{{<port0> 0} | 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n0000006e:port1 -> n00000001:port2 [style=bold]
> >>>> n00000073 [label="{{<port0> 0} | csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000073:port1 -> n0000006e:port0 [style=bold]
> >>>> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} | max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000078:port4 -> n00000073:port0 [style=dashed]
> >>>> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000081:port0 -> n00000078:port0 [style=bold]
> >>>> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000085:port0 -> n00000078:port1 [style=bold]
> >>>> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n00000089:port0 -> n00000078:port2 [style=bold]
> >>>> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> >>>> n0000008d:port0 -> n00000078:port3 [style=bold]
> >>>> }
> >>
> >> This was an interesting point from our sides too regarding the context framework,
> >> how would shared inputs be linked to independent contexts? For example, one input
> >> port with 4 sensors where each is processed by a separate context.
> >
> > If the multi-context ISP operates in M2M mode, the capture and ISP
> > pipelines will be disjoint (even if they're in the same media graphs).
> > Linking the two will be done by userspace, through memory buffers shared
> > between the pipelines.
>
> In our ISP we don't have to operate in a pure M2M mode for multi-context.
>
> Instead, we have a time division mode for multiple inline sensors simultaneously.
> The context management unit writes incoming frames from multiple sensors to memory
> buffers and automatically schedule them for processing, injecting the buffer into
> the pipeline once it is available.
>
> In the driver we just configure the context, provide internally allocated DMA buffers
> and the scheduler automatically handles the rest. Of course we can get interrupts
> for these events if we have use for them.
OK, so this is offline mode but with hardware (or firmware) scheduling.
> While we could do this through userspace, it doesn't make full use of the ISP's
> capabilities such as its hardware scheduling. From a media graph perspective, I
> think it should be considered as an inline ISP with the buffers simply acting as
> temporary storage while the ISP is busy.
Given that userspace will still have to supply parameters for the ISP,
as well as buffers for processed images, what would be the advantage of
scheduling the raw buffers automatically ?
> I guess my thought was the camera "frontend" would effectively have some shared
> state across all contexts, but the outputs from this would go to per context instances.
> Perhaps a similar thing would apply with this CSI-2 receiver and the ISI since they
> appear to deal with multiple sensors that are then divided across their 8 contexts?
With a media graph that spans sensors, CSI-2 receivers, ISI and ISP, the
frontend part of the graph (sensors, CSI-2, ISI) would be handled with
one pipeline (in kernel terms, not a libcamera pipeline handler) and the
ISP with another pipeline. Those two pipelines would operate
independently. The ISP pipeline would make use of the multi-context API
while the frontend pipeline wouldn't.
> >> As a test of multi-context with duplicated media graphs, we would segregate our
> >> inputs between media devices, though this is less flexible as it strictly ties
> >> one sensor to a particular context.
> >>
> >>>>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> >>>>>> that's exactly what we're working on with the context framework :)
> >>>>
> >>>> Ok. Then I should have a look to context framework too ...
> >>>
> >>> Please, I hope to be able to resume working on it sooner or later
> >>> given the right use case.
> >>>
> >>>>>>> ... since it is not, your assumption seems very reasonable.
> >>>>>>>
> >>>>>>>>> - How can the user decide whether direct (csi2isp) or indirect
> >>>>>>>>> (mem2mem) streaming shall be used?
> >>>>>>>>
> >>>>>>>> That will also be part of the evaluation. From dts would be my first
> >>>>>>>> option, but may prevent using both modes on same platform then.
> >>>>>>>
> >>>>>>> Of course this depends what the hardware is able to do, but in case the
> >>>>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
> >>>>>>> to solve that.
> >>>>>>>
> >>>>>>>>> While it is certainly OK to introduce this support only at a later
> >>>>>>>>> stage, it makes sense to consider this right from the start to avoid
> >>>>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
> >>>>>>>>>
> >>>>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
> >>>>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
> >>>>>>>>> thoughts about that.
> >>>>>>>>
> >>>>>>>> Is there an existing discussion thread available on this topic? I would
> >>>>>>>> be very interested in following it.
> >>>>>>>
> >>>>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
> >>>>>>
> >>>>>> It's probably time to have one :)
> >>>>
> >>>> Good. Please loop me in ;)
> >>>
> >>> You are in, this is the conversation ;)
> >>>
> >>> It might be a good discussion point for the media summit in Nice
> >>> co-located with Embedded Recipes if people with interest in the topic
> >>> will going the be there.
> >>>
> >>> I'm also adding Anthony from ARM as I know he's going through the same
> >>> inline/m2m duality you're now facing.
> >>>
> >> We make the issue even more complex as individual contexts can run in either
> >> inline or m2m mode simultaneously... Though in our case the ISP does not
> >> have any external dependencies for this like with Mali-C55 + IVC.
> >
> > Simultaneously ? Can a single ISP instance run in inline and offline
> > mode simultaneously ? How does that work ?
>
> Technically speaking the inline still require memory buffers but once configured
> the ISP can run without involvement from the driver. The buffering is effectively
> invisible at this point.
>
> The context management unit facilitates this through the aformentioned hardware
> scheduling. Each individual context may choose to use inline mode or M2M mode.
> In inline mode, that context is "schedulable" when it's input buffer isready,
> which occurs automatically once the image is fully written to memory.
> In M2M mode, the context is "schedulable" when the user triggers it via SW.
>
> >> As a side note, was there any thought into how Libcamera may support a pure m2m
> >> usecase, say by passing user provided frames rather than indirectly coming from
> >> a sensor? Perhaps there is already something for this that I've missed.
> >
> > https://lists.libcamera.org/pipermail/libcamera-devel/2025-December/055627.html
> >
> > I expect more work to be needed before we can finalize an API, as I
> > think different people will have very different ideas of how this should
> > work.
>
> Ah nice thanks :)
>
> I took a quick skim through and it seems pretty good. When I have some time
> I will try pull this series to test on our side.
What are your use cases ?
> >>>>>>>>>> This series is posted as RFC because extending the v4l2-isp interface may
> >>>>>>>>>> overlap with ongoing work. If similar development already exists, I am
> >>>>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the series
> >>>>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
> >>>>>>>>>> driver introduction.
> >>>>>>>>>>
> >>>>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> >>>>>>>>>> consistent with the existing style in that file.
> >>>>>>>>>>
> >>>>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
> >>>>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> >>>>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
> >>>>>>>>>> yet upstreamed.
> >
> > [snip]
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-10 16:02 ` Laurent Pinchart
@ 2026-02-12 8:43 ` Anthony McGivern
0 siblings, 0 replies; 49+ messages in thread
From: Anthony McGivern @ 2026-02-12 8:43 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Jacopo Mondi, Antoine Bouyer, Michael Riesch, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li, mchehab, robh,
krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund
Hi Laurent,
On 10/02/2026 16:02, Laurent Pinchart wrote:
> On Tue, Feb 10, 2026 at 12:20:42PM +0000, Anthony McGivern wrote:
>> On 10/02/2026 00:20, Laurent Pinchart wrote:
>>> On Mon, Feb 09, 2026 at 01:19:43PM +0000, Anthony McGivern wrote:
>>>> On 05/02/2026 09:40, Jacopo Mondi wrote:
>>>>> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
>>>>>> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
>>>>>>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
>>>>>>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
>>>>>>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
>>>>>>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>>>>>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
>>> [snip]
>>>
>>>>>>>>>>> - How many media devices are registered and which driver registers it
>>>>>>>>>>> or them?
>>>>>>>>>> That will be part of the evaluation. My initial assumption is that
>>>>>>>>>> neoisp would be the appropriate component to register the media device
>>>>>>>>>> in this mode, since ISI is not involved, and ISI currently performs the
>>>>>>>>>> registration in the M2M configuration.
>>>>>>>> Isn't the ISP registering its own media graph ?
>>>>>> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
>>>>>> devices of the ISI media graph.
>>>>> I suggest you do what RPi does. The mainline driver only registers one
>>>>> instance and they carry a little patch downstream that implements the
>>>>> for() loop where multiple instances are registered. Duplicating media graphs
>>>>> is not desirable (at least in mainline) as we can have ISPs with 256
>>>>> contexts, we don't want 256 media graphs.
>>>>>
>>>>> A framework level solution with proper priority handling and job
>>>>> scheduling is what is required and that's what the context work should
>>>>> end up being.
>>>> Our Mali-C720 ISP can support up to 16 contexts, each with over a dozen
>>>> subdevs and capture nodes. As we imagine this will not be feasible for
>>>> upstreaming :) So using this framework is definitely the way we would
>>>> like to go. We are mainly limited by the lack of per-context graph/streams
>>>> configuration at this point.
>>>>
>>>>>>>> Can we get a copy of all media graphs on an i.MX95 system including
>>>>>>>> the ISI and the CSI-2 receiver ?
>>>>>> Here is an example with multiple sensors. Or do you need it in another
>>>>>> format ?
>>>>> No it's fine, thanks!
>>>>>
>>>>>> digraph board {
>>>>>> rankdir=TB
>>>>>> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 | <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7 | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000001:port5 -> n0000000f:port0 [style=bold]
>>>>>> n00000001:port6 -> n0000001a:port0 [style=bold]
>>>>>> n00000001:port7 -> n00000025:port0 [style=bold]
>>>>>> n00000001:port8 -> n00000030:port0 [style=bold]
>>>>>> n00000001:port9 -> n0000003b:port0 [style=bold]
>>>>>> n00000001:port10 -> n00000046:port0 [style=bold]
>>>>>> n00000001:port11 -> n00000051:port0 [style=bold]
>>>>>> n00000001:port12 -> n0000005c:port0 [style=bold]
>>>>>> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n0000000f:port1 -> n00000012 [style=bold]
>>>>>> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box, style=filled, fillcolor=yellow]
>>>>>> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n0000001a:port1 -> n0000001d [style=bold]
>>>>>> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box, style=filled, fillcolor=yellow]
>>>>>> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000025:port1 -> n00000028 [style=bold]
>>>>>> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box, style=filled, fillcolor=yellow]
>>>>>> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000030:port1 -> n00000033 [style=bold]
>>>>>> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box, style=filled, fillcolor=yellow]
>>>>>> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n0000003b:port1 -> n0000003e [style=bold]
>>>>>> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box, style=filled, fillcolor=yellow]
>>>>>> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000046:port1 -> n00000049 [style=bold]
>>>>>> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box, style=filled, fillcolor=yellow]
>>>>>> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000051:port1 -> n00000054 [style=bold]
>>>>>> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box, style=filled, fillcolor=yellow]
>>>>>> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n0000005c:port1 -> n0000005f [style=bold]
>>>>>> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box, style=filled, fillcolor=yellow]
>>>>>> n00000067 [label="mxc_isi.output\n", shape=box, style=filled, fillcolor=yellow]
>>>>>> n00000067 -> n00000001:port4 [style=bold]
>>>>>> n0000006e [label="{{<port0> 0} | 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n0000006e:port1 -> n00000001:port2 [style=bold]
>>>>>> n00000073 [label="{{<port0> 0} | csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000073:port1 -> n0000006e:port0 [style=bold]
>>>>>> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} | max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000078:port4 -> n00000073:port0 [style=dashed]
>>>>>> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000081:port0 -> n00000078:port0 [style=bold]
>>>>>> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000085:port0 -> n00000078:port1 [style=bold]
>>>>>> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n00000089:port0 -> n00000078:port2 [style=bold]
>>>>>> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>>>> n0000008d:port0 -> n00000078:port3 [style=bold]
>>>>>> }
>>>> This was an interesting point from our sides too regarding the context framework,
>>>> how would shared inputs be linked to independent contexts? For example, one input
>>>> port with 4 sensors where each is processed by a separate context.
>>> If the multi-context ISP operates in M2M mode, the capture and ISP
>>> pipelines will be disjoint (even if they're in the same media graphs).
>>> Linking the two will be done by userspace, through memory buffers shared
>>> between the pipelines.
>> In our ISP we don't have to operate in a pure M2M mode for multi-context.
>>
>> Instead, we have a time division mode for multiple inline sensors simultaneously.
>> The context management unit writes incoming frames from multiple sensors to memory
>> buffers and automatically schedule them for processing, injecting the buffer into
>> the pipeline once it is available.
>>
>> In the driver we just configure the context, provide internally allocated DMA buffers
>> and the scheduler automatically handles the rest. Of course we can get interrupts
>> for these events if we have use for them.
> OK, so this is offline mode but with hardware (or firmware) scheduling.
Effectively yes. As you pointed out having an inline ISP operate with multi-context and
no buffering would have to be specialised. It's more the case here that it must be
configured once, then the ISP just provides interrupts on certain events.
>
>> While we could do this through userspace, it doesn't make full use of the ISP's
>> capabilities such as its hardware scheduling. From a media graph perspective, I
>> think it should be considered as an inline ISP with the buffers simply acting as
>> temporary storage while the ISP is busy.
> Given that userspace will still have to supply parameters for the ISP,
> as well as buffers for processed images, what would be the advantage of
> scheduling the raw buffers automatically ?
It is mainly to reduce latency, since userspace parameters are written to per-context
memory regions rather than the ISP registers directly. The ISP automatically loads
the correct region in when the context starts. Effectively the IPA can be asynchronous
to the HW, though we make an assumption that the system is capable enough to run the IPA
and write the results to the context region during vertical blank as to ensure gains are
aligned with the sensor exposure.
The ISP can also still run without output video buffers, so we can still capture
statistics for frames we don't consume but maintain our IPA loop i.e. for auto exposure.
In Libcamera, the IPA loop is pretty much independent from requests, though still need to
figure out synchronising controls and metadata...
>> I guess my thought was the camera "frontend" would effectively have some shared
>> state across all contexts, but the outputs from this would go to per context instances.
>> Perhaps a similar thing would apply with this CSI-2 receiver and the ISI since they
>> appear to deal with multiple sensors that are then divided across their 8 contexts?
> With a media graph that spans sensors, CSI-2 receivers, ISI and ISP, the
> frontend part of the graph (sensors, CSI-2, ISI) would be handled with
> one pipeline (in kernel terms, not a libcamera pipeline handler) and the
> ISP with another pipeline. Those two pipelines would operate
> independently. The ISP pipeline would make use of the multi-context API
> while the frontend pipeline wouldn't.
This is one way we could go about it, and as we discussed DMA fences could
be utilized to still allow implicit HW scheduling while passing buffer from
sensor frontend to the ISP backend. Of course this introduces additional load
in waking the userspace, and potential concerns around error handling if the
input fails to capture a buffer.
One other concern I realized is our HW scheduler needs to be aware what inputs
are actually assigned to the context. With this separation in userspace that
could be difficult. Unless we make it explicit that each capture device on the
frontend ties to a specific context i.e. cap0 -> context0, etc? That may have
issues of it's own, like userspace now must know exactly which context it's using,
or potential misconfigurations not being validated and causing errors...
The other option we discussed being whether a media link could be made across
a single-context frontend and a multi-context backend, but naturally how this
may impact link validation, the APIs for interacting with this, etc. I guess
this would rely on first having media link states per context anyway.
>>>> As a test of multi-context with duplicated media graphs, we would segregate our
>>>> inputs between media devices, though this is less flexible as it strictly ties
>>>> one sensor to a particular context.
>>>>
>>>>>>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
>>>>>>>> that's exactly what we're working on with the context framework :)
>>>>>> Ok. Then I should have a look to context framework too ...
>>>>> Please, I hope to be able to resume working on it sooner or later
>>>>> given the right use case.
>>>>>
>>>>>>>>> ... since it is not, your assumption seems very reasonable.
>>>>>>>>>
>>>>>>>>>>> - How can the user decide whether direct (csi2isp) or indirect
>>>>>>>>>>> (mem2mem) streaming shall be used?
>>>>>>>>>> That will also be part of the evaluation. From dts would be my first
>>>>>>>>>> option, but may prevent using both modes on same platform then.
>>>>>>>>> Of course this depends what the hardware is able to do, but in case the
>>>>>>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
>>>>>>>>> to solve that.
>>>>>>>>>
>>>>>>>>>>> While it is certainly OK to introduce this support only at a later
>>>>>>>>>>> stage, it makes sense to consider this right from the start to avoid
>>>>>>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
>>>>>>>>>>>
>>>>>>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
>>>>>>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>>>>>>>>>>> thoughts about that.
>>>>>>>>>> Is there an existing discussion thread available on this topic? I would
>>>>>>>>>> be very interested in following it.
>>>>>>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
>>>>>>>> It's probably time to have one :)
>>>>>> Good. Please loop me in ;)
>>>>> You are in, this is the conversation ;)
>>>>>
>>>>> It might be a good discussion point for the media summit in Nice
>>>>> co-located with Embedded Recipes if people with interest in the topic
>>>>> will going the be there.
>>>>>
>>>>> I'm also adding Anthony from ARM as I know he's going through the same
>>>>> inline/m2m duality you're now facing.
>>>>>
>>>> We make the issue even more complex as individual contexts can run in either
>>>> inline or m2m mode simultaneously... Though in our case the ISP does not
>>>> have any external dependencies for this like with Mali-C55 + IVC.
>>> Simultaneously ? Can a single ISP instance run in inline and offline
>>> mode simultaneously ? How does that work ?
>> Technically speaking the inline still require memory buffers but once configured
>> the ISP can run without involvement from the driver. The buffering is effectively
>> invisible at this point.
>>
>> The context management unit facilitates this through the aformentioned hardware
>> scheduling. Each individual context may choose to use inline mode or M2M mode.
>> In inline mode, that context is "schedulable" when it's input buffer isready,
>> which occurs automatically once the image is fully written to memory.
>> In M2M mode, the context is "schedulable" when the user triggers it via SW.
>>
>>>> As a side note, was there any thought into how Libcamera may support a pure m2m
>>>> usecase, say by passing user provided frames rather than indirectly coming from
>>>> a sensor? Perhaps there is already something for this that I've missed.
>>> https://lists.libcamera.org/pipermail/libcamera-devel/2025-December/055627.html
>>>
>>> I expect more work to be needed before we can finalize an API, as I
>>> think different people will have very different ideas of how this should
>>> work.
>> Ah nice thanks :)
>>
>> I took a quick skim through and it seems pretty good. When I have some time
>> I will try pull this series to test on our side.
> What are your use cases ?
For m2m it could be cases where we interact with an external sensor running
it's own auto exposure loop. Or we may even use it for passing precaptured
sequences of frames through the ISP as part of a sensor tuning process.
In this case, we could modify the behaviour of the IPA so we only process stats
once we are aware of the next request's controls i.e. user provided sensor exposure,
rather than running the IPA on frame end.
Thanks,
Anthony
>
>>>>>>>>>>>> This series is posted as RFC because extending the v4l2-isp interface may
>>>>>>>>>>>> overlap with ongoing work. If similar development already exists, I am
>>>>>>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the series
>>>>>>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>>>>>>>>>>> driver introduction.
>>>>>>>>>>>>
>>>>>>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>>>>>>>>>>> consistent with the existing style in that file.
>>>>>>>>>>>>
>>>>>>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>>>>>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>>>>>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
>>>>>>>>>>>> yet upstreamed.
>>> [snip]
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-05 9:40 ` Jacopo Mondi
2026-02-09 13:19 ` Anthony McGivern
@ 2026-02-10 0:03 ` Laurent Pinchart
[not found] ` <cf9c2d21-fc0e-42ad-a554-b1d47549bc54@nxp.com>
2026-03-20 16:29 ` Antoine Bouyer
3 siblings, 0 replies; 49+ messages in thread
From: Laurent Pinchart @ 2026-02-10 0:03 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Antoine Bouyer, Michael Riesch, julien.vuillaumier,
alexi.birlinger, daniel.baluta, peng.fan, frank.li, mchehab, robh,
krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
On Thu, Feb 05, 2026 at 10:40:12AM +0100, Jacopo Mondi wrote:
> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> > Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> > > On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> > > > On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> > > > > On 1/28/26 09:17, Antoine Bouyer wrote:
> > > > > > On 1/26/26 10:44 AM, Michael Riesch wrote:
> > > > > > > On 1/23/26 09:09, Antoine Bouyer wrote:
> > > > > > > > Hi all,
> > > > > > > >
> > > > > > > > This RFC patch series introduces the NXP Neo Image Signal Processor (ISP)
> > > > > > > > driver, used in the NXP i.MX95 SoC and future devices in the i.MX9 family.
> > > > > > > > The series also includes updates to the generic v4l2-isp interface to
> > > > > > > > support extended statistics required by the Neo ISP.
> > > > > > > >
> > > > > > > > The Neo ISP processes one or more camera streams, converting RAW formats
> > > > > > > > into YUV or RGB outputs. Its architecture is largely influenced by the
> > > > > > > > PISP driver. The hardware supports up to eight contexts, with three sink
> > > > > > > > pads (main input, HDR input, and parameter buffers) and three source pads
> > > > > > > > (RGB output, IR output, and statistics metadata).
> > > > > > > >
> > > > > > > > At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> > > > > > > > parameter/statistics buffers are supported through the generic v4l2-isp
> > > > > > > > framework, similar to rkisp1 and Mali-C55. The driver currently supports
> > > > > > > > M2M operation; direct CSI-to-ISP streaming is not yet implemented.
> > > > > > >
> > > > > > > How do you envisage the direct CSI-to-ISP streaming shall be supported?
> > > > > >
> > > > > > At this stage, this streaming mode still needs to be evaluated on
> > > > > > neoisp. We should follow the integration model used by existing ISP
> > > > > > drivers to avoid duplicating solutions.
> > > > >
> > > > > Fair point, but I have had the impression that there are not many
> > > > > examples (if any). The rkisp1 driver, for instance, only supports inline
> > > > > mode although the HW should be able to do both.
> > > > >
> > > > > But any pointers most welcome, I won't claim I have the full overview.
> > > > >
> > > > > > Below are my initial thoughts on the specific points you raised:
> > > > > >
> > > > > > > - How shall the final media graph(s) look like?
> > > > > >
> > > > > > The media entities would remain mostly identical, except for the absence
> > > > > > of ISI. The topology would be a direct linkg from sensor->csi-
> > > > > > > formatter->neoisp.
> > > >
> > > > If support for inline mode has to be added later, the ISP will need to
> > > > be registered in the same media graph of the CSI-2 receiver to be able
> > > > to link the two, right ?
> >
> > yes correct.
> >
> > > > How do you envision to control the ISP operating mode, because I'm
> > > > afraid if you register the ISP in its own media graph, you're locking
> > > > yourself there as implementing inline mode would require a different
> > > > media topology with all the implications on the rest of the userspace
> > > > stack.
> > > >
> > > > This might not be a problem if you know that the inline vs m2m mode is
> > > > SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
> > > > other as m2m. In this case you'll likely need two pipeline handlers
> > > > in libcamera, but if that's per SoC-line maybe is acceptable. The fact
> > > > you suggests in inline mode there won't be an ISI makes me think this
> > > > actually depends on the SoC design ?
> >
> > Actually, this is not really at SoC synthesis time, neoisp HW does support
> > both modes, that is configurable. But ISP HW can run in a single mode only
> > once it is configured. Streaming mode is tightly coupled with CSI HW, then
> > ISP cannot be used in M2M mode with another sensor simultaneously.
>
> Yes, my point is trying to understand "how it is configured" and what
> your expectations are.
>
> Will the board .dts (or a camera .dtso) decide how the ISP is operated
> by defining its endpoint connections ? Assuming with the same SoC both
> inline and m2m modes are possible, without differences in the SoC
> design/integration, will users of the same board have to modify the
> .dts or load ad-hoc .dtso to decide what mode is in use ?
That's what we do on i.MX8MP, to route the CSI-2 receiver output to
either the ISI or the ISP. And it was a really bad design mistake. Let's
not repeat it: if the hardware allows both inline and offline operation,
then selecting between the two modes should be possible without changing
the device tree, without rebooting and without reloading modules. All
components must be in the same media graph. This includes the CSI-2
receiver, ISI and ISP.
> Then, the question of how the media topology will look and which
> components registers what has to be clarified.
>
> Let's try to make a taxonomy of the cases we have in mainline (or on
> their way to mainline).
>
> In the mali example I mentioned, the operating mode is selected by the
> .dtsi as Mali can be integrated either inline or in m2m mode in
> different SoCs. RZ/V2H in example, will always be m2m as it doesn't
> interface the CSI-2 receiver with the ISP but rather interfaces the
> ISP with a companion chip the performs memory access on its behalf
> (the IVC). A different design that incorporates Mali inline will
> instead have to interface the CSI-2 receiver with the ISP with
> internal busses/glue logic and will then have to described this in dts.
>
> This is fine as the ISP integration is different and then having the
> description in dts is legit.
Note that the C55 could be integrated in an SoC in a way that would
support both inline and offline modes. In that case selection of the
operation mode must be done by userspace, without changing DT.
> The ISP driver unconditionally registers an async notifier and the
> downstream component (csi-2 or IVC) will register its async subdev(s)
> which will all appear in the ISP media graph. This is possible because
> the assumption is that the CSI-2 receiver (or the companion chip)
> won't register their own media graph.
>
> The Renesas V4H example I mentioned is instead different. The ISP can
> be operated in inline and m2m, on the same SoC without any
> modification to hardware and to the dts/dtsi. It's basically a user
> choice we defer to runtime.
>
> The V4H already has a component that registers a media graph: the
> CSI-2/VIN block which is found in many SoCs of the same (and older)
> generations. The ISP is present only in some SoC, but the CSI-2/VIN is
> always there. In this case, to support both inline and m2m modes, the
> VIN registers the media device and, with the trick I pointed you to in
> Niklas' code, the ISP registers a subdev in the VIN media graph. Then
> the inline/m2m mode can be selected by media link enablement at
> run-time. Now, inline mode is not yet supported on V4H and there might
> be dragons there, but at least, both modes should be possible on the same
> SoC.
>
> On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
>
> RPi knows the only SoC where the PiPS will be found is their one. The
> ISP cannot function inline and will always be m2m. In this case, a
> dedicated media graph for the ISP is the simplest and cleanest
> solution.
>
> RkISP1 instead will always be inline only. It registers a media device
> and an async notifier, the connected CSI-2 receiver will register an
> async subdev and will be connected to the device tree endpoint of the
> ISP device node.
>
> What model is the closest one to the neoisp integration that you
> envision on NXP SoCs ?
>
> > > One small correction after some more research:
> > >
> > > we actually already have a pipeline in libcamera that supports inline
> > > and (will soon) support m2m: the mali c55 one. My take on "probably
> > > need two pipeline handlers" was not correct then.
> >
> > Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
> > time analyzing it ':) Seems we are quite aligned as per my understanding:
> > inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
> > device from Mali. Is that right ?
> >
> > > As said, Mali-C55 can be integrated inline or in m2m mode and this is
> > > decided based on the device tree endpoint connections.
> >
> > Good. Do you have an example available ?
>
> It's in mainline, but there's nothing exciting there as the assumption
> is that there will always be a connection on the first endpoint and
> the driver simply registers a notifier for the connected async subdev. If
> it's a CSI-2 receiver then we're inline. If it's a companion chip
> we're m2m.
>
> The libcamera pipeline (not upstream yet) inspects the media entity
> function of the entity connected to the ISP sink pad#0. If it's a
> CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
> operated the pipeline differently.
>
> > > So, if you know neoisp will be integrated either inline or m2m in
> > > different SoC lines, maybe deferring it to device tree is good enough
> > > at the expense of a slightly more complicated pipeline ?
> >
> > As said, SoC/ISP HW does support both modes. But I think that the selection
> > can be done in device tree too. So that after bootup, a camera will be used
> > only in 1 mode.
> >
> > > I guess this has implications on the bindings definition as well..
> >
> > Most probably yes. Can this be done as second phase once evaluation is
> > completed ?
>
> I think you should asses from the very beginning what is the planned
> integration model of the ISP in order not to corner yourself in a
> place where it will be hard to support inline without re-writing
> the driver's media device registration logic.
>
> Looking at the below media graph of CSI/ISI you should ask the question "how
> will I register the ISP subdev in the CSI-2 media graph when inline"
> and "how will I describe inline vs m2m mode if the underlying hardware
> design doesn't change?" as deferring it to the .dts might not be the
> most correct way to go in that case ?
The driver doesn't need to support all modes right away, but we need to
design the DT bindings and media graph to ensure that additional modes
can be added later without breaking backward compatibility.
> > > > However, if you plan to allow deferring inline/m2m mode selection to
> > > > the system integrators or even have it as a run-time parameter, then
> > > > you should really consider having the ISP in the same media graph as
> > > > the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
> > > > media graph, where you could select the operating mode through media link
> > > > enablement or dts endpoint connections
> > > >
> > > > Niklas (in cc) has addressed a similar situation, where inline and m2m
> > > > mode can be selected by link enablement at runtime here
> > > > https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
> > > > (see risp_cs_internal_ops)
> > > >
> > > > > OK, I thought that ISI was still around...
> > > > >
> > > > > > > - How many media devices are registered and which driver registers it
> > > > > > > or them?
> > > > > >
> > > > > > That will be part of the evaluation. My initial assumption is that
> > > > > > neoisp would be the appropriate component to register the media device
> > > > > > in this mode, since ISI is not involved, and ISI currently performs the
> > > > > > registration in the M2M configuration.
> > > >
> > > > Isn't the ISP registering its own media graph ?
> >
> > Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> > devices of the ISI media graph.
>
> I suggest you do what RPi does. The mainline driver only registers one
> instance and they carry a little patch downstream that implements the
> for() loop where multiple instances are registered. Duplicating media graphs
> is not desirable (at least in mainline) as we can have ISPs with 256
> contexts, we don't want 256 media graphs.
>
> A framework level solution with proper priority handling and job
> scheduling is what is required and that's what the context work should
> end up being.
>
> > > > Can we get a copy of all media graphs on an i.MX95 system including
> > > > the ISI and the CSI-2 receiver ?
> >
> > Here is an example with multiple sensors. Or do you need it in another
> > format ?
>
> No it's fine, thanks!
>
> > digraph board {
> > rankdir=TB
> > n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 | <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7 | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000001:port5 -> n0000000f:port0 [style=bold]
> > n00000001:port6 -> n0000001a:port0 [style=bold]
> > n00000001:port7 -> n00000025:port0 [style=bold]
> > n00000001:port8 -> n00000030:port0 [style=bold]
> > n00000001:port9 -> n0000003b:port0 [style=bold]
> > n00000001:port10 -> n00000046:port0 [style=bold]
> > n00000001:port11 -> n00000051:port0 [style=bold]
> > n00000001:port12 -> n0000005c:port0 [style=bold]
> > n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n0000000f:port1 -> n00000012 [style=bold]
> > n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box, style=filled, fillcolor=yellow]
> > n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n0000001a:port1 -> n0000001d [style=bold]
> > n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box, style=filled, fillcolor=yellow]
> > n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000025:port1 -> n00000028 [style=bold]
> > n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box, style=filled, fillcolor=yellow]
> > n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000030:port1 -> n00000033 [style=bold]
> > n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box, style=filled, fillcolor=yellow]
> > n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n0000003b:port1 -> n0000003e [style=bold]
> > n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box, style=filled, fillcolor=yellow]
> > n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000046:port1 -> n00000049 [style=bold]
> > n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box, style=filled, fillcolor=yellow]
> > n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000051:port1 -> n00000054 [style=bold]
> > n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box, style=filled, fillcolor=yellow]
> > n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n0000005c:port1 -> n0000005f [style=bold]
> > n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box, style=filled, fillcolor=yellow]
> > n00000067 [label="mxc_isi.output\n", shape=box, style=filled, fillcolor=yellow]
> > n00000067 -> n00000001:port4 [style=bold]
> > n0000006e [label="{{<port0> 0} | 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n0000006e:port1 -> n00000001:port2 [style=bold]
> > n00000073 [label="{{<port0> 0} | csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000073:port1 -> n0000006e:port0 [style=bold]
> > n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} | max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000078:port4 -> n00000073:port0 [style=dashed]
> > n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000081:port0 -> n00000078:port0 [style=bold]
> > n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000085:port0 -> n00000078:port1 [style=bold]
> > n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > n00000089:port0 -> n00000078:port2 [style=bold]
> > n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > n0000008d:port0 -> n00000078:port3 [style=bold]
> > }
> >
> > > > If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> > > > that's exactly what we're working on with the context framework :)
> > > >
> >
> > Ok. Then I should have a look to context framework too ...
>
> Please, I hope to be able to resume working on it sooner or later
> given the right use case.
>
> > > > > ... since it is not, your assumption seems very reasonable.
> > > > >
> > > > > >
> > > > > > > - How can the user decide whether direct (csi2isp) or indirect
> > > > > > > (mem2mem) streaming shall be used?
> > > > > >
> > > > > > That will also be part of the evaluation. From dts would be my first
> > > > > > option, but may prevent using both modes on same platform then.
> > > > >
> > > > > Of course this depends what the hardware is able to do, but in case the
> > > > > HW is reconfigurable easily, I doubt that device tree is a good choice
> > > > > to solve that.
> > > > >
> > > > > > > While it is certainly OK to introduce this support only at a later
> > > > > > > stage, it makes sense to consider this right from the start to avoid
> > > > > > > some nasty changes e.g. in how this hardware is exposed to user space.
> > > > > > >
> > > > > > > Also, we are facing a similiar challenge with recent Rockchip ISP
> > > > > > > hardware (RK3588, RK3576, ...) and it would be great to hear your
> > > > > > > thoughts about that.
> > > > > >
> > > > > > Is there an existing discussion thread available on this topic? I would
> > > > > > be very interested in following it.
> > > > >
> > > > > Not yet, I am afraid. But there should be one or two soon (TM) :-)
> > > >
> > > > It's probably time to have one :)
> >
> > Good. Please loop me in ;)
>
> You are in, this is the conversation ;)
>
> It might be a good discussion point for the media summit in Nice
> co-located with Embedded Recipes if people with interest in the topic
> will going the be there.
Possibly even for a whole day workshop on Monday before the media
summit.
> I'm also adding Anthony from ARM as I know he's going through the same
> inline/m2m duality you're now facing.
>
> > > > > > > > This series is posted as RFC because extending the v4l2-isp interface may
> > > > > > > > overlap with ongoing work. If similar development already exists, I am
> > > > > > > > happy to rebase or adapt the series accordingly. If preferred, the series
> > > > > > > > can also be split into two parts: the v4l2-isp rework and the Neo ISP
> > > > > > > > driver introduction.
> > > > > > > >
> > > > > > > > A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> > > > > > > > consistent with the existing style in that file.
> > > > > > > >
> > > > > > > > Testing was performed on the i.MX95 EVK using the media/next kernel in
> > > > > > > > standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> > > > > > > > using the downstream NXP kernel, as some hardware dependencies are not
> > > > > > > > yet upstreamed.
[snip]
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 49+ messages in thread[parent not found: <cf9c2d21-fc0e-42ad-a554-b1d47549bc54@nxp.com>]
* Re: [RFC v1 00/11] Add iMX95 neoisp driver
[not found] ` <cf9c2d21-fc0e-42ad-a554-b1d47549bc54@nxp.com>
@ 2026-02-23 16:52 ` Jacopo Mondi
[not found] ` <596e5efa-4fdc-45ac-a9aa-7d4a40abfd9b@nxp.com>
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-02-23 16:52 UTC (permalink / raw)
To: Julien Vuillaumier, Sakari Ailus, Hans Verkuil,
laurent.pinchart@ideasonboard.com
Cc: Jacopo Mondi, Antoine Bouyer, Michael Riesch, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
Hello Julien
On Mon, Feb 23, 2026 at 01:38:20PM +0100, Julien Vuillaumier wrote:
> Hello Jacopo,
>
> On 2/5/26 10:40, Jacopo Mondi wrote:
> > On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> > > Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> > > > On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> > > > > On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> > > > > > On 1/28/26 09:17, Antoine Bouyer wrote:
> > > > > > > On 1/26/26 10:44 AM, Michael Riesch wrote:
>
> <snip>
>
> > > > > > > > - How many media devices are registered and which driver registers it
> > > > > > > > or them?
> > > > > > >
> > > > > > > That will be part of the evaluation. My initial assumption is that
> > > > > > > neoisp would be the appropriate component to register the media device
> > > > > > > in this mode, since ISI is not involved, and ISI currently performs the
> > > > > > > registration in the M2M configuration.
> > > > >
> > > > > Isn't the ISP registering its own media graph ?
> > >
> > > Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> > > devices of the ISI media graph.
> > >
> >
> > I suggest you do what RPi does. The mainline driver only registers one
> > instance and they carry a little patch downstream that implements the
> > for() loop where multiple instances are registered. Duplicating media graphs
> > is not desirable (at least in mainline) as we can have ISPs with 256
> > contexts, we don't want 256 media graphs.
> >
> > A framework level solution with proper priority handling and job
> > scheduling is what is required and that's what the context work should
> > end up being.
> >
>
> One system use-case for the platform is the support of 8x cameras 1080p
> 30fps using m2m operation.
> Requiring a downstream patch to register multiple ISP instances in order to
> support the multi-cameras use-cases may not be the preferred option.
>
> What would be the issue with having multiple ISP instances created by the
> upstream driver?
You would be registering a media graph instance for each supported ISP
context, not per each ISP instance in the system, effectively
virtualizing access your hardware resources while losing the ability
to implement resource sharing arbitration.
By duplicating the graphs you won't be able to implement priorities
and job scheduling at the media device level. You are now time
multiplexing a single hardware resource but you've lost the single
point of control where an API to manage resources allocation can be
implemented.
As the media subsystem is also growing towards a "media device
centric" API for several reasons, including reducing the number of
ioctl required today to operate a Video4Linux2 camera, this approach
goes in the opposite direction.
Also we have today ISPs with 8 and 16 context on the market, going
forward I think it's reasonable to expect this number to grow. If we
allow 2, 8 or 16 media graphs today why not 64 or 128 tomorrow ?
> Alternatively, would it be an option to have some mean (device tree, module
> param...) to configure the number of media graph instances created by the
> driver?
Do you mean having a way to modify the driver behaviour to register
multiple media devices in case one wants to without changing the
driver code ?
If we're talking mainline, I hardly see this being accepted as a dt
property. A module parameter I'm not sure. I wouldn't like the idea
much as it would effectively allow working around a limitation instead
of trying to achieve a proper solution at the framework level, with
the result that we'll never get past the current technical debt.
You might want to check with others as well, specifically Sakari
Laurent and Hans, they might have different opinions of course.
(I've cc-ed them).
Thanks
j
>
> Thanks,
> Julien
>
> > > > >
> > > > > Can we get a copy of all media graphs on an i.MX95 system including
> > > > > the ISI and the CSI-2 receiver ?
> > >
> > > Here is an example with multiple sensors. Or do you need it in another
> > > format ?
> >
> > No it's fine, thanks!
> >
> > >
> > >
> > > digraph board {
> > > rankdir=TB
> > > n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
> > > <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
> > > | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
> > > shape=Mrecord, style=filled, fillcolor=green]
> > > n00000001:port5 -> n0000000f:port0 [style=bold]
> > > n00000001:port6 -> n0000001a:port0 [style=bold]
> > > n00000001:port7 -> n00000025:port0 [style=bold]
> > > n00000001:port8 -> n00000030:port0 [style=bold]
> > > n00000001:port9 -> n0000003b:port0 [style=bold]
> > > n00000001:port10 -> n00000046:port0 [style=bold]
> > > n00000001:port11 -> n00000051:port0 [style=bold]
> > > n00000001:port12 -> n0000005c:port0 [style=bold]
> > > n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000000f:port1 -> n00000012 [style=bold]
> > > n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000001a:port1 -> n0000001d [style=bold]
> > > n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000025:port1 -> n00000028 [style=bold]
> > > n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000030:port1 -> n00000033 [style=bold]
> > > n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000003b:port1 -> n0000003e [style=bold]
> > > n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000046:port1 -> n00000049 [style=bold]
> > > n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000051:port1 -> n00000054 [style=bold]
> > > n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000005c:port1 -> n0000005f [style=bold]
> > > n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
> > > fillcolor=yellow]
> > > n00000067 -> n00000001:port4 [style=bold]
> > > n0000006e [label="{{<port0> 0} |
> > > 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
> > > shape=Mrecord, style=filled, fillcolor=green]
> > > n0000006e:port1 -> n00000001:port2 [style=bold]
> > > n00000073 [label="{{<port0> 0} |
> > > csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
> > > style=filled, fillcolor=green]
> > > n00000073:port1 -> n0000006e:port0 [style=bold]
> > > n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
> > > max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
> > > shape=Mrecord, style=filled, fillcolor=green]
> > > n00000078:port4 -> n00000073:port0 [style=dashed]
> > > n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000081:port0 -> n00000078:port0 [style=bold]
> > > n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000085:port0 -> n00000078:port1 [style=bold]
> > > n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000089:port0 -> n00000078:port2 [style=bold]
> > > n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000008d:port0 -> n00000078:port3 [style=bold]
> > > }
> > >
> > >
> > > > >
> > > > > If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> > > > > that's exactly what we're working on with the context framework :)
> > > > >
> > >
> > > Ok. Then I should have a look to context framework too ...
> > >
> >
> > Please, I hope to be able to resume working on it sooner or later
> > given the right use case.
> >
> > > > >
> > > > > >
> > > > > > ... since it is not, your assumption seems very reasonable.
> > > > > >
> > > > > > >
> > > > > > > > - How can the user decide whether direct (csi2isp) or indirect
> > > > > > > > (mem2mem) streaming shall be used?
> > > > > > >
> > > > > > > That will also be part of the evaluation. From dts would be my first
> > > > > > > option, but may prevent using both modes on same platform then.
> > > > > >
> > > > > > Of course this depends what the hardware is able to do, but in case the
> > > > > > HW is reconfigurable easily, I doubt that device tree is a good choice
> > > > > > to solve that.
> > > > > > >
> > > > > > > >
> > > > > > > > While it is certainly OK to introduce this support only at a later
> > > > > > > > stage, it makes sense to consider this right from the start to avoid
> > > > > > > > some nasty changes e.g. in how this hardware is exposed to user space.
> > > > > > > >
> > > > > > > > Also, we are facing a similiar challenge with recent Rockchip ISP
> > > > > > > > hardware (RK3588, RK3576, ...) and it would be great to hear your
> > > > > > > > thoughts about that.
> > > > > > >
> > > > > > > Is there an existing discussion thread available on this topic? I would
> > > > > > > be very interested in following it.
> > > > > >
> > > > > > Not yet, I am afraid. But there should be one or two soon (TM) :-)
> > > > >
> > > > > It's probably time to have one :)
> > >
> > > Good. Please loop me in ;)
> >
> > You are in, this is the conversation ;)
> >
> > It might be a good discussion point for the media summit in Nice
> > co-located with Embedded Recipes if people with interest in the topic
> > will going the be there.
> >
> > I'm also adding Anthony from ARM as I know he's going through the same
> > inline/m2m duality you're now facing.
> >
> > Thanks
> > j
> >
> > >
> > > BR
> > > Antoine
> > >
> > > > >
> > > > > >
> > > > > > Thanks and regards,
> > > > > > Michael
> > > > > >
> > > > > > >
> > > > > > > Thanks
> > > > > > > Antoine
> > > > > > >
> > > > > > > >
> > > > > > > > Thanks in advance and best regards,
> > > > > > > > Michael
> > > > > > > >
> > > > > > > > >
> > > > > > > > > This series is posted as RFC because extending the v4l2-isp interface
> > > > > > > > > may
> > > > > > > > > overlap with ongoing work. If similar development already exists, I am
> > > > > > > > > happy to rebase or adapt the series accordingly. If preferred, the
> > > > > > > > > series
> > > > > > > > > can also be split into two parts: the v4l2-isp rework and the Neo ISP
> > > > > > > > > driver introduction.
> > > > > > > > >
> > > > > > > > > A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> > > > > > > > > consistent with the existing style in that file.
> > > > > > > > >
> > > > > > > > > Testing was performed on the i.MX95 EVK using the media/next kernel in
> > > > > > > > > standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> > > > > > > > > using the downstream NXP kernel, as some hardware dependencies are not
> > > > > > > > > yet upstreamed.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > > Antoine
> > > > > > > > >
> > > > > > > > > ---
> > > > > > > > > Here are v4l2-compliance test results:
> > > > > > > > >
> > > > > > > > > v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> > > > > > > > > v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
> > > > > > > > >
> > > > > > > > > Compliance test for neoisp device /dev/media0:
> > > > > > > > >
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/media0 open: OK
> > > > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Media Controller ioctls:
> > > > > > > > > test MEDIA_IOC_G_TOPOLOGY: OK
> > > > > > > > > Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> > > > > > > > > test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> > > > > > > > > test MEDIA_IOC_SETUP_LINK: OK
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video0:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04202000
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x0300000a
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000008 (8)
> > > > > > > > > Name : neoisp-input0
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000009 : 0: Source
> > > > > > > > > Link 0x0200000c: to remote pad 0x1000002 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video0 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video1:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04202000
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000010
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x0000000e (14)
> > > > > > > > > Name : neoisp-input1
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x0100000f : 0: Source
> > > > > > > > > Link 0x02000012: to remote pad 0x1000003 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video1 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video2:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x0c200000
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000016
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000014 (20)
> > > > > > > > > Name : neoisp-params
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000015 : 0: Source
> > > > > > > > > Link 0x02000018: to remote pad 0x1000004 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video2 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video3:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04201000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x0300001c
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x0000001a (26)
> > > > > > > > > Name : neoisp-frame
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x0100001b : 0: Sink
> > > > > > > > > Link 0x0200001e: from remote pad 0x1000005 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video3 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video4:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04201000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000022
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000020 (32)
> > > > > > > > > Name : neoisp-ir
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000021 : 0: Sink
> > > > > > > > > Link 0x02000024: from remote pad 0x1000006 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video4 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video5:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04a00000
> > > > > > > > > Metadata Capture
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000028
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000026 (38)
> > > > > > > > > Name : neoisp-stats
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000027 : 0: Sink
> > > > > > > > > Link 0x0200002a: from remote pad 0x1000007 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video5 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/v4l-subdev0:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x00000000
> > > > > > > > > Client Capabilities: 0x0000000000000002
> > > > > > > > > interval-uses-which Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x0300002c
> > > > > > > > > Type : V4L Sub-Device
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000001 (1)
> > > > > > > > > Name : neoisp
> > > > > > > > > Function : Image Signal Processor
> > > > > > > > > Pad 0x01000002 : 0: Sink
> > > > > > > > > Link 0x0200000c: from remote pad 0x1000009 of entity
> > > > > > > > > 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> > > > > > > > > Pad 0x01000003 : 1: Sink
> > > > > > > > > Link 0x02000012: from remote pad 0x100000f of entity
> > > > > > > > > 'neoisp-input1' (V4L2 I/O): Data
> > > > > > > > > Pad 0x01000004 : 2: Sink
> > > > > > > > > Link 0x02000018: from remote pad 0x1000015 of entity
> > > > > > > > > 'neoisp-params' (V4L2 I/O): Data, Enabled
> > > > > > > > > Pad 0x01000005 : 3: Source
> > > > > > > > > Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
> > > > > > > > > frame' (V4L2 I/O): Data, Enabled
> > > > > > > > > Pad 0x01000006 : 4: Source
> > > > > > > > > Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
> > > > > > > > > ir' (V4L2 I/O): Data
> > > > > > > > > Pad 0x01000007 : 5: Source
> > > > > > > > > Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
> > > > > > > > > stats' (V4L2 I/O): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_SUDBEV_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/v4l-subdev0 open: OK
> > > > > > > > > test VIDIOC_SUBDEV_QUERYCAP: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Sink Pad 0):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Sink Pad 1):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Sink Pad 2):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Source Pad 3):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Source Pad 4):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Source Pad 5):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> > > > > > > > > test VIDIOC_QUERYCTRL: OK
> > > > > > > > > test VIDIOC_G/S_CTRL: OK
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 1 Private Controls: 1
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
> > > > > > > > > Supported)
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK (Not Supported)
> > > > > > > > > test VIDIOC_TRY_FMT: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_FMT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK (Not Supported)
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
> > > > > > > > > 0, Warnings: 0
> > > > > > > > >
> > > > > > > > > Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
> > > > > > > > > Failed: 0, Warnings: 0
> > > > > > > > >
> > > > > > > > > ---
> > > > > > > > > Antoine Bouyer (11):
> > > > > > > > > media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> > > > > > > > > media: v4l2-isp: Add helper function to compute extended stats size
> > > > > > > > > media: Documentation: uapi: Update V4L2 ISP for extensible stats
> > > > > > > > > media: Documentation: Add NXP neoisp driver documentation
> > > > > > > > > dt-bindings: media: Add nxp neoisp support
> > > > > > > > > media: v4l2-ctrls: Add user control base for NXP neoisp controls
> > > > > > > > > media: Add meta formats supported by NXP neoisp driver
> > > > > > > > > media: uapi: Add NXP NEOISP user interface header file
> > > > > > > > > media: platform: Add NXP Neoisp Image Signal Processor
> > > > > > > > > media: platform: neoisp: Add debugfs support
> > > > > > > > > arm64: dts: freescale: imx95: Add NXP neoisp device tree node
> > > > > > > > >
> > > > > > > > > .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> > > > > > > > > .../admin-guide/media/nxp-neoisp.dot | 16 +
> > > > > > > > > .../admin-guide/media/nxp-neoisp.rst | 189 ++
> > > > > > > > > .../admin-guide/media/v4l-drivers.rst | 1 +
> > > > > > > > > .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> > > > > > > > > .../userspace-api/media/v4l/meta-formats.rst | 1 +
> > > > > > > > > .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> > > > > > > > > .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> > > > > > > > > MAINTAINERS | 9 +
> > > > > > > > > .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> > > > > > > > > arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> > > > > > > > > drivers/media/platform/nxp/Kconfig | 1 +
> > > > > > > > > drivers/media/platform/nxp/Makefile | 1 +
> > > > > > > > > drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> > > > > > > > > drivers/media/platform/nxp/neoisp/Makefile | 8 +
> > > > > > > > > drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> > > > > > > > > .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> > > > > > > > > drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> > > > > > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> > > > > > > > > include/media/v4l2-isp.h | 13 +
> > > > > > > > > include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> > > > > > > > > include/uapi/linux/media/v4l2-isp.h | 85 +
> > > > > > > > > include/uapi/linux/v4l2-controls.h | 6 +
> > > > > > > > > include/uapi/linux/videodev2.h | 6 +
> > > > > > > > > 30 files changed, 11880 insertions(+), 3 deletions(-)
> > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
> > > > > > > > > diagram.dot
> > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> > > > > > > > > create mode 100644 Documentation/devicetree/bindings/media/
> > > > > > > > > nxp,neoisp.yaml
> > > > > > > > > create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
> > > > > > > > > nxp-neoisp.rst
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> > > > > > > > > create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > >
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-02-05 9:40 ` Jacopo Mondi
` (2 preceding siblings ...)
[not found] ` <cf9c2d21-fc0e-42ad-a554-b1d47549bc54@nxp.com>
@ 2026-03-20 16:29 ` Antoine Bouyer
2026-03-23 13:18 ` Jacopo Mondi
3 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-03-20 16:29 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
Hi Jacopo
Quite some updates regarding this RFC after further analysis.
Le 05/02/2026 à 10:40, Jacopo Mondi a écrit :
>
>
> Hi Antoine
>
> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
>> Hi Jacopo
>>
>> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
>>>
>>> Hello,
>>>
>>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
>>>> Hello
>>>>
>>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
>>>>> Hi Antoine,
>>>>>
>>>>> Thanks for your response.
>>>>>
>>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
>>>>>> Hi Michael
>>>>>>
>>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>>>>>>
>>>>>>>
>>>>>>> Hi Antoine,
>>>>>>>
>>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> This RFC patch series introduces the NXP Neo Image Signal Processor
>>>>>>>> (ISP)
>>>>>>>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
>>>>>>>> family.
>>>>>>>> The series also includes updates to the generic v4l2-isp interface to
>>>>>>>> support extended statistics required by the Neo ISP.
>>>>>>>>
>>>>>>>> The Neo ISP processes one or more camera streams, converting RAW formats
>>>>>>>> into YUV or RGB outputs. Its architecture is largely influenced by the
>>>>>>>> PISP driver. The hardware supports up to eight contexts, with three sink
>>>>>>>> pads (main input, HDR input, and parameter buffers) and three source
>>>>>>>> pads
>>>>>>>> (RGB output, IR output, and statistics metadata).
>>>>>>>>
>>>>>>>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
>>>>>>>> parameter/statistics buffers are supported through the generic v4l2-isp
>>>>>>>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
>>>>>>>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
>>>>>>>
>>>>>>> How do you envisage the direct CSI-to-ISP streaming shall be supported?
>>>>>>
>>>>>> At this stage, this streaming mode still needs to be evaluated on
>>>>>> neoisp. We should follow the integration model used by existing ISP
>>>>>> drivers to avoid duplicating solutions.
>>>>>
>>>>> Fair point, but I have had the impression that there are not many
>>>>> examples (if any). The rkisp1 driver, for instance, only supports inline
>>>>> mode although the HW should be able to do both.
>>>>>
>>>>> But any pointers most welcome, I won't claim I have the full overview.
>>>>>
>>>>>>
>>>>>> Below are my initial thoughts on the specific points you raised:
>>>>>>
>>>>>>> - How shall the final media graph(s) look like?
>>>>>>
>>>>>> The media entities would remain mostly identical, except for the absence
>>>>>> of ISI. The topology would be a direct linkg from sensor->csi-
>>>>>>> formatter->neoisp.
>>>>
>>>> If support for inline mode has to be added later, the ISP will need to
>>>> be registered in the same media graph of the CSI-2 receiver to be able
>>>> to link the two, right ?
>>
>> yes correct.
>>
>>>>
>>>> How do you envision to control the ISP operating mode, because I'm
>>>> afraid if you register the ISP in its own media graph, you're locking
>>>> yourself there as implementing inline mode would require a different
>>>> media topology with all the implications on the rest of the userspace
>>>> stack.
>>>>
>>>> This might not be a problem if you know that the inline vs m2m mode is
>>>> SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
>>>> other as m2m. In this case you'll likely need two pipeline handlers
>>>> in libcamera, but if that's per SoC-line maybe is acceptable. The fact
>>>> you suggests in inline mode there won't be an ISI makes me think this
>>>> actually depends on the SoC design ?
>>
>> Actually, this is not really at SoC synthesis time, neoisp HW does support
>> both modes, that is configurable. But ISP HW can run in a single mode only
>
>> once it is configured. Streaming mode is tightly coupled with CSI HW, then
>> ISP cannot be used in M2M mode with another sensor simultaneously.
>>
>
> Yes, my point is trying to understand "how it is configured" and what
> your expectations are.
>
> Will the board .dts (or a camera .dtso) decide how the ISP is operated
> by defining its endpoint connections ? Assuming with the same SoC both
> inline and m2m modes are possible, without differences in the SoC
> design/integration, will users of the same board have to modify the
> .dts or load ad-hoc .dtso to decide what mode is in use ?
>
> Then, the question of how the media topology will look and which
> components registers what has to be clarified.
>
> Let's try to make a taxonomy of the cases we have in mainline (or on
> their way to mainline).
>
> In the mali example I mentioned, the operating mode is selected by the
> .dtsi as Mali can be integrated either inline or in m2m mode in
> different SoCs. RZ/V2H in example, will always be m2m as it doesn't
> interface the CSI-2 receiver with the ISP but rather interfaces the
> ISP with a companion chip the performs memory access on its behalf
> (the IVC). A different design that incorporates Mali inline will
> instead have to interface the CSI-2 receiver with the ISP with
> internal busses/glue logic and will then have to described this in dts.
>
> This is fine as the ISP integration is different and then having the
> description in dts is legit.
>
> The ISP driver unconditionally registers an async notifier and the
> downstream component (csi-2 or IVC) will register its async subdev(s)
> which will all appear in the ISP media graph. This is possible because
> the assumption is that the CSI-2 receiver (or the companion chip)
> won't register their own media graph.
>
> The Renesas V4H example I mentioned is instead different. The ISP can
> be operated in inline and m2m, on the same SoC without any
> modification to hardware and to the dts/dtsi. It's basically a user
> choice we defer to runtime.
>
> The V4H already has a component that registers a media graph: the
> CSI-2/VIN block which is found in many SoCs of the same (and older)
> generations. The ISP is present only in some SoC, but the CSI-2/VIN is
> always there. In this case, to support both inline and m2m modes, the
> VIN registers the media device and, with the trick I pointed you to in
> Niklas' code, the ISP registers a subdev in the VIN media graph. Then
> the inline/m2m mode can be selected by media link enablement at
> run-time. Now, inline mode is not yet supported on V4H and there might
> be dragons there, but at least, both modes should be possible on the same
> SoC.
>
> On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
>
> RPi knows the only SoC where the PiPS will be found is their one. The
> ISP cannot function inline and will always be m2m. In this case, a
> dedicated media graph for the ISP is the simplest and cleanest
> solution.
>
> RkISP1 instead will always be inline only. It registers a media device
> and an async notifier, the connected CSI-2 receiver will register an
> async subdev and will be connected to the device tree endpoint of the
> ISP device node.
>
> What model is the closest one to the neoisp integration that you
> envision on NXP SoCs ?
Then the closest model is the V4H one I believe: we both support m2m and
streaming (inline) modes on the same SoC. I tested the trick you pointed
out, and let the formatter sharing the media device (owned by ISI) to
the neo ISP, like renesas csisp does. It registers as expected, thanks
for the proposal !
I think formatter is a good candidate since it is physically connected
to ISP through a pixel link for streaming mode. Moreover, I propose to
create a dedicated pad b/w formatter and ISP and keep the one b/w
formatter and ISI as it is, so that in future we can configure the
stream format which is sent to ISP, and the one sent to ISI.
I also tested the streaming path can be added in device tree with
endpoint connections between the nodes, so that ISP can create the media
link when it registers itself to the media device.
Thus at runtime, if userspace enables this link, then neo runs in
streaming mode, otherwise m2m is used.
If another SoC in future doesn't support streaming path, the endpoints
can be removed from device tree, the ISP would stay in media graph
anyway with m2m mode only.
Do you think this is good approach ?
>
>>>
>>> One small correction after some more research:
>>>
>>> we actually already have a pipeline in libcamera that supports inline
>>> and (will soon) support m2m: the mali c55 one. My take on "probably
>>> need two pipeline handlers" was not correct then.
>>
>> Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
>> time analyzing it ':) Seems we are quite aligned as per my understanding:
>> inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
>> device from Mali. Is that right ?
>>
>>>
>>> As said, Mali-C55 can be integrated inline or in m2m mode and this is
>>> decided based on the device tree endpoint connections.
>>
>> Good. Do you have an example available ?
>
> It's in mainline, but there's nothing exciting there as the assumption
> is that there will always be a connection on the first endpoint and
> the driver simply registers a notifier for the connected async subdev. If
> it's a CSI-2 receiver then we're inline. If it's a companion chip
> we're m2m.
>
> The libcamera pipeline (not upstream yet) inspects the media entity
> function of the entity connected to the ISP sink pad#0. If it's a
> CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
> operated the pipeline differently.
>
>>
>>>
>>> So, if you know neoisp will be integrated either inline or m2m in
>>> different SoC lines, maybe deferring it to device tree is good enough
>>> at the expense of a slightly more complicated pipeline ?
>>
>> As said, SoC/ISP HW does support both modes. But I think that the selection
>> can be done in device tree too. So that after bootup, a camera will be used
>> only in 1 mode.
>>
>>>
>>> I guess this has implications on the bindings definition as well..
>>
>> Most probably yes. Can this be done as second phase once evaluation is
>> completed ?
>>
>
> I think you should asses from the very beginning what is the planned
> integration model of the ISP in order not to corner yourself in a
> place where it will be hard to support inline without re-writing
> the driver's media device registration logic.
>
> Looking at the below media graph of CSI/ISI you should ask the question "how
> will I register the ISP subdev in the CSI-2 media graph when inline"
> and "how will I describe inline vs m2m mode if the underlying hardware
> design doesn't change?" as deferring it to the .dts might not be the
> most correct way to go in that case ?
So I think we are aligned now: one media graph from the beginning for
supporting both modes, even if first mainline version only supports m2m.
Would that be ok ?
>
>>>
>>>>
>>>> However, if you plan to allow deferring inline/m2m mode selection to
>>>> the system integrators or even have it as a run-time parameter, then
>>>> you should really consider having the ISP in the same media graph as
>>>> the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
>>>> media graph, where you could select the operating mode through media link
>>>> enablement or dts endpoint connections
>>>>
>>>> Niklas (in cc) has addressed a similar situation, where inline and m2m
>>>> mode can be selected by link enablement at runtime here
>>>> https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
>>>> (see risp_cs_internal_ops)
>>>>
>>>>>
>>>>> OK, I thought that ISI was still around...
>>>>>
>>>>>>
>>>>>>> - How many media devices are registered and which driver registers it
>>>>>>> or them?
>>>>>>
>>>>>> That will be part of the evaluation. My initial assumption is that
>>>>>> neoisp would be the appropriate component to register the media device
>>>>>> in this mode, since ISI is not involved, and ISI currently performs the
>>>>>> registration in the M2M configuration.
>>>>
>>>> Isn't the ISP registering its own media graph ?
>>
>> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
>> devices of the ISI media graph.
>>
>
> I suggest you do what RPi does. The mainline driver only registers one
> instance and they carry a little patch downstream that implements the
> for() loop where multiple instances are registered. Duplicating media graphs
> is not desirable (at least in mainline) as we can have ISPs with 256
> contexts, we don't want 256 media graphs.
Ok. Will do same approach then: 1 neoisp instance on mainline +
downstream patch to create other instances (x8), all in same media graph.
>
> A framework level solution with proper priority handling and job
> scheduling is what is required and that's what the context work should
> end up being.>
>
>>>>
>>>> Can we get a copy of all media graphs on an i.MX95 system including
>>>> the ISI and the CSI-2 receiver ?
>>
>> Here is an example with multiple sensors. Or do you need it in another
>> format ?
>
> No it's fine, thanks!
>
>>
>>
>> digraph board {
>> rankdir=TB
>> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
>> <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
>> | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
>> shape=Mrecord, style=filled, fillcolor=green]
>> n00000001:port5 -> n0000000f:port0 [style=bold]
>> n00000001:port6 -> n0000001a:port0 [style=bold]
>> n00000001:port7 -> n00000025:port0 [style=bold]
>> n00000001:port8 -> n00000030:port0 [style=bold]
>> n00000001:port9 -> n0000003b:port0 [style=bold]
>> n00000001:port10 -> n00000046:port0 [style=bold]
>> n00000001:port11 -> n00000051:port0 [style=bold]
>> n00000001:port12 -> n0000005c:port0 [style=bold]
>> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000000f:port1 -> n00000012 [style=bold]
>> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
>> style=filled, fillcolor=yellow]
>> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000001a:port1 -> n0000001d [style=bold]
>> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000025:port1 -> n00000028 [style=bold]
>> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000030:port1 -> n00000033 [style=bold]
>> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
>> style=filled, fillcolor=yellow]
>> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000003b:port1 -> n0000003e [style=bold]
>> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000046:port1 -> n00000049 [style=bold]
>> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000051:port1 -> n00000054 [style=bold]
>> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
>> style=filled, fillcolor=yellow]
>> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000005c:port1 -> n0000005f [style=bold]
>> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
>> style=filled, fillcolor=yellow]
>> n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
>> fillcolor=yellow]
>> n00000067 -> n00000001:port4 [style=bold]
>> n0000006e [label="{{<port0> 0} |
>> 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
>> shape=Mrecord, style=filled, fillcolor=green]
>> n0000006e:port1 -> n00000001:port2 [style=bold]
>> n00000073 [label="{{<port0> 0} |
>> csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
>> style=filled, fillcolor=green]
>> n00000073:port1 -> n0000006e:port0 [style=bold]
>> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
>> max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
>> shape=Mrecord, style=filled, fillcolor=green]
>> n00000078:port4 -> n00000073:port0 [style=dashed]
>> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000081:port0 -> n00000078:port0 [style=bold]
>> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000085:port0 -> n00000078:port1 [style=bold]
>> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n00000089:port0 -> n00000078:port2 [style=bold]
>> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>> n0000008d:port0 -> n00000078:port3 [style=bold]
>> }
>>
>>
>>>>
>>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
>>>> that's exactly what we're working on with the context framework :)
>>>>
>>
>> Ok. Then I should have a look to context framework too ...
>>
>
> Please, I hope to be able to resume working on it sooner or later
> given the right use case.
Ok. Will continue monitoring the multi context work. Seems to be a nice
feature indeed. But as impact on userspace is more significant, that can
be done as a second step I guess, and will keep the multi instance
downstream patch meanwhile.
>
>>>>
>>>>>
>>>>> ... since it is not, your assumption seems very reasonable.
>>>>>
>>>>>>
>>>>>>> - How can the user decide whether direct (csi2isp) or indirect
>>>>>>> (mem2mem) streaming shall be used?
>>>>>>
>>>>>> That will also be part of the evaluation. From dts would be my first
>>>>>> option, but may prevent using both modes on same platform then.
>>>>>
>>>>> Of course this depends what the hardware is able to do, but in case the
>>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
>>>>> to solve that.
>>>>>>
>>>>>>>
>>>>>>> While it is certainly OK to introduce this support only at a later
>>>>>>> stage, it makes sense to consider this right from the start to avoid
>>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
>>>>>>>
>>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
>>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>>>>>>> thoughts about that.
>>>>>>
>>>>>> Is there an existing discussion thread available on this topic? I would
>>>>>> be very interested in following it.
>>>>>
>>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
>>>>
>>>> It's probably time to have one :)
>>
>> Good. Please loop me in ;)
>
> You are in, this is the conversation ;)
>
> It might be a good discussion point for the media summit in Nice
> co-located with Embedded Recipes if people with interest in the topic
> will going the be there.
Great ! Will try to join then.
BR
Antoine
>
> I'm also adding Anthony from ARM as I know he's going through the same
> inline/m2m duality you're now facing.
>
> Thanks
> j
>
>>
>> BR
>> Antoine
>>
>>>>
>>>>>
>>>>> Thanks and regards,
>>>>> Michael
>>>>>
>>>>>>
>>>>>> Thanks
>>>>>> Antoine
>>>>>>
>>>>>>>
>>>>>>> Thanks in advance and best regards,
>>>>>>> Michael
>>>>>>>
>>>>>>>>
>>>>>>>> This series is posted as RFC because extending the v4l2-isp interface
>>>>>>>> may
>>>>>>>> overlap with ongoing work. If similar development already exists, I am
>>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the
>>>>>>>> series
>>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>>>>>>> driver introduction.
>>>>>>>>
>>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>>>>>>> consistent with the existing style in that file.
>>>>>>>>
>>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
>>>>>>>> yet upstreamed.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Antoine
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Here are v4l2-compliance test results:
>>>>>>>>
>>>>>>>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
>>>>>>>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>>>>>>>>
>>>>>>>> Compliance test for neoisp device /dev/media0:
>>>>>>>>
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/media0 open: OK
>>>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Media Controller ioctls:
>>>>>>>> test MEDIA_IOC_G_TOPOLOGY: OK
>>>>>>>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
>>>>>>>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>>>>>>>> test MEDIA_IOC_SETUP_LINK: OK
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video0:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04202000
>>>>>>>> Video Output Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x0300000a
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000008 (8)
>>>>>>>> Name : neoisp-input0
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000009 : 0: Source
>>>>>>>> Link 0x0200000c: to remote pad 0x1000002 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video0 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video1:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04202000
>>>>>>>> Video Output Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000010
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x0000000e (14)
>>>>>>>> Name : neoisp-input1
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x0100000f : 0: Source
>>>>>>>> Link 0x02000012: to remote pad 0x1000003 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video1 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video2:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x0c200000
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000016
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000014 (20)
>>>>>>>> Name : neoisp-params
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000015 : 0: Source
>>>>>>>> Link 0x02000018: to remote pad 0x1000004 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video2 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video3:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04201000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x0300001c
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x0000001a (26)
>>>>>>>> Name : neoisp-frame
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x0100001b : 0: Sink
>>>>>>>> Link 0x0200001e: from remote pad 0x1000005 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video3 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video4:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04201000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000022
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000020 (32)
>>>>>>>> Name : neoisp-ir
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000021 : 0: Sink
>>>>>>>> Link 0x02000024: from remote pad 0x1000006 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video4 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/video5:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Card type : neoisp
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>> Video Capture Multiplanar
>>>>>>>> Video Output Multiplanar
>>>>>>>> Metadata Capture
>>>>>>>> Metadata Output
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Device Capabilities
>>>>>>>> Device Caps : 0x04a00000
>>>>>>>> Metadata Capture
>>>>>>>> Streaming
>>>>>>>> Extended Pix Format
>>>>>>>> Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x03000028
>>>>>>>> Type : V4L Video
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000026 (38)
>>>>>>>> Name : neoisp-stats
>>>>>>>> Function : V4L2 I/O
>>>>>>>> Pad 0x01000027 : 0: Sink
>>>>>>>> Link 0x0200002a: from remote pad 0x1000007 of entity
>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/video5 open: OK
>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
>>>>>>>> Warnings: 0
>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>> Compliance test for neoisp device /dev/v4l-subdev0:
>>>>>>>>
>>>>>>>> Driver Info:
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Capabilities : 0x00000000
>>>>>>>> Client Capabilities: 0x0000000000000002
>>>>>>>> interval-uses-which Media Driver Info:
>>>>>>>> Driver name : neoisp
>>>>>>>> Model : neoisp
>>>>>>>> Serial :
>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>> Media version : 6.19.0
>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>> Driver version : 6.19.0
>>>>>>>> Interface Info:
>>>>>>>> ID : 0x0300002c
>>>>>>>> Type : V4L Sub-Device
>>>>>>>> Entity Info:
>>>>>>>> ID : 0x00000001 (1)
>>>>>>>> Name : neoisp
>>>>>>>> Function : Image Signal Processor
>>>>>>>> Pad 0x01000002 : 0: Sink
>>>>>>>> Link 0x0200000c: from remote pad 0x1000009 of entity
>>>>>>>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
>>>>>>>> Pad 0x01000003 : 1: Sink
>>>>>>>> Link 0x02000012: from remote pad 0x100000f of entity
>>>>>>>> 'neoisp-input1' (V4L2 I/O): Data
>>>>>>>> Pad 0x01000004 : 2: Sink
>>>>>>>> Link 0x02000018: from remote pad 0x1000015 of entity
>>>>>>>> 'neoisp-params' (V4L2 I/O): Data, Enabled
>>>>>>>> Pad 0x01000005 : 3: Source
>>>>>>>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
>>>>>>>> frame' (V4L2 I/O): Data, Enabled
>>>>>>>> Pad 0x01000006 : 4: Source
>>>>>>>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
>>>>>>>> ir' (V4L2 I/O): Data
>>>>>>>> Pad 0x01000007 : 5: Source
>>>>>>>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
>>>>>>>> stats' (V4L2 I/O): Data, Enabled
>>>>>>>>
>>>>>>>> Required ioctls:
>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>> test VIDIOC_SUDBEV_QUERYCAP: OK
>>>>>>>> test invalid ioctls: OK
>>>>>>>>
>>>>>>>> Allow for multiple opens:
>>>>>>>> test second /dev/v4l-subdev0 open: OK
>>>>>>>> test VIDIOC_SUBDEV_QUERYCAP: OK
>>>>>>>> test for unlimited opens: OK
>>>>>>>>
>>>>>>>> Debug ioctls:
>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>
>>>>>>>> Input ioctls:
>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>
>>>>>>>> Output ioctls:
>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>
>>>>>>>> Input/Output configuration ioctls:
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Sink Pad 0):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Sink Pad 1):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Sink Pad 2):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Source Pad 3):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Source Pad 4):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Sub-Device ioctls (Source Pad 5):
>>>>>>>> Try Stream 0
>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> Active Stream 0
>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>
>>>>>>>> Control ioctls:
>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>>>>>>> test VIDIOC_QUERYCTRL: OK
>>>>>>>> test VIDIOC_G/S_CTRL: OK
>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>> Standard Controls: 1 Private Controls: 1
>>>>>>>>
>>>>>>>> Format ioctls:
>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
>>>>>>>> Supported)
>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>> test VIDIOC_G_FMT: OK (Not Supported)
>>>>>>>> test VIDIOC_TRY_FMT: OK (Not Supported)
>>>>>>>> test VIDIOC_S_FMT: OK (Not Supported)
>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>
>>>>>>>> Codec ioctls:
>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>
>>>>>>>> Buffer ioctls:
>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>> test VIDIOC_EXPBUF: OK (Not Supported)
>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>
>>>>>>>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
>>>>>>>> 0, Warnings: 0
>>>>>>>>
>>>>>>>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
>>>>>>>> Failed: 0, Warnings: 0
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Antoine Bouyer (11):
>>>>>>>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
>>>>>>>> media: v4l2-isp: Add helper function to compute extended stats size
>>>>>>>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
>>>>>>>> media: Documentation: Add NXP neoisp driver documentation
>>>>>>>> dt-bindings: media: Add nxp neoisp support
>>>>>>>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
>>>>>>>> media: Add meta formats supported by NXP neoisp driver
>>>>>>>> media: uapi: Add NXP NEOISP user interface header file
>>>>>>>> media: platform: Add NXP Neoisp Image Signal Processor
>>>>>>>> media: platform: neoisp: Add debugfs support
>>>>>>>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>>>>>>>>
>>>>>>>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
>>>>>>>> .../admin-guide/media/nxp-neoisp.dot | 16 +
>>>>>>>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
>>>>>>>> .../admin-guide/media/v4l-drivers.rst | 1 +
>>>>>>>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
>>>>>>>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
>>>>>>>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
>>>>>>>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
>>>>>>>> MAINTAINERS | 9 +
>>>>>>>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
>>>>>>>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
>>>>>>>> drivers/media/platform/nxp/Kconfig | 1 +
>>>>>>>> drivers/media/platform/nxp/Makefile | 1 +
>>>>>>>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
>>>>>>>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
>>>>>>>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
>>>>>>>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
>>>>>>>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
>>>>>>>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
>>>>>>>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
>>>>>>>> include/media/v4l2-isp.h | 13 +
>>>>>>>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
>>>>>>>> include/uapi/linux/media/v4l2-isp.h | 85 +
>>>>>>>> include/uapi/linux/v4l2-controls.h | 6 +
>>>>>>>> include/uapi/linux/videodev2.h | 6 +
>>>>>>>> 30 files changed, 11880 insertions(+), 3 deletions(-)
>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
>>>>>>>> diagram.dot
>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
>>>>>>>> create mode 100644 Documentation/devicetree/bindings/media/
>>>>>>>> nxp,neoisp.yaml
>>>>>>>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
>>>>>>>> nxp-neoisp.rst
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
>>>>>>>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-03-20 16:29 ` Antoine Bouyer
@ 2026-03-23 13:18 ` Jacopo Mondi
2026-03-24 17:44 ` Antoine Bouyer
0 siblings, 1 reply; 49+ messages in thread
From: Jacopo Mondi @ 2026-03-23 13:18 UTC (permalink / raw)
To: Antoine Bouyer
Cc: Jacopo Mondi, Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
Hi Antoine
On Fri, Mar 20, 2026 at 05:29:44PM +0100, Antoine Bouyer wrote:
> Hi Jacopo
>
> Quite some updates regarding this RFC after further analysis.
>
> Le 05/02/2026 à 10:40, Jacopo Mondi a écrit :
> >
> >
> > Hi Antoine
> >
> > On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> > > Hi Jacopo
> > >
> > > Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> > > >
> > > > Hello,
> > > >
> > > > On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> > > > > Hello
> > > > >
> > > > > On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> > > > > > Hi Antoine,
> > > > > >
> > > > > > Thanks for your response.
> > > > > >
> > > > > > On 1/28/26 09:17, Antoine Bouyer wrote:
> > > > > > > Hi Michael
> > > > > > >
> > > > > > > On 1/26/26 10:44 AM, Michael Riesch wrote:
> > > > > > > >
> > > > > > > >
> > > > > > > > Hi Antoine,
> > > > > > > >
> > > > > > > > On 1/23/26 09:09, Antoine Bouyer wrote:
> > > > > > > > > Hi all,
> > > > > > > > >
> > > > > > > > > This RFC patch series introduces the NXP Neo Image Signal Processor
> > > > > > > > > (ISP)
> > > > > > > > > driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
> > > > > > > > > family.
> > > > > > > > > The series also includes updates to the generic v4l2-isp interface to
> > > > > > > > > support extended statistics required by the Neo ISP.
> > > > > > > > >
> > > > > > > > > The Neo ISP processes one or more camera streams, converting RAW formats
> > > > > > > > > into YUV or RGB outputs. Its architecture is largely influenced by the
> > > > > > > > > PISP driver. The hardware supports up to eight contexts, with three sink
> > > > > > > > > pads (main input, HDR input, and parameter buffers) and three source
> > > > > > > > > pads
> > > > > > > > > (RGB output, IR output, and statistics metadata).
> > > > > > > > >
> > > > > > > > > At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> > > > > > > > > parameter/statistics buffers are supported through the generic v4l2-isp
> > > > > > > > > framework, similar to rkisp1 and Mali-C55. The driver currently supports
> > > > > > > > > M2M operation; direct CSI-to-ISP streaming is not yet implemented.
> > > > > > > >
> > > > > > > > How do you envisage the direct CSI-to-ISP streaming shall be supported?
> > > > > > >
> > > > > > > At this stage, this streaming mode still needs to be evaluated on
> > > > > > > neoisp. We should follow the integration model used by existing ISP
> > > > > > > drivers to avoid duplicating solutions.
> > > > > >
> > > > > > Fair point, but I have had the impression that there are not many
> > > > > > examples (if any). The rkisp1 driver, for instance, only supports inline
> > > > > > mode although the HW should be able to do both.
> > > > > >
> > > > > > But any pointers most welcome, I won't claim I have the full overview.
> > > > > >
> > > > > > >
> > > > > > > Below are my initial thoughts on the specific points you raised:
> > > > > > >
> > > > > > > > - How shall the final media graph(s) look like?
> > > > > > >
> > > > > > > The media entities would remain mostly identical, except for the absence
> > > > > > > of ISI. The topology would be a direct linkg from sensor->csi-
> > > > > > > > formatter->neoisp.
> > > > >
> > > > > If support for inline mode has to be added later, the ISP will need to
> > > > > be registered in the same media graph of the CSI-2 receiver to be able
> > > > > to link the two, right ?
> > >
> > > yes correct.
> > >
> > > > >
> > > > > How do you envision to control the ISP operating mode, because I'm
> > > > > afraid if you register the ISP in its own media graph, you're locking
> > > > > yourself there as implementing inline mode would require a different
> > > > > media topology with all the implications on the rest of the userspace
> > > > > stack.
> > > > >
> > > > > This might not be a problem if you know that the inline vs m2m mode is
> > > > > SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
> > > > > other as m2m. In this case you'll likely need two pipeline handlers
> > > > > in libcamera, but if that's per SoC-line maybe is acceptable. The fact
> > > > > you suggests in inline mode there won't be an ISI makes me think this
> > > > > actually depends on the SoC design ?
> > >
> > > Actually, this is not really at SoC synthesis time, neoisp HW does support
> > > both modes, that is configurable. But ISP HW can run in a single mode only
> >
> > > once it is configured. Streaming mode is tightly coupled with CSI HW, then
> > > ISP cannot be used in M2M mode with another sensor simultaneously.
> > >
> >
> > Yes, my point is trying to understand "how it is configured" and what
> > your expectations are.
> >
> > Will the board .dts (or a camera .dtso) decide how the ISP is operated
> > by defining its endpoint connections ? Assuming with the same SoC both
> > inline and m2m modes are possible, without differences in the SoC
> > design/integration, will users of the same board have to modify the
> > .dts or load ad-hoc .dtso to decide what mode is in use ?
> >
> > Then, the question of how the media topology will look and which
> > components registers what has to be clarified.
> >
> > Let's try to make a taxonomy of the cases we have in mainline (or on
> > their way to mainline).
> >
> > In the mali example I mentioned, the operating mode is selected by the
> > .dtsi as Mali can be integrated either inline or in m2m mode in
> > different SoCs. RZ/V2H in example, will always be m2m as it doesn't
> > interface the CSI-2 receiver with the ISP but rather interfaces the
> > ISP with a companion chip the performs memory access on its behalf
> > (the IVC). A different design that incorporates Mali inline will
> > instead have to interface the CSI-2 receiver with the ISP with
> > internal busses/glue logic and will then have to described this in dts.
> >
> > This is fine as the ISP integration is different and then having the
> > description in dts is legit.
> >
> > The ISP driver unconditionally registers an async notifier and the
> > downstream component (csi-2 or IVC) will register its async subdev(s)
> > which will all appear in the ISP media graph. This is possible because
> > the assumption is that the CSI-2 receiver (or the companion chip)
> > won't register their own media graph.
> >
> > The Renesas V4H example I mentioned is instead different. The ISP can
> > be operated in inline and m2m, on the same SoC without any
> > modification to hardware and to the dts/dtsi. It's basically a user
> > choice we defer to runtime.
> >
> > The V4H already has a component that registers a media graph: the
> > CSI-2/VIN block which is found in many SoCs of the same (and older)
> > generations. The ISP is present only in some SoC, but the CSI-2/VIN is
> > always there. In this case, to support both inline and m2m modes, the
> > VIN registers the media device and, with the trick I pointed you to in
> > Niklas' code, the ISP registers a subdev in the VIN media graph. Then
> > the inline/m2m mode can be selected by media link enablement at
> > run-time. Now, inline mode is not yet supported on V4H and there might
> > be dragons there, but at least, both modes should be possible on the same
> > SoC.
> >
> > On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
> >
> > RPi knows the only SoC where the PiPS will be found is their one. The
> > ISP cannot function inline and will always be m2m. In this case, a
> > dedicated media graph for the ISP is the simplest and cleanest
> > solution.
> >
> > RkISP1 instead will always be inline only. It registers a media device
> > and an async notifier, the connected CSI-2 receiver will register an
> > async subdev and will be connected to the device tree endpoint of the
> > ISP device node.
> >
> > What model is the closest one to the neoisp integration that you
> > envision on NXP SoCs ?
>
> Then the closest model is the V4H one I believe: we both support m2m and
> streaming (inline) modes on the same SoC. I tested the trick you pointed
> out, and let the formatter sharing the media device (owned by ISI) to the
> neo ISP, like renesas csisp does. It registers as expected, thanks for the
> proposal !
>
> I think formatter is a good candidate since it is physically connected to
> ISP through a pixel link for streaming mode. Moreover, I propose to create a
> dedicated pad b/w formatter and ISP and keep the one b/w formatter and ISI
> as it is, so that in future we can configure the stream format which is sent
> to ISP, and the one sent to ISI.
So, if I look at the ISI media graph you shared earlier in the thread,
the formatter will gain one source pad to be optionally connected to
the ISP, while the existing one that connectes to the crossbar will
stay as it is today ?
>
> I also tested the streaming path can be added in device tree with endpoint
> connections between the nodes, so that ISP can create the media link when it
> registers itself to the media device.
I think this is fine if there actually is a data path between the
formatter and the ISP as you have suggested.
>
> Thus at runtime, if userspace enables this link, then neo runs in streaming
> mode, otherwise m2m is used.
So if we have an ISI, the ISP can be operated in m2m or inline based
on run-time link enablement, right ?
>
> If another SoC in future doesn't support streaming path, the endpoints can
> be removed from device tree, the ISP would stay in media graph anyway with
> m2m mode only.
Nice!
Do you envision a streaming mode only design, where there is no ISI
and the ISP has to register the media device itself ?
>
> Do you think this is good approach ?
>
Certainly so! Thanks for the effort!
> >
> > > >
> > > > One small correction after some more research:
> > > >
> > > > we actually already have a pipeline in libcamera that supports inline
> > > > and (will soon) support m2m: the mali c55 one. My take on "probably
> > > > need two pipeline handlers" was not correct then.
> > >
> > > Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
> > > time analyzing it ':) Seems we are quite aligned as per my understanding:
> > > inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
> > > device from Mali. Is that right ?
> > >
> > > >
> > > > As said, Mali-C55 can be integrated inline or in m2m mode and this is
> > > > decided based on the device tree endpoint connections.
> > >
> > > Good. Do you have an example available ?
> >
> > It's in mainline, but there's nothing exciting there as the assumption
> > is that there will always be a connection on the first endpoint and
> > the driver simply registers a notifier for the connected async subdev. If
> > it's a CSI-2 receiver then we're inline. If it's a companion chip
> > we're m2m.
> >
> > The libcamera pipeline (not upstream yet) inspects the media entity
> > function of the entity connected to the ISP sink pad#0. If it's a
> > CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
> > operated the pipeline differently.
> >
> > >
> > > >
> > > > So, if you know neoisp will be integrated either inline or m2m in
> > > > different SoC lines, maybe deferring it to device tree is good enough
> > > > at the expense of a slightly more complicated pipeline ?
> > >
> > > As said, SoC/ISP HW does support both modes. But I think that the selection
> > > can be done in device tree too. So that after bootup, a camera will be used
> > > only in 1 mode.
> > >
> > > >
> > > > I guess this has implications on the bindings definition as well..
> > >
> > > Most probably yes. Can this be done as second phase once evaluation is
> > > completed ?
> > >
> >
> > I think you should asses from the very beginning what is the planned
> > integration model of the ISP in order not to corner yourself in a
> > place where it will be hard to support inline without re-writing
> > the driver's media device registration logic.
> >
> > Looking at the below media graph of CSI/ISI you should ask the question "how
> > will I register the ISP subdev in the CSI-2 media graph when inline"
> > and "how will I describe inline vs m2m mode if the underlying hardware
> > design doesn't change?" as deferring it to the .dts might not be the
> > most correct way to go in that case ?
>
> So I think we are aligned now: one media graph from the beginning for
> supporting both modes, even if first mainline version only supports m2m.
> Would that be ok ?
>
Yes!
Let's only just clarify if there will ever be a mode where there is no
ISI as in that case I think we need to clarify who will register the
media graph and the async notifiers..
> >
> > > >
> > > > >
> > > > > However, if you plan to allow deferring inline/m2m mode selection to
> > > > > the system integrators or even have it as a run-time parameter, then
> > > > > you should really consider having the ISP in the same media graph as
> > > > > the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
> > > > > media graph, where you could select the operating mode through media link
> > > > > enablement or dts endpoint connections
> > > > >
> > > > > Niklas (in cc) has addressed a similar situation, where inline and m2m
> > > > > mode can be selected by link enablement at runtime here
> > > > > https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
> > > > > (see risp_cs_internal_ops)
> > > > >
> > > > > >
> > > > > > OK, I thought that ISI was still around...
> > > > > >
> > > > > > >
> > > > > > > > - How many media devices are registered and which driver registers it
> > > > > > > > or them?
> > > > > > >
> > > > > > > That will be part of the evaluation. My initial assumption is that
> > > > > > > neoisp would be the appropriate component to register the media device
> > > > > > > in this mode, since ISI is not involved, and ISI currently performs the
> > > > > > > registration in the M2M configuration.
> > > > >
> > > > > Isn't the ISP registering its own media graph ?
> > >
> > > Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> > > devices of the ISI media graph.
> > >
> >
> > I suggest you do what RPi does. The mainline driver only registers one
> > instance and they carry a little patch downstream that implements the
> > for() loop where multiple instances are registered. Duplicating media graphs
> > is not desirable (at least in mainline) as we can have ISPs with 256
> > contexts, we don't want 256 media graphs.
>
> Ok. Will do same approach then: 1 neoisp instance on mainline + downstream
> patch to create other instances (x8), all in same media graph.
Thank you. Let's work on a proper solution and then the downstream
patch will be dropped!
>
> >
> > A framework level solution with proper priority handling and job
> > scheduling is what is required and that's what the context work should
> > end up being.>
> >
> > > > >
> > > > > Can we get a copy of all media graphs on an i.MX95 system including
> > > > > the ISI and the CSI-2 receiver ?
> > >
> > > Here is an example with multiple sensors. Or do you need it in another
> > > format ?
> >
> > No it's fine, thanks!
> >
> > >
> > >
> > > digraph board {
> > > rankdir=TB
> > > n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
> > > <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
> > > | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
> > > shape=Mrecord, style=filled, fillcolor=green]
> > > n00000001:port5 -> n0000000f:port0 [style=bold]
> > > n00000001:port6 -> n0000001a:port0 [style=bold]
> > > n00000001:port7 -> n00000025:port0 [style=bold]
> > > n00000001:port8 -> n00000030:port0 [style=bold]
> > > n00000001:port9 -> n0000003b:port0 [style=bold]
> > > n00000001:port10 -> n00000046:port0 [style=bold]
> > > n00000001:port11 -> n00000051:port0 [style=bold]
> > > n00000001:port12 -> n0000005c:port0 [style=bold]
> > > n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000000f:port1 -> n00000012 [style=bold]
> > > n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000001a:port1 -> n0000001d [style=bold]
> > > n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000025:port1 -> n00000028 [style=bold]
> > > n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000030:port1 -> n00000033 [style=bold]
> > > n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000003b:port1 -> n0000003e [style=bold]
> > > n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000046:port1 -> n00000049 [style=bold]
> > > n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000051:port1 -> n00000054 [style=bold]
> > > n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
> > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000005c:port1 -> n0000005f [style=bold]
> > > n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
> > > style=filled, fillcolor=yellow]
> > > n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
> > > fillcolor=yellow]
> > > n00000067 -> n00000001:port4 [style=bold]
> > > n0000006e [label="{{<port0> 0} |
> > > 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
> > > shape=Mrecord, style=filled, fillcolor=green]
> > > n0000006e:port1 -> n00000001:port2 [style=bold]
> > > n00000073 [label="{{<port0> 0} |
> > > csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
> > > style=filled, fillcolor=green]
> > > n00000073:port1 -> n0000006e:port0 [style=bold]
> > > n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
> > > max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
> > > shape=Mrecord, style=filled, fillcolor=green]
> > > n00000078:port4 -> n00000073:port0 [style=dashed]
> > > n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000081:port0 -> n00000078:port0 [style=bold]
> > > n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000085:port0 -> n00000078:port1 [style=bold]
> > > n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n00000089:port0 -> n00000078:port2 [style=bold]
> > > n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
> > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > n0000008d:port0 -> n00000078:port3 [style=bold]
> > > }
> > >
> > >
> > > > >
> > > > > If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> > > > > that's exactly what we're working on with the context framework :)
> > > > >
> > >
> > > Ok. Then I should have a look to context framework too ...
> > >
> >
> > Please, I hope to be able to resume working on it sooner or later
> > given the right use case.
>
> Ok. Will continue monitoring the multi context work. Seems to be a nice
> feature indeed. But as impact on userspace is more significant, that can be
> done as a second step I guess, and will keep the multi instance downstream
> patch meanwhile.
>
> >
> > > > >
> > > > > >
> > > > > > ... since it is not, your assumption seems very reasonable.
> > > > > >
> > > > > > >
> > > > > > > > - How can the user decide whether direct (csi2isp) or indirect
> > > > > > > > (mem2mem) streaming shall be used?
> > > > > > >
> > > > > > > That will also be part of the evaluation. From dts would be my first
> > > > > > > option, but may prevent using both modes on same platform then.
> > > > > >
> > > > > > Of course this depends what the hardware is able to do, but in case the
> > > > > > HW is reconfigurable easily, I doubt that device tree is a good choice
> > > > > > to solve that.
> > > > > > >
> > > > > > > >
> > > > > > > > While it is certainly OK to introduce this support only at a later
> > > > > > > > stage, it makes sense to consider this right from the start to avoid
> > > > > > > > some nasty changes e.g. in how this hardware is exposed to user space.
> > > > > > > >
> > > > > > > > Also, we are facing a similiar challenge with recent Rockchip ISP
> > > > > > > > hardware (RK3588, RK3576, ...) and it would be great to hear your
> > > > > > > > thoughts about that.
> > > > > > >
> > > > > > > Is there an existing discussion thread available on this topic? I would
> > > > > > > be very interested in following it.
> > > > > >
> > > > > > Not yet, I am afraid. But there should be one or two soon (TM) :-)
> > > > >
> > > > > It's probably time to have one :)
> > >
> > > Good. Please loop me in ;)
> >
> > You are in, this is the conversation ;)
> >
> > It might be a good discussion point for the media summit in Nice
> > co-located with Embedded Recipes if people with interest in the topic
> > will going the be there.
>
> Great ! Will try to join then.
>
I'm not sure yet how many interested parties will be in Nice and if it
would make sense to organize an "ISP design day" there or should we
plan a devroom for Plumbers in Prague ?
> BR
> Antoine
>
> >
> > I'm also adding Anthony from ARM as I know he's going through the same
> > inline/m2m duality you're now facing.
> >
> > Thanks
> > j
> >
> > >
> > > BR
> > > Antoine
> > >
> > > > >
> > > > > >
> > > > > > Thanks and regards,
> > > > > > Michael
> > > > > >
> > > > > > >
> > > > > > > Thanks
> > > > > > > Antoine
> > > > > > >
> > > > > > > >
> > > > > > > > Thanks in advance and best regards,
> > > > > > > > Michael
> > > > > > > >
> > > > > > > > >
> > > > > > > > > This series is posted as RFC because extending the v4l2-isp interface
> > > > > > > > > may
> > > > > > > > > overlap with ongoing work. If similar development already exists, I am
> > > > > > > > > happy to rebase or adapt the series accordingly. If preferred, the
> > > > > > > > > series
> > > > > > > > > can also be split into two parts: the v4l2-isp rework and the Neo ISP
> > > > > > > > > driver introduction.
> > > > > > > > >
> > > > > > > > > A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> > > > > > > > > consistent with the existing style in that file.
> > > > > > > > >
> > > > > > > > > Testing was performed on the i.MX95 EVK using the media/next kernel in
> > > > > > > > > standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> > > > > > > > > using the downstream NXP kernel, as some hardware dependencies are not
> > > > > > > > > yet upstreamed.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > > Antoine
> > > > > > > > >
> > > > > > > > > ---
> > > > > > > > > Here are v4l2-compliance test results:
> > > > > > > > >
> > > > > > > > > v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> > > > > > > > > v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
> > > > > > > > >
> > > > > > > > > Compliance test for neoisp device /dev/media0:
> > > > > > > > >
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/media0 open: OK
> > > > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Media Controller ioctls:
> > > > > > > > > test MEDIA_IOC_G_TOPOLOGY: OK
> > > > > > > > > Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> > > > > > > > > test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> > > > > > > > > test MEDIA_IOC_SETUP_LINK: OK
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video0:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04202000
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x0300000a
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000008 (8)
> > > > > > > > > Name : neoisp-input0
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000009 : 0: Source
> > > > > > > > > Link 0x0200000c: to remote pad 0x1000002 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video0 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video1:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04202000
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000010
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x0000000e (14)
> > > > > > > > > Name : neoisp-input1
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x0100000f : 0: Source
> > > > > > > > > Link 0x02000012: to remote pad 0x1000003 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video1 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video2:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x0c200000
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000016
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000014 (20)
> > > > > > > > > Name : neoisp-params
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000015 : 0: Source
> > > > > > > > > Link 0x02000018: to remote pad 0x1000004 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video2 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video3:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04201000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x0300001c
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x0000001a (26)
> > > > > > > > > Name : neoisp-frame
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x0100001b : 0: Sink
> > > > > > > > > Link 0x0200001e: from remote pad 0x1000005 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video3 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video4:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04201000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000022
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000020 (32)
> > > > > > > > > Name : neoisp-ir
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000021 : 0: Sink
> > > > > > > > > Link 0x02000024: from remote pad 0x1000006 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video4 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/video5:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Card type : neoisp
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > Video Capture Multiplanar
> > > > > > > > > Video Output Multiplanar
> > > > > > > > > Metadata Capture
> > > > > > > > > Metadata Output
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Device Capabilities
> > > > > > > > > Device Caps : 0x04a00000
> > > > > > > > > Metadata Capture
> > > > > > > > > Streaming
> > > > > > > > > Extended Pix Format
> > > > > > > > > Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x03000028
> > > > > > > > > Type : V4L Video
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000026 (38)
> > > > > > > > > Name : neoisp-stats
> > > > > > > > > Function : V4L2 I/O
> > > > > > > > > Pad 0x01000027 : 0: Sink
> > > > > > > > > Link 0x0200002a: from remote pad 0x1000007 of entity
> > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/video5 open: OK
> > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > Warnings: 0
> > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > Compliance test for neoisp device /dev/v4l-subdev0:
> > > > > > > > >
> > > > > > > > > Driver Info:
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Capabilities : 0x00000000
> > > > > > > > > Client Capabilities: 0x0000000000000002
> > > > > > > > > interval-uses-which Media Driver Info:
> > > > > > > > > Driver name : neoisp
> > > > > > > > > Model : neoisp
> > > > > > > > > Serial :
> > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > Media version : 6.19.0
> > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > Driver version : 6.19.0
> > > > > > > > > Interface Info:
> > > > > > > > > ID : 0x0300002c
> > > > > > > > > Type : V4L Sub-Device
> > > > > > > > > Entity Info:
> > > > > > > > > ID : 0x00000001 (1)
> > > > > > > > > Name : neoisp
> > > > > > > > > Function : Image Signal Processor
> > > > > > > > > Pad 0x01000002 : 0: Sink
> > > > > > > > > Link 0x0200000c: from remote pad 0x1000009 of entity
> > > > > > > > > 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> > > > > > > > > Pad 0x01000003 : 1: Sink
> > > > > > > > > Link 0x02000012: from remote pad 0x100000f of entity
> > > > > > > > > 'neoisp-input1' (V4L2 I/O): Data
> > > > > > > > > Pad 0x01000004 : 2: Sink
> > > > > > > > > Link 0x02000018: from remote pad 0x1000015 of entity
> > > > > > > > > 'neoisp-params' (V4L2 I/O): Data, Enabled
> > > > > > > > > Pad 0x01000005 : 3: Source
> > > > > > > > > Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
> > > > > > > > > frame' (V4L2 I/O): Data, Enabled
> > > > > > > > > Pad 0x01000006 : 4: Source
> > > > > > > > > Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
> > > > > > > > > ir' (V4L2 I/O): Data
> > > > > > > > > Pad 0x01000007 : 5: Source
> > > > > > > > > Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
> > > > > > > > > stats' (V4L2 I/O): Data, Enabled
> > > > > > > > >
> > > > > > > > > Required ioctls:
> > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > test VIDIOC_SUDBEV_QUERYCAP: OK
> > > > > > > > > test invalid ioctls: OK
> > > > > > > > >
> > > > > > > > > Allow for multiple opens:
> > > > > > > > > test second /dev/v4l-subdev0 open: OK
> > > > > > > > > test VIDIOC_SUBDEV_QUERYCAP: OK
> > > > > > > > > test for unlimited opens: OK
> > > > > > > > >
> > > > > > > > > Debug ioctls:
> > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Input ioctls:
> > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > >
> > > > > > > > > Output ioctls:
> > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > >
> > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Sink Pad 0):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Sink Pad 1):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Sink Pad 2):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Source Pad 3):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Source Pad 4):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Sub-Device ioctls (Source Pad 5):
> > > > > > > > > Try Stream 0
> > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > Active Stream 0
> > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Control ioctls:
> > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> > > > > > > > > test VIDIOC_QUERYCTRL: OK
> > > > > > > > > test VIDIOC_G/S_CTRL: OK
> > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > Standard Controls: 1 Private Controls: 1
> > > > > > > > >
> > > > > > > > > Format ioctls:
> > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
> > > > > > > > > Supported)
> > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_FMT: OK (Not Supported)
> > > > > > > > > test VIDIOC_TRY_FMT: OK (Not Supported)
> > > > > > > > > test VIDIOC_S_FMT: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Codec ioctls:
> > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Buffer ioctls:
> > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > test VIDIOC_EXPBUF: OK (Not Supported)
> > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > >
> > > > > > > > > Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
> > > > > > > > > 0, Warnings: 0
> > > > > > > > >
> > > > > > > > > Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
> > > > > > > > > Failed: 0, Warnings: 0
> > > > > > > > >
> > > > > > > > > ---
> > > > > > > > > Antoine Bouyer (11):
> > > > > > > > > media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> > > > > > > > > media: v4l2-isp: Add helper function to compute extended stats size
> > > > > > > > > media: Documentation: uapi: Update V4L2 ISP for extensible stats
> > > > > > > > > media: Documentation: Add NXP neoisp driver documentation
> > > > > > > > > dt-bindings: media: Add nxp neoisp support
> > > > > > > > > media: v4l2-ctrls: Add user control base for NXP neoisp controls
> > > > > > > > > media: Add meta formats supported by NXP neoisp driver
> > > > > > > > > media: uapi: Add NXP NEOISP user interface header file
> > > > > > > > > media: platform: Add NXP Neoisp Image Signal Processor
> > > > > > > > > media: platform: neoisp: Add debugfs support
> > > > > > > > > arm64: dts: freescale: imx95: Add NXP neoisp device tree node
> > > > > > > > >
> > > > > > > > > .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> > > > > > > > > .../admin-guide/media/nxp-neoisp.dot | 16 +
> > > > > > > > > .../admin-guide/media/nxp-neoisp.rst | 189 ++
> > > > > > > > > .../admin-guide/media/v4l-drivers.rst | 1 +
> > > > > > > > > .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> > > > > > > > > .../userspace-api/media/v4l/meta-formats.rst | 1 +
> > > > > > > > > .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> > > > > > > > > .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> > > > > > > > > MAINTAINERS | 9 +
> > > > > > > > > .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> > > > > > > > > arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> > > > > > > > > drivers/media/platform/nxp/Kconfig | 1 +
> > > > > > > > > drivers/media/platform/nxp/Makefile | 1 +
> > > > > > > > > drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> > > > > > > > > drivers/media/platform/nxp/neoisp/Makefile | 8 +
> > > > > > > > > drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> > > > > > > > > .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> > > > > > > > > drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> > > > > > > > > .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> > > > > > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> > > > > > > > > include/media/v4l2-isp.h | 13 +
> > > > > > > > > include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> > > > > > > > > include/uapi/linux/media/v4l2-isp.h | 85 +
> > > > > > > > > include/uapi/linux/v4l2-controls.h | 6 +
> > > > > > > > > include/uapi/linux/videodev2.h | 6 +
> > > > > > > > > 30 files changed, 11880 insertions(+), 3 deletions(-)
> > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
> > > > > > > > > diagram.dot
> > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> > > > > > > > > create mode 100644 Documentation/devicetree/bindings/media/
> > > > > > > > > nxp,neoisp.yaml
> > > > > > > > > create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
> > > > > > > > > nxp-neoisp.rst
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> > > > > > > > > create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > >
>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-03-23 13:18 ` Jacopo Mondi
@ 2026-03-24 17:44 ` Antoine Bouyer
2026-03-25 13:23 ` Jacopo Mondi
0 siblings, 1 reply; 49+ messages in thread
From: Antoine Bouyer @ 2026-03-24 17:44 UTC (permalink / raw)
To: Jacopo Mondi
Cc: Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
Hi Jacopo
On 3/23/26 2:18 PM, Jacopo Mondi wrote:
>
>
> Hi Antoine
>
> On Fri, Mar 20, 2026 at 05:29:44PM +0100, Antoine Bouyer wrote:
>> Hi Jacopo
>>
>> Quite some updates regarding this RFC after further analysis.
>>
>> Le 05/02/2026 à 10:40, Jacopo Mondi a écrit :
>>>
>>>
>>> Hi Antoine
>>>
>>> On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
>>>> Hi Jacopo
>>>>
>>>> Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
>>>>>
>>>>> Hello,
>>>>>
>>>>> On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
>>>>>> Hello
>>>>>>
>>>>>> On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
>>>>>>> Hi Antoine,
>>>>>>>
>>>>>>> Thanks for your response.
>>>>>>>
>>>>>>> On 1/28/26 09:17, Antoine Bouyer wrote:
>>>>>>>> Hi Michael
>>>>>>>>
>>>>>>>> On 1/26/26 10:44 AM, Michael Riesch wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hi Antoine,
>>>>>>>>>
>>>>>>>>> On 1/23/26 09:09, Antoine Bouyer wrote:
>>>>>>>>>> Hi all,
>>>>>>>>>>
>>>>>>>>>> This RFC patch series introduces the NXP Neo Image Signal Processor
>>>>>>>>>> (ISP)
>>>>>>>>>> driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
>>>>>>>>>> family.
>>>>>>>>>> The series also includes updates to the generic v4l2-isp interface to
>>>>>>>>>> support extended statistics required by the Neo ISP.
>>>>>>>>>>
>>>>>>>>>> The Neo ISP processes one or more camera streams, converting RAW formats
>>>>>>>>>> into YUV or RGB outputs. Its architecture is largely influenced by the
>>>>>>>>>> PISP driver. The hardware supports up to eight contexts, with three sink
>>>>>>>>>> pads (main input, HDR input, and parameter buffers) and three source
>>>>>>>>>> pads
>>>>>>>>>> (RGB output, IR output, and statistics metadata).
>>>>>>>>>>
>>>>>>>>>> At this stage, both legacy (fixed-size) and extensible (dynamic-size)
>>>>>>>>>> parameter/statistics buffers are supported through the generic v4l2-isp
>>>>>>>>>> framework, similar to rkisp1 and Mali-C55. The driver currently supports
>>>>>>>>>> M2M operation; direct CSI-to-ISP streaming is not yet implemented.
>>>>>>>>>
>>>>>>>>> How do you envisage the direct CSI-to-ISP streaming shall be supported?
>>>>>>>>
>>>>>>>> At this stage, this streaming mode still needs to be evaluated on
>>>>>>>> neoisp. We should follow the integration model used by existing ISP
>>>>>>>> drivers to avoid duplicating solutions.
>>>>>>>
>>>>>>> Fair point, but I have had the impression that there are not many
>>>>>>> examples (if any). The rkisp1 driver, for instance, only supports inline
>>>>>>> mode although the HW should be able to do both.
>>>>>>>
>>>>>>> But any pointers most welcome, I won't claim I have the full overview.
>>>>>>>
>>>>>>>>
>>>>>>>> Below are my initial thoughts on the specific points you raised:
>>>>>>>>
>>>>>>>>> - How shall the final media graph(s) look like?
>>>>>>>>
>>>>>>>> The media entities would remain mostly identical, except for the absence
>>>>>>>> of ISI. The topology would be a direct linkg from sensor->csi-
>>>>>>>>> formatter->neoisp.
>>>>>>
>>>>>> If support for inline mode has to be added later, the ISP will need to
>>>>>> be registered in the same media graph of the CSI-2 receiver to be able
>>>>>> to link the two, right ?
>>>>
>>>> yes correct.
>>>>
>>>>>>
>>>>>> How do you envision to control the ISP operating mode, because I'm
>>>>>> afraid if you register the ISP in its own media graph, you're locking
>>>>>> yourself there as implementing inline mode would require a different
>>>>>> media topology with all the implications on the rest of the userspace
>>>>>> stack.
>>>>>>
>>>>>> This might not be a problem if you know that the inline vs m2m mode is
>>>>>> SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
>>>>>> other as m2m. In this case you'll likely need two pipeline handlers
>>>>>> in libcamera, but if that's per SoC-line maybe is acceptable. The fact
>>>>>> you suggests in inline mode there won't be an ISI makes me think this
>>>>>> actually depends on the SoC design ?
>>>>
>>>> Actually, this is not really at SoC synthesis time, neoisp HW does support
>>>> both modes, that is configurable. But ISP HW can run in a single mode only
>>>
>>>> once it is configured. Streaming mode is tightly coupled with CSI HW, then
>>>> ISP cannot be used in M2M mode with another sensor simultaneously.
>>>>
>>>
>>> Yes, my point is trying to understand "how it is configured" and what
>>> your expectations are.
>>>
>>> Will the board .dts (or a camera .dtso) decide how the ISP is operated
>>> by defining its endpoint connections ? Assuming with the same SoC both
>>> inline and m2m modes are possible, without differences in the SoC
>>> design/integration, will users of the same board have to modify the
>>> .dts or load ad-hoc .dtso to decide what mode is in use ?
>>>
>>> Then, the question of how the media topology will look and which
>>> components registers what has to be clarified.
>>>
>>> Let's try to make a taxonomy of the cases we have in mainline (or on
>>> their way to mainline).
>>>
>>> In the mali example I mentioned, the operating mode is selected by the
>>> .dtsi as Mali can be integrated either inline or in m2m mode in
>>> different SoCs. RZ/V2H in example, will always be m2m as it doesn't
>>> interface the CSI-2 receiver with the ISP but rather interfaces the
>>> ISP with a companion chip the performs memory access on its behalf
>>> (the IVC). A different design that incorporates Mali inline will
>>> instead have to interface the CSI-2 receiver with the ISP with
>>> internal busses/glue logic and will then have to described this in dts.
>>>
>>> This is fine as the ISP integration is different and then having the
>>> description in dts is legit.
>>>
>>> The ISP driver unconditionally registers an async notifier and the
>>> downstream component (csi-2 or IVC) will register its async subdev(s)
>>> which will all appear in the ISP media graph. This is possible because
>>> the assumption is that the CSI-2 receiver (or the companion chip)
>>> won't register their own media graph.
>>>
>>> The Renesas V4H example I mentioned is instead different. The ISP can
>>> be operated in inline and m2m, on the same SoC without any
>>> modification to hardware and to the dts/dtsi. It's basically a user
>>> choice we defer to runtime.
>>>
>>> The V4H already has a component that registers a media graph: the
>>> CSI-2/VIN block which is found in many SoCs of the same (and older)
>>> generations. The ISP is present only in some SoC, but the CSI-2/VIN is
>>> always there. In this case, to support both inline and m2m modes, the
>>> VIN registers the media device and, with the trick I pointed you to in
>>> Niklas' code, the ISP registers a subdev in the VIN media graph. Then
>>> the inline/m2m mode can be selected by media link enablement at
>>> run-time. Now, inline mode is not yet supported on V4H and there might
>>> be dragons there, but at least, both modes should be possible on the same
>>> SoC.
>>>
>>> On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
>>>
>>> RPi knows the only SoC where the PiPS will be found is their one. The
>>> ISP cannot function inline and will always be m2m. In this case, a
>>> dedicated media graph for the ISP is the simplest and cleanest
>>> solution.
>>>
>>> RkISP1 instead will always be inline only. It registers a media device
>>> and an async notifier, the connected CSI-2 receiver will register an
>>> async subdev and will be connected to the device tree endpoint of the
>>> ISP device node.
>>>
>>> What model is the closest one to the neoisp integration that you
>>> envision on NXP SoCs ?
>>
>> Then the closest model is the V4H one I believe: we both support m2m and
>> streaming (inline) modes on the same SoC. I tested the trick you pointed
>> out, and let the formatter sharing the media device (owned by ISI) to the
>> neo ISP, like renesas csisp does. It registers as expected, thanks for the
>> proposal !
>>
>> I think formatter is a good candidate since it is physically connected to
>> ISP through a pixel link for streaming mode. Moreover, I propose to create a
>> dedicated pad b/w formatter and ISP and keep the one b/w formatter and ISI
>> as it is, so that in future we can configure the stream format which is sent
>> to ISP, and the one sent to ISI.
>
> So, if I look at the ISI media graph you shared earlier in the thread,
> the formatter will gain one source pad to be optionally connected to
> the ISP, while the existing one that connectes to the crossbar will
> stay as it is today ?
Yes exactly. However, I don't plan to push the pad changes on the M2M
patch series yet. I would rather create the pads (formatter and ISP)
together with the introduction of the inline mode.
>
>>
>> I also tested the streaming path can be added in device tree with endpoint
>> connections between the nodes, so that ISP can create the media link when it
>> registers itself to the media device.
>
> I think this is fine if there actually is a data path between the
> formatter and the ISP as you have suggested.
Yes there is a pixel link between formatter and ISP (at least on i.MX95
SoC).
>
>>
>> Thus at runtime, if userspace enables this link, then neo runs in streaming
>> mode, otherwise m2m is used.
>
> So if we have an ISI, the ISP can be operated in m2m or inline based
> on run-time link enablement, right ?
Yes. And as per my understanding, ISI could still be used with
inline-ISP, to capture raw frame.
>
>>
>> If another SoC in future doesn't support streaming path, the endpoints can
>> be removed from device tree, the ISP would stay in media graph anyway with
>> m2m mode only.
>
> Nice!
>
> Do you envision a streaming mode only design, where there is no ISI
> and the ISP has to register the media device itself ?
AFAIK, there is no such design, ISI is always there.
However, I initially though about adding an ISP "standalone" mode, where
ISP could register its own media device (as it was done before). That
could ease standalone test I believe, and limit dependency with other
drivers. But I don't know how this can cohabit with the phandle
registration approach, except by adding a new optional property on
neoisp node to force standalone registration, or a module parameter.
Do you think it's worth adding such standalone mode ? and if yes, how
can we enable it in a proper way ?
>
>>
>> Do you think this is good approach ?
>>
>
> Certainly so! Thanks for the effort!
>
>>>
>>>>>
>>>>> One small correction after some more research:
>>>>>
>>>>> we actually already have a pipeline in libcamera that supports inline
>>>>> and (will soon) support m2m: the mali c55 one. My take on "probably
>>>>> need two pipeline handlers" was not correct then.
>>>>
>>>> Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
>>>> time analyzing it ':) Seems we are quite aligned as per my understanding:
>>>> inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
>>>> device from Mali. Is that right ?
>>>>
>>>>>
>>>>> As said, Mali-C55 can be integrated inline or in m2m mode and this is
>>>>> decided based on the device tree endpoint connections.
>>>>
>>>> Good. Do you have an example available ?
>>>
>>> It's in mainline, but there's nothing exciting there as the assumption
>>> is that there will always be a connection on the first endpoint and
>>> the driver simply registers a notifier for the connected async subdev. If
>>> it's a CSI-2 receiver then we're inline. If it's a companion chip
>>> we're m2m.
>>>
>>> The libcamera pipeline (not upstream yet) inspects the media entity
>>> function of the entity connected to the ISP sink pad#0. If it's a
>>> CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
>>> operated the pipeline differently.
>>>
>>>>
>>>>>
>>>>> So, if you know neoisp will be integrated either inline or m2m in
>>>>> different SoC lines, maybe deferring it to device tree is good enough
>>>>> at the expense of a slightly more complicated pipeline ?
>>>>
>>>> As said, SoC/ISP HW does support both modes. But I think that the selection
>>>> can be done in device tree too. So that after bootup, a camera will be used
>>>> only in 1 mode.
>>>>
>>>>>
>>>>> I guess this has implications on the bindings definition as well..
>>>>
>>>> Most probably yes. Can this be done as second phase once evaluation is
>>>> completed ?
>>>>
>>>
>>> I think you should asses from the very beginning what is the planned
>>> integration model of the ISP in order not to corner yourself in a
>>> place where it will be hard to support inline without re-writing
>>> the driver's media device registration logic.
>>>
>>> Looking at the below media graph of CSI/ISI you should ask the question "how
>>> will I register the ISP subdev in the CSI-2 media graph when inline"
>>> and "how will I describe inline vs m2m mode if the underlying hardware
>>> design doesn't change?" as deferring it to the .dts might not be the
>>> most correct way to go in that case ?
>>
>> So I think we are aligned now: one media graph from the beginning for
>> supporting both modes, even if first mainline version only supports m2m.
>> Would that be ok ?
>>
>
> Yes!
>
> Let's only just clarify if there will ever be a mode where there is no
> ISI as in that case I think we need to clarify who will register the
> media graph and the async notifiers..
Fine. Let me prepare a patchset with all changes already discussed then.
I keep standalone mode out for the moment.
BR
Antoine
>
>>>
>>>>>
>>>>>>
>>>>>> However, if you plan to allow deferring inline/m2m mode selection to
>>>>>> the system integrators or even have it as a run-time parameter, then
>>>>>> you should really consider having the ISP in the same media graph as
>>>>>> the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
>>>>>> media graph, where you could select the operating mode through media link
>>>>>> enablement or dts endpoint connections
>>>>>>
>>>>>> Niklas (in cc) has addressed a similar situation, where inline and m2m
>>>>>> mode can be selected by link enablement at runtime here
>>>>>> https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
>>>>>> (see risp_cs_internal_ops)
>>>>>>
>>>>>>>
>>>>>>> OK, I thought that ISI was still around...
>>>>>>>
>>>>>>>>
>>>>>>>>> - How many media devices are registered and which driver registers it
>>>>>>>>> or them?
>>>>>>>>
>>>>>>>> That will be part of the evaluation. My initial assumption is that
>>>>>>>> neoisp would be the appropriate component to register the media device
>>>>>>>> in this mode, since ISI is not involved, and ISI currently performs the
>>>>>>>> registration in the M2M configuration.
>>>>>>
>>>>>> Isn't the ISP registering its own media graph ?
>>>>
>>>> Yes, 8 copies of ISP media graph, that can be used with the 8 output video
>>>> devices of the ISI media graph.
>>>>
>>>
>>> I suggest you do what RPi does. The mainline driver only registers one
>>> instance and they carry a little patch downstream that implements the
>>> for() loop where multiple instances are registered. Duplicating media graphs
>>> is not desirable (at least in mainline) as we can have ISPs with 256
>>> contexts, we don't want 256 media graphs.
>>
>> Ok. Will do same approach then: 1 neoisp instance on mainline + downstream
>> patch to create other instances (x8), all in same media graph.
>
> Thank you. Let's work on a proper solution and then the downstream
> patch will be dropped!
>
>>
>>>
>>> A framework level solution with proper priority handling and job
>>> scheduling is what is required and that's what the context work should
>>> end up being.>
>>>
>>>>>>
>>>>>> Can we get a copy of all media graphs on an i.MX95 system including
>>>>>> the ISI and the CSI-2 receiver ?
>>>>
>>>> Here is an example with multiple sensors. Or do you need it in another
>>>> format ?
>>>
>>> No it's fine, thanks!
>>>
>>>>
>>>>
>>>> digraph board {
>>>> rankdir=TB
>>>> n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
>>>> <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
>>>> | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
>>>> shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000001:port5 -> n0000000f:port0 [style=bold]
>>>> n00000001:port6 -> n0000001a:port0 [style=bold]
>>>> n00000001:port7 -> n00000025:port0 [style=bold]
>>>> n00000001:port8 -> n00000030:port0 [style=bold]
>>>> n00000001:port9 -> n0000003b:port0 [style=bold]
>>>> n00000001:port10 -> n00000046:port0 [style=bold]
>>>> n00000001:port11 -> n00000051:port0 [style=bold]
>>>> n00000001:port12 -> n0000005c:port0 [style=bold]
>>>> n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000000f:port1 -> n00000012 [style=bold]
>>>> n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000001a:port1 -> n0000001d [style=bold]
>>>> n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000025:port1 -> n00000028 [style=bold]
>>>> n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000030:port1 -> n00000033 [style=bold]
>>>> n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000003b:port1 -> n0000003e [style=bold]
>>>> n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000046:port1 -> n00000049 [style=bold]
>>>> n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000051:port1 -> n00000054 [style=bold]
>>>> n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
>>>> {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000005c:port1 -> n0000005f [style=bold]
>>>> n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
>>>> style=filled, fillcolor=yellow]
>>>> n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
>>>> fillcolor=yellow]
>>>> n00000067 -> n00000001:port4 [style=bold]
>>>> n0000006e [label="{{<port0> 0} |
>>>> 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
>>>> shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000006e:port1 -> n00000001:port2 [style=bold]
>>>> n00000073 [label="{{<port0> 0} |
>>>> csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
>>>> style=filled, fillcolor=green]
>>>> n00000073:port1 -> n0000006e:port0 [style=bold]
>>>> n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
>>>> max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
>>>> shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000078:port4 -> n00000073:port0 [style=dashed]
>>>> n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
>>>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000081:port0 -> n00000078:port0 [style=bold]
>>>> n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
>>>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000085:port0 -> n00000078:port1 [style=bold]
>>>> n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
>>>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n00000089:port0 -> n00000078:port2 [style=bold]
>>>> n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
>>>> {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
>>>> n0000008d:port0 -> n00000078:port3 [style=bold]
>>>> }
>>>>
>>>>
>>>>>>
>>>>>> If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
>>>>>> that's exactly what we're working on with the context framework :)
>>>>>>
>>>>
>>>> Ok. Then I should have a look to context framework too ...
>>>>
>>>
>>> Please, I hope to be able to resume working on it sooner or later
>>> given the right use case.
>>
>> Ok. Will continue monitoring the multi context work. Seems to be a nice
>> feature indeed. But as impact on userspace is more significant, that can be
>> done as a second step I guess, and will keep the multi instance downstream
>> patch meanwhile.
>>
>>>
>>>>>>
>>>>>>>
>>>>>>> ... since it is not, your assumption seems very reasonable.
>>>>>>>
>>>>>>>>
>>>>>>>>> - How can the user decide whether direct (csi2isp) or indirect
>>>>>>>>> (mem2mem) streaming shall be used?
>>>>>>>>
>>>>>>>> That will also be part of the evaluation. From dts would be my first
>>>>>>>> option, but may prevent using both modes on same platform then.
>>>>>>>
>>>>>>> Of course this depends what the hardware is able to do, but in case the
>>>>>>> HW is reconfigurable easily, I doubt that device tree is a good choice
>>>>>>> to solve that.
>>>>>>>>
>>>>>>>>>
>>>>>>>>> While it is certainly OK to introduce this support only at a later
>>>>>>>>> stage, it makes sense to consider this right from the start to avoid
>>>>>>>>> some nasty changes e.g. in how this hardware is exposed to user space.
>>>>>>>>>
>>>>>>>>> Also, we are facing a similiar challenge with recent Rockchip ISP
>>>>>>>>> hardware (RK3588, RK3576, ...) and it would be great to hear your
>>>>>>>>> thoughts about that.
>>>>>>>>
>>>>>>>> Is there an existing discussion thread available on this topic? I would
>>>>>>>> be very interested in following it.
>>>>>>>
>>>>>>> Not yet, I am afraid. But there should be one or two soon (TM) :-)
>>>>>>
>>>>>> It's probably time to have one :)
>>>>
>>>> Good. Please loop me in ;)
>>>
>>> You are in, this is the conversation ;)
>>>
>>> It might be a good discussion point for the media summit in Nice
>>> co-located with Embedded Recipes if people with interest in the topic
>>> will going the be there.
>>
>> Great ! Will try to join then.
>>
>
> I'm not sure yet how many interested parties will be in Nice and if it
> would make sense to organize an "ISP design day" there or should we
> plan a devroom for Plumbers in Prague ?
>
>
>> BR
>> Antoine
>>
>>>
>>> I'm also adding Anthony from ARM as I know he's going through the same
>>> inline/m2m duality you're now facing.
>>>
>>> Thanks
>>> j
>>>
>>>>
>>>> BR
>>>> Antoine
>>>>
>>>>>>
>>>>>>>
>>>>>>> Thanks and regards,
>>>>>>> Michael
>>>>>>>
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Antoine
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks in advance and best regards,
>>>>>>>>> Michael
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> This series is posted as RFC because extending the v4l2-isp interface
>>>>>>>>>> may
>>>>>>>>>> overlap with ongoing work. If similar development already exists, I am
>>>>>>>>>> happy to rebase or adapt the series accordingly. If preferred, the
>>>>>>>>>> series
>>>>>>>>>> can also be split into two parts: the v4l2-isp rework and the Neo ISP
>>>>>>>>>> driver introduction.
>>>>>>>>>>
>>>>>>>>>> A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
>>>>>>>>>> consistent with the existing style in that file.
>>>>>>>>>>
>>>>>>>>>> Testing was performed on the i.MX95 EVK using the media/next kernel in
>>>>>>>>>> standalone M2M mode. End-to-end camera-to-ISP capture has been validated
>>>>>>>>>> using the downstream NXP kernel, as some hardware dependencies are not
>>>>>>>>>> yet upstreamed.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Antoine
>>>>>>>>>>
>>>>>>>>>> ---
>>>>>>>>>> Here are v4l2-compliance test results:
>>>>>>>>>>
>>>>>>>>>> v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
>>>>>>>>>> v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
>>>>>>>>>>
>>>>>>>>>> Compliance test for neoisp device /dev/media0:
>>>>>>>>>>
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/media0 open: OK
>>>>>>>>>> test MEDIA_IOC_DEVICE_INFO: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Media Controller ioctls:
>>>>>>>>>> test MEDIA_IOC_G_TOPOLOGY: OK
>>>>>>>>>> Entities: 7 Interfaces: 7 Pads: 12 Links: 13
>>>>>>>>>> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
>>>>>>>>>> test MEDIA_IOC_SETUP_LINK: OK
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/video0:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Card type : neoisp
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Device Capabilities
>>>>>>>>>> Device Caps : 0x04202000
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x0300000a
>>>>>>>>>> Type : V4L Video
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x00000008 (8)
>>>>>>>>>> Name : neoisp-input0
>>>>>>>>>> Function : V4L2 I/O
>>>>>>>>>> Pad 0x01000009 : 0: Source
>>>>>>>>>> Link 0x0200000c: to remote pad 0x1000002 of entity
>>>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/video0 open: OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/video1:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Card type : neoisp
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Device Capabilities
>>>>>>>>>> Device Caps : 0x04202000
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x03000010
>>>>>>>>>> Type : V4L Video
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x0000000e (14)
>>>>>>>>>> Name : neoisp-input1
>>>>>>>>>> Function : V4L2 I/O
>>>>>>>>>> Pad 0x0100000f : 0: Source
>>>>>>>>>> Link 0x02000012: to remote pad 0x1000003 of entity
>>>>>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/video1 open: OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/video2:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Card type : neoisp
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Device Capabilities
>>>>>>>>>> Device Caps : 0x0c200000
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x03000016
>>>>>>>>>> Type : V4L Video
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x00000014 (20)
>>>>>>>>>> Name : neoisp-params
>>>>>>>>>> Function : V4L2 I/O
>>>>>>>>>> Pad 0x01000015 : 0: Source
>>>>>>>>>> Link 0x02000018: to remote pad 0x1000004 of entity
>>>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/video2 open: OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/video3:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Card type : neoisp
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Device Capabilities
>>>>>>>>>> Device Caps : 0x04201000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x0300001c
>>>>>>>>>> Type : V4L Video
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x0000001a (26)
>>>>>>>>>> Name : neoisp-frame
>>>>>>>>>> Function : V4L2 I/O
>>>>>>>>>> Pad 0x0100001b : 0: Sink
>>>>>>>>>> Link 0x0200001e: from remote pad 0x1000005 of entity
>>>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/video3 open: OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/video4:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Card type : neoisp
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Device Capabilities
>>>>>>>>>> Device Caps : 0x04201000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x03000022
>>>>>>>>>> Type : V4L Video
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x00000020 (32)
>>>>>>>>>> Name : neoisp-ir
>>>>>>>>>> Function : V4L2 I/O
>>>>>>>>>> Pad 0x01000021 : 0: Sink
>>>>>>>>>> Link 0x02000024: from remote pad 0x1000006 of entity
>>>>>>>>>> 'neoisp' (Image Signal Processor): Data
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/video4 open: OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/video5:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Card type : neoisp
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x8ca03000
>>>>>>>>>> Video Capture Multiplanar
>>>>>>>>>> Video Output Multiplanar
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Metadata Output
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Device Capabilities
>>>>>>>>>> Device Caps : 0x04a00000
>>>>>>>>>> Metadata Capture
>>>>>>>>>> Streaming
>>>>>>>>>> Extended Pix Format
>>>>>>>>>> Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x03000028
>>>>>>>>>> Type : V4L Video
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x00000026 (38)
>>>>>>>>>> Name : neoisp-stats
>>>>>>>>>> Function : V4L2 I/O
>>>>>>>>>> Pad 0x01000027 : 0: Sink
>>>>>>>>>> Link 0x0200002a: from remote pad 0x1000007 of entity
>>>>>>>>>> 'neoisp' (Image Signal Processor): Data, Enabled
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/video5 open: OK
>>>>>>>>>> test VIDIOC_QUERYCAP: OK
>>>>>>>>>> test VIDIOC_G/S_PRIORITY: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 0 Private Controls: 0
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK
>>>>>>>>>> test VIDIOC_TRY_FMT: OK
>>>>>>>>>> test VIDIOC_S_FMT: OK
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
>>>>>>>>>> Warnings: 0
>>>>>>>>>> --------------------------------------------------------------------------------
>>>>>>>>>> Compliance test for neoisp device /dev/v4l-subdev0:
>>>>>>>>>>
>>>>>>>>>> Driver Info:
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Capabilities : 0x00000000
>>>>>>>>>> Client Capabilities: 0x0000000000000002
>>>>>>>>>> interval-uses-which Media Driver Info:
>>>>>>>>>> Driver name : neoisp
>>>>>>>>>> Model : neoisp
>>>>>>>>>> Serial :
>>>>>>>>>> Bus info : platform:4ae00000.isp
>>>>>>>>>> Media version : 6.19.0
>>>>>>>>>> Hardware revision: 0x00000002 (2)
>>>>>>>>>> Driver version : 6.19.0
>>>>>>>>>> Interface Info:
>>>>>>>>>> ID : 0x0300002c
>>>>>>>>>> Type : V4L Sub-Device
>>>>>>>>>> Entity Info:
>>>>>>>>>> ID : 0x00000001 (1)
>>>>>>>>>> Name : neoisp
>>>>>>>>>> Function : Image Signal Processor
>>>>>>>>>> Pad 0x01000002 : 0: Sink
>>>>>>>>>> Link 0x0200000c: from remote pad 0x1000009 of entity
>>>>>>>>>> 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
>>>>>>>>>> Pad 0x01000003 : 1: Sink
>>>>>>>>>> Link 0x02000012: from remote pad 0x100000f of entity
>>>>>>>>>> 'neoisp-input1' (V4L2 I/O): Data
>>>>>>>>>> Pad 0x01000004 : 2: Sink
>>>>>>>>>> Link 0x02000018: from remote pad 0x1000015 of entity
>>>>>>>>>> 'neoisp-params' (V4L2 I/O): Data, Enabled
>>>>>>>>>> Pad 0x01000005 : 3: Source
>>>>>>>>>> Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
>>>>>>>>>> frame' (V4L2 I/O): Data, Enabled
>>>>>>>>>> Pad 0x01000006 : 4: Source
>>>>>>>>>> Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
>>>>>>>>>> ir' (V4L2 I/O): Data
>>>>>>>>>> Pad 0x01000007 : 5: Source
>>>>>>>>>> Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
>>>>>>>>>> stats' (V4L2 I/O): Data, Enabled
>>>>>>>>>>
>>>>>>>>>> Required ioctls:
>>>>>>>>>> test MC information (see 'Media Driver Info' above): OK
>>>>>>>>>> test VIDIOC_SUDBEV_QUERYCAP: OK
>>>>>>>>>> test invalid ioctls: OK
>>>>>>>>>>
>>>>>>>>>> Allow for multiple opens:
>>>>>>>>>> test second /dev/v4l-subdev0 open: OK
>>>>>>>>>> test VIDIOC_SUBDEV_QUERYCAP: OK
>>>>>>>>>> test for unlimited opens: OK
>>>>>>>>>>
>>>>>>>>>> Debug ioctls:
>>>>>>>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Input ioctls:
>>>>>>>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>>>>>>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>>>>>>>>
>>>>>>>>>> Output ioctls:
>>>>>>>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>>>>>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>>>>>>>
>>>>>>>>>> Input/Output configuration ioctls:
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>>>>>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Sub-Device ioctls (Sink Pad 0):
>>>>>>>>>> Try Stream 0
>>>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> Active Stream 0
>>>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Sub-Device ioctls (Sink Pad 1):
>>>>>>>>>> Try Stream 0
>>>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> Active Stream 0
>>>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Sub-Device ioctls (Sink Pad 2):
>>>>>>>>>> Try Stream 0
>>>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> Active Stream 0
>>>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Sub-Device ioctls (Source Pad 3):
>>>>>>>>>> Try Stream 0
>>>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> Active Stream 0
>>>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Sub-Device ioctls (Source Pad 4):
>>>>>>>>>> Try Stream 0
>>>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> Active Stream 0
>>>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Sub-Device ioctls (Source Pad 5):
>>>>>>>>>> Try Stream 0
>>>>>>>>>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> Active Stream 0
>>>>>>>>>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
>>>>>>>>>> FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>>>>>>>>>> test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Control ioctls:
>>>>>>>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>>>>>>>>> test VIDIOC_QUERYCTRL: OK
>>>>>>>>>> test VIDIOC_G/S_CTRL: OK
>>>>>>>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>>>>>>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>>>>>>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>>>>>>>> Standard Controls: 1 Private Controls: 1
>>>>>>>>>>
>>>>>>>>>> Format ioctls:
>>>>>>>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
>>>>>>>>>> Supported)
>>>>>>>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_FMT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_TRY_FMT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_S_FMT: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>>>>>>>> test Cropping: OK (Not Supported)
>>>>>>>>>> test Composing: OK (Not Supported)
>>>>>>>>>> test Scaling: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Codec ioctls:
>>>>>>>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>>>>>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>>>>>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Buffer ioctls:
>>>>>>>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>>>>>>>>>> test CREATE_BUFS maximum buffers: OK
>>>>>>>>>> test VIDIOC_REMOVE_BUFS: OK
>>>>>>>>>> test VIDIOC_EXPBUF: OK (Not Supported)
>>>>>>>>>> test Requests: OK (Not Supported)
>>>>>>>>>>
>>>>>>>>>> Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
>>>>>>>>>> 0, Warnings: 0
>>>>>>>>>>
>>>>>>>>>> Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
>>>>>>>>>> Failed: 0, Warnings: 0
>>>>>>>>>>
>>>>>>>>>> ---
>>>>>>>>>> Antoine Bouyer (11):
>>>>>>>>>> media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
>>>>>>>>>> media: v4l2-isp: Add helper function to compute extended stats size
>>>>>>>>>> media: Documentation: uapi: Update V4L2 ISP for extensible stats
>>>>>>>>>> media: Documentation: Add NXP neoisp driver documentation
>>>>>>>>>> dt-bindings: media: Add nxp neoisp support
>>>>>>>>>> media: v4l2-ctrls: Add user control base for NXP neoisp controls
>>>>>>>>>> media: Add meta formats supported by NXP neoisp driver
>>>>>>>>>> media: uapi: Add NXP NEOISP user interface header file
>>>>>>>>>> media: platform: Add NXP Neoisp Image Signal Processor
>>>>>>>>>> media: platform: neoisp: Add debugfs support
>>>>>>>>>> arm64: dts: freescale: imx95: Add NXP neoisp device tree node
>>>>>>>>>>
>>>>>>>>>> .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
>>>>>>>>>> .../admin-guide/media/nxp-neoisp.dot | 16 +
>>>>>>>>>> .../admin-guide/media/nxp-neoisp.rst | 189 ++
>>>>>>>>>> .../admin-guide/media/v4l-drivers.rst | 1 +
>>>>>>>>>> .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
>>>>>>>>>> .../userspace-api/media/v4l/meta-formats.rst | 1 +
>>>>>>>>>> .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
>>>>>>>>>> .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
>>>>>>>>>> MAINTAINERS | 9 +
>>>>>>>>>> .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
>>>>>>>>>> arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
>>>>>>>>>> drivers/media/platform/nxp/Kconfig | 1 +
>>>>>>>>>> drivers/media/platform/nxp/Makefile | 1 +
>>>>>>>>>> drivers/media/platform/nxp/neoisp/Kconfig | 15 +
>>>>>>>>>> drivers/media/platform/nxp/neoisp/Makefile | 8 +
>>>>>>>>>> drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
>>>>>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
>>>>>>>>>> .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
>>>>>>>>>> .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
>>>>>>>>>> .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
>>>>>>>>>> drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
>>>>>>>>>> .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
>>>>>>>>>> .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
>>>>>>>>>> .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
>>>>>>>>>> drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
>>>>>>>>>> include/media/v4l2-isp.h | 13 +
>>>>>>>>>> include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
>>>>>>>>>> include/uapi/linux/media/v4l2-isp.h | 85 +
>>>>>>>>>> include/uapi/linux/v4l2-controls.h | 6 +
>>>>>>>>>> include/uapi/linux/videodev2.h | 6 +
>>>>>>>>>> 30 files changed, 11880 insertions(+), 3 deletions(-)
>>>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
>>>>>>>>>> diagram.dot
>>>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
>>>>>>>>>> create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
>>>>>>>>>> create mode 100644 Documentation/devicetree/bindings/media/
>>>>>>>>>> nxp,neoisp.yaml
>>>>>>>>>> create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
>>>>>>>>>> nxp-neoisp.rst
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
>>>>>>>>>> create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
>>>>>>>>>> create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>
^ permalink raw reply [flat|nested] 49+ messages in thread* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-03-24 17:44 ` Antoine Bouyer
@ 2026-03-25 13:23 ` Jacopo Mondi
0 siblings, 0 replies; 49+ messages in thread
From: Jacopo Mondi @ 2026-03-25 13:23 UTC (permalink / raw)
To: Antoine Bouyer
Cc: Jacopo Mondi, Michael Riesch, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, laurent.pinchart, mchehab,
robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel, festevam,
linux-kernel, linux-media, devicetree, linux-arm-kernel,
niklas soderlund, Anthony McGivern
Hi Antoine
On Tue, Mar 24, 2026 at 06:44:50PM +0100, Antoine Bouyer wrote:
>
> Hi Jacopo
>
> On 3/23/26 2:18 PM, Jacopo Mondi wrote:
> >
> >
> > Hi Antoine
> >
> > On Fri, Mar 20, 2026 at 05:29:44PM +0100, Antoine Bouyer wrote:
> > > Hi Jacopo
> > >
> > > Quite some updates regarding this RFC after further analysis.
> > >
> > > Le 05/02/2026 à 10:40, Jacopo Mondi a écrit :
> > > >
> > > >
> > > > Hi Antoine
> > > >
> > > > On Wed, Feb 04, 2026 at 07:30:18PM +0100, Antoine Bouyer wrote:
> > > > > Hi Jacopo
> > > > >
> > > > > Le 04/02/2026 à 18:12, Jacopo Mondi a écrit :
> > > > > >
> > > > > > Hello,
> > > > > >
> > > > > > On Tue, Feb 03, 2026 at 07:37:34PM +0100, Jacopo Mondi wrote:
> > > > > > > Hello
> > > > > > >
> > > > > > > On Thu, Jan 29, 2026 at 12:00:24AM +0100, Michael Riesch wrote:
> > > > > > > > Hi Antoine,
> > > > > > > >
> > > > > > > > Thanks for your response.
> > > > > > > >
> > > > > > > > On 1/28/26 09:17, Antoine Bouyer wrote:
> > > > > > > > > Hi Michael
> > > > > > > > >
> > > > > > > > > On 1/26/26 10:44 AM, Michael Riesch wrote:
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Hi Antoine,
> > > > > > > > > >
> > > > > > > > > > On 1/23/26 09:09, Antoine Bouyer wrote:
> > > > > > > > > > > Hi all,
> > > > > > > > > > >
> > > > > > > > > > > This RFC patch series introduces the NXP Neo Image Signal Processor
> > > > > > > > > > > (ISP)
> > > > > > > > > > > driver, used in the NXP i.MX95 SoC and future devices in the i.MX9
> > > > > > > > > > > family.
> > > > > > > > > > > The series also includes updates to the generic v4l2-isp interface to
> > > > > > > > > > > support extended statistics required by the Neo ISP.
> > > > > > > > > > >
> > > > > > > > > > > The Neo ISP processes one or more camera streams, converting RAW formats
> > > > > > > > > > > into YUV or RGB outputs. Its architecture is largely influenced by the
> > > > > > > > > > > PISP driver. The hardware supports up to eight contexts, with three sink
> > > > > > > > > > > pads (main input, HDR input, and parameter buffers) and three source
> > > > > > > > > > > pads
> > > > > > > > > > > (RGB output, IR output, and statistics metadata).
> > > > > > > > > > >
> > > > > > > > > > > At this stage, both legacy (fixed-size) and extensible (dynamic-size)
> > > > > > > > > > > parameter/statistics buffers are supported through the generic v4l2-isp
> > > > > > > > > > > framework, similar to rkisp1 and Mali-C55. The driver currently supports
> > > > > > > > > > > M2M operation; direct CSI-to-ISP streaming is not yet implemented.
> > > > > > > > > >
> > > > > > > > > > How do you envisage the direct CSI-to-ISP streaming shall be supported?
> > > > > > > > >
> > > > > > > > > At this stage, this streaming mode still needs to be evaluated on
> > > > > > > > > neoisp. We should follow the integration model used by existing ISP
> > > > > > > > > drivers to avoid duplicating solutions.
> > > > > > > >
> > > > > > > > Fair point, but I have had the impression that there are not many
> > > > > > > > examples (if any). The rkisp1 driver, for instance, only supports inline
> > > > > > > > mode although the HW should be able to do both.
> > > > > > > >
> > > > > > > > But any pointers most welcome, I won't claim I have the full overview.
> > > > > > > >
> > > > > > > > >
> > > > > > > > > Below are my initial thoughts on the specific points you raised:
> > > > > > > > >
> > > > > > > > > > - How shall the final media graph(s) look like?
> > > > > > > > >
> > > > > > > > > The media entities would remain mostly identical, except for the absence
> > > > > > > > > of ISI. The topology would be a direct linkg from sensor->csi-
> > > > > > > > > > formatter->neoisp.
> > > > > > >
> > > > > > > If support for inline mode has to be added later, the ISP will need to
> > > > > > > be registered in the same media graph of the CSI-2 receiver to be able
> > > > > > > to link the two, right ?
> > > > >
> > > > > yes correct.
> > > > >
> > > > > > >
> > > > > > > How do you envision to control the ISP operating mode, because I'm
> > > > > > > afraid if you register the ISP in its own media graph, you're locking
> > > > > > > yourself there as implementing inline mode would require a different
> > > > > > > media topology with all the implications on the rest of the userspace
> > > > > > > stack.
> > > > > > >
> > > > > > > This might not be a problem if you know that the inline vs m2m mode is
> > > > > > > SoC sythesis time parameter. Some SoCs will integrate neoisp inline, some
> > > > > > > other as m2m. In this case you'll likely need two pipeline handlers
> > > > > > > in libcamera, but if that's per SoC-line maybe is acceptable. The fact
> > > > > > > you suggests in inline mode there won't be an ISI makes me think this
> > > > > > > actually depends on the SoC design ?
> > > > >
> > > > > Actually, this is not really at SoC synthesis time, neoisp HW does support
> > > > > both modes, that is configurable. But ISP HW can run in a single mode only
> > > >
> > > > > once it is configured. Streaming mode is tightly coupled with CSI HW, then
> > > > > ISP cannot be used in M2M mode with another sensor simultaneously.
> > > > >
> > > >
> > > > Yes, my point is trying to understand "how it is configured" and what
> > > > your expectations are.
> > > >
> > > > Will the board .dts (or a camera .dtso) decide how the ISP is operated
> > > > by defining its endpoint connections ? Assuming with the same SoC both
> > > > inline and m2m modes are possible, without differences in the SoC
> > > > design/integration, will users of the same board have to modify the
> > > > .dts or load ad-hoc .dtso to decide what mode is in use ?
> > > >
> > > > Then, the question of how the media topology will look and which
> > > > components registers what has to be clarified.
> > > >
> > > > Let's try to make a taxonomy of the cases we have in mainline (or on
> > > > their way to mainline).
> > > >
> > > > In the mali example I mentioned, the operating mode is selected by the
> > > > .dtsi as Mali can be integrated either inline or in m2m mode in
> > > > different SoCs. RZ/V2H in example, will always be m2m as it doesn't
> > > > interface the CSI-2 receiver with the ISP but rather interfaces the
> > > > ISP with a companion chip the performs memory access on its behalf
> > > > (the IVC). A different design that incorporates Mali inline will
> > > > instead have to interface the CSI-2 receiver with the ISP with
> > > > internal busses/glue logic and will then have to described this in dts.
> > > >
> > > > This is fine as the ISP integration is different and then having the
> > > > description in dts is legit.
> > > >
> > > > The ISP driver unconditionally registers an async notifier and the
> > > > downstream component (csi-2 or IVC) will register its async subdev(s)
> > > > which will all appear in the ISP media graph. This is possible because
> > > > the assumption is that the CSI-2 receiver (or the companion chip)
> > > > won't register their own media graph.
> > > >
> > > > The Renesas V4H example I mentioned is instead different. The ISP can
> > > > be operated in inline and m2m, on the same SoC without any
> > > > modification to hardware and to the dts/dtsi. It's basically a user
> > > > choice we defer to runtime.
> > > >
> > > > The V4H already has a component that registers a media graph: the
> > > > CSI-2/VIN block which is found in many SoCs of the same (and older)
> > > > generations. The ISP is present only in some SoC, but the CSI-2/VIN is
> > > > always there. In this case, to support both inline and m2m modes, the
> > > > VIN registers the media device and, with the trick I pointed you to in
> > > > Niklas' code, the ISP registers a subdev in the VIN media graph. Then
> > > > the inline/m2m mode can be selected by media link enablement at
> > > > run-time. Now, inline mode is not yet supported on V4H and there might
> > > > be dragons there, but at least, both modes should be possible on the same
> > > > SoC.
> > > >
> > > > On the other extremes we have the RaspberryPi PiSP BE and RkISP1.
> > > >
> > > > RPi knows the only SoC where the PiPS will be found is their one. The
> > > > ISP cannot function inline and will always be m2m. In this case, a
> > > > dedicated media graph for the ISP is the simplest and cleanest
> > > > solution.
> > > >
> > > > RkISP1 instead will always be inline only. It registers a media device
> > > > and an async notifier, the connected CSI-2 receiver will register an
> > > > async subdev and will be connected to the device tree endpoint of the
> > > > ISP device node.
> > > >
> > > > What model is the closest one to the neoisp integration that you
> > > > envision on NXP SoCs ?
> > >
> > > Then the closest model is the V4H one I believe: we both support m2m and
> > > streaming (inline) modes on the same SoC. I tested the trick you pointed
> > > out, and let the formatter sharing the media device (owned by ISI) to the
> > > neo ISP, like renesas csisp does. It registers as expected, thanks for the
> > > proposal !
> > >
> > > I think formatter is a good candidate since it is physically connected to
> > > ISP through a pixel link for streaming mode. Moreover, I propose to create a
> > > dedicated pad b/w formatter and ISP and keep the one b/w formatter and ISI
> > > as it is, so that in future we can configure the stream format which is sent
> > > to ISP, and the one sent to ISI.
> >
> > So, if I look at the ISI media graph you shared earlier in the thread,
> > the formatter will gain one source pad to be optionally connected to
> > the ISP, while the existing one that connectes to the crossbar will
> > stay as it is today ?
>
> Yes exactly. However, I don't plan to push the pad changes on the M2M patch
> series yet. I would rather create the pads (formatter and ISP) together with
> the introduction of the inline mode.
>
As long as introducing the two new pads doesn't change the enumeration
of the other ones I think it's fine. The only requirement is that
userspace that used to work with the m2m-only implementation should
continue working once the media graph is modified to support inline.
> >
> > >
> > > I also tested the streaming path can be added in device tree with endpoint
> > > connections between the nodes, so that ISP can create the media link when it
> > > registers itself to the media device.
> >
> > I think this is fine if there actually is a data path between the
> > formatter and the ISP as you have suggested.
>
> Yes there is a pixel link between formatter and ISP (at least on i.MX95
> SoC).
>
> >
> > >
> > > Thus at runtime, if userspace enables this link, then neo runs in streaming
> > > mode, otherwise m2m is used.
> >
> > So if we have an ISI, the ISP can be operated in m2m or inline based
> > on run-time link enablement, right ?
>
> Yes. And as per my understanding, ISI could still be used with inline-ISP,
> to capture raw frame.
>
> >
> > >
> > > If another SoC in future doesn't support streaming path, the endpoints can
> > > be removed from device tree, the ISP would stay in media graph anyway with
> > > m2m mode only.
> >
> > Nice!
> >
> > Do you envision a streaming mode only design, where there is no ISI
> > and the ISP has to register the media device itself ?
>
> AFAIK, there is no such design, ISI is always there.
Ok, that's good
>
> However, I initially though about adding an ISP "standalone" mode, where ISP
> could register its own media device (as it was done before). That could ease
> standalone test I believe, and limit dependency with other drivers. But I
> don't know how this can cohabit with the phandle registration approach,
> except by adding a new optional property on neoisp node to force standalone
> registration, or a module parameter.
>
> Do you think it's worth adding such standalone mode ? and if yes, how can we
> enable it in a proper way ?
>
I don't think it's something that should be mainlined. If it's useful
for your testing please go ahead, but I'm not sure this can be
mainlined...
> >
> > >
> > > Do you think this is good approach ?
> > >
> >
> > Certainly so! Thanks for the effort!
> >
> > > >
> > > > > >
> > > > > > One small correction after some more research:
> > > > > >
> > > > > > we actually already have a pipeline in libcamera that supports inline
> > > > > > and (will soon) support m2m: the mali c55 one. My take on "probably
> > > > > > need two pipeline handlers" was not correct then.
> > > > >
> > > > > Yes, I saw your patchwork on libcamera about this coming upgrade. Spent some
> > > > > time analyzing it ':) Seems we are quite aligned as per my understanding:
> > > > > inline mode (i.e. streaming mode with neoisp) _or_ M2M mode using IVC video
> > > > > device from Mali. Is that right ?
> > > > >
> > > > > >
> > > > > > As said, Mali-C55 can be integrated inline or in m2m mode and this is
> > > > > > decided based on the device tree endpoint connections.
> > > > >
> > > > > Good. Do you have an example available ?
> > > >
> > > > It's in mainline, but there's nothing exciting there as the assumption
> > > > is that there will always be a connection on the first endpoint and
> > > > the driver simply registers a notifier for the connected async subdev. If
> > > > it's a CSI-2 receiver then we're inline. If it's a companion chip
> > > > we're m2m.
> > > >
> > > > The libcamera pipeline (not upstream yet) inspects the media entity
> > > > function of the entity connected to the ISP sink pad#0. If it's a
> > > > CSI-2 reciver we're inline. If it's not, we're m2m. Based on that it
> > > > operated the pipeline differently.
> > > >
> > > > >
> > > > > >
> > > > > > So, if you know neoisp will be integrated either inline or m2m in
> > > > > > different SoC lines, maybe deferring it to device tree is good enough
> > > > > > at the expense of a slightly more complicated pipeline ?
> > > > >
> > > > > As said, SoC/ISP HW does support both modes. But I think that the selection
> > > > > can be done in device tree too. So that after bootup, a camera will be used
> > > > > only in 1 mode.
> > > > >
> > > > > >
> > > > > > I guess this has implications on the bindings definition as well..
> > > > >
> > > > > Most probably yes. Can this be done as second phase once evaluation is
> > > > > completed ?
> > > > >
> > > >
> > > > I think you should asses from the very beginning what is the planned
> > > > integration model of the ISP in order not to corner yourself in a
> > > > place where it will be hard to support inline without re-writing
> > > > the driver's media device registration logic.
> > > >
> > > > Looking at the below media graph of CSI/ISI you should ask the question "how
> > > > will I register the ISP subdev in the CSI-2 media graph when inline"
> > > > and "how will I describe inline vs m2m mode if the underlying hardware
> > > > design doesn't change?" as deferring it to the .dts might not be the
> > > > most correct way to go in that case ?
> > >
> > > So I think we are aligned now: one media graph from the beginning for
> > > supporting both modes, even if first mainline version only supports m2m.
> > > Would that be ok ?
> > >
> >
> > Yes!
> >
> > Let's only just clarify if there will ever be a mode where there is no
> > ISI as in that case I think we need to clarify who will register the
> > media graph and the async notifiers..
>
> Fine. Let me prepare a patchset with all changes already discussed then. I
> keep standalone mode out for the moment.
Fine with me!
Thanks
j
>
> BR
> Antoine
>
> >
> > > >
> > > > > >
> > > > > > >
> > > > > > > However, if you plan to allow deferring inline/m2m mode selection to
> > > > > > > the system integrators or even have it as a run-time parameter, then
> > > > > > > you should really consider having the ISP in the same media graph as
> > > > > > > the CSI-2 receiver and operate the whole CSI-2/ISI/ISP as a single
> > > > > > > media graph, where you could select the operating mode through media link
> > > > > > > enablement or dts endpoint connections
> > > > > > >
> > > > > > > Niklas (in cc) has addressed a similar situation, where inline and m2m
> > > > > > > mode can be selected by link enablement at runtime here
> > > > > > > https://patchwork.linuxtv.org/project/linux-media/patch/20251225171054.1370856-3-niklas.soderlund+renesas@ragnatech.se/
> > > > > > > (see risp_cs_internal_ops)
> > > > > > >
> > > > > > > >
> > > > > > > > OK, I thought that ISI was still around...
> > > > > > > >
> > > > > > > > >
> > > > > > > > > > - How many media devices are registered and which driver registers it
> > > > > > > > > > or them?
> > > > > > > > >
> > > > > > > > > That will be part of the evaluation. My initial assumption is that
> > > > > > > > > neoisp would be the appropriate component to register the media device
> > > > > > > > > in this mode, since ISI is not involved, and ISI currently performs the
> > > > > > > > > registration in the M2M configuration.
> > > > > > >
> > > > > > > Isn't the ISP registering its own media graph ?
> > > > >
> > > > > Yes, 8 copies of ISP media graph, that can be used with the 8 output video
> > > > > devices of the ISI media graph.
> > > > >
> > > >
> > > > I suggest you do what RPi does. The mainline driver only registers one
> > > > instance and they carry a little patch downstream that implements the
> > > > for() loop where multiple instances are registered. Duplicating media graphs
> > > > is not desirable (at least in mainline) as we can have ISPs with 256
> > > > contexts, we don't want 256 media graphs.
> > >
> > > Ok. Will do same approach then: 1 neoisp instance on mainline + downstream
> > > patch to create other instances (x8), all in same media graph.
> >
> > Thank you. Let's work on a proper solution and then the downstream
> > patch will be dropped!
> >
> > >
> > > >
> > > > A framework level solution with proper priority handling and job
> > > > scheduling is what is required and that's what the context work should
> > > > end up being.>
> > > >
> > > > > > >
> > > > > > > Can we get a copy of all media graphs on an i.MX95 system including
> > > > > > > the ISI and the CSI-2 receiver ?
> > > > >
> > > > > Here is an example with multiple sensors. Or do you need it in another
> > > > > format ?
> > > >
> > > > No it's fine, thanks!
> > > >
> > > > >
> > > > >
> > > > > digraph board {
> > > > > rankdir=TB
> > > > > n00000001 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3 |
> > > > > <port4> 4} | crossbar\n/dev/v4l-subdev8 | {<port5> 5 | <port6> 6 | <port7> 7
> > > > > | <port8> 8 | <port9> 9 | <port10> 10 | <port11> 11 | <port12> 12}}",
> > > > > shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000001:port5 -> n0000000f:port0 [style=bold]
> > > > > n00000001:port6 -> n0000001a:port0 [style=bold]
> > > > > n00000001:port7 -> n00000025:port0 [style=bold]
> > > > > n00000001:port8 -> n00000030:port0 [style=bold]
> > > > > n00000001:port9 -> n0000003b:port0 [style=bold]
> > > > > n00000001:port10 -> n00000046:port0 [style=bold]
> > > > > n00000001:port11 -> n00000051:port0 [style=bold]
> > > > > n00000001:port12 -> n0000005c:port0 [style=bold]
> > > > > n0000000f [label="{{<port0> 0} | mxc_isi.0\n/dev/v4l-subdev9 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n0000000f:port1 -> n00000012 [style=bold]
> > > > > n00000012 [label="mxc_isi.0.capture\n/dev/video8", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n0000001a [label="{{<port0> 0} | mxc_isi.1\n/dev/v4l-subdev10 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n0000001a:port1 -> n0000001d [style=bold]
> > > > > n0000001d [label="mxc_isi.1.capture\n/dev/video9", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n00000025 [label="{{<port0> 0} | mxc_isi.2\n/dev/v4l-subdev11 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000025:port1 -> n00000028 [style=bold]
> > > > > n00000028 [label="mxc_isi.2.capture\n/dev/video10", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n00000030 [label="{{<port0> 0} | mxc_isi.3\n/dev/v4l-subdev12 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000030:port1 -> n00000033 [style=bold]
> > > > > n00000033 [label="mxc_isi.3.capture\n/dev/video13", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n0000003b [label="{{<port0> 0} | mxc_isi.4\n/dev/v4l-subdev13 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n0000003b:port1 -> n0000003e [style=bold]
> > > > > n0000003e [label="mxc_isi.4.capture\n/dev/video14", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n00000046 [label="{{<port0> 0} | mxc_isi.5\n/dev/v4l-subdev14 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000046:port1 -> n00000049 [style=bold]
> > > > > n00000049 [label="mxc_isi.5.capture\n/dev/video21", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n00000051 [label="{{<port0> 0} | mxc_isi.6\n/dev/v4l-subdev15 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000051:port1 -> n00000054 [style=bold]
> > > > > n00000054 [label="mxc_isi.6.capture\n/dev/video22", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n0000005c [label="{{<port0> 0} | mxc_isi.7\n/dev/v4l-subdev16 |
> > > > > {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n0000005c:port1 -> n0000005f [style=bold]
> > > > > n0000005f [label="mxc_isi.7.capture\n/dev/video23", shape=box,
> > > > > style=filled, fillcolor=yellow]
> > > > > n00000067 [label="mxc_isi.output\n", shape=box, style=filled,
> > > > > fillcolor=yellow]
> > > > > n00000067 -> n00000001:port4 [style=bold]
> > > > > n0000006e [label="{{<port0> 0} |
> > > > > 4ac10000.syscon:formatter@20\n/dev/v4l-subdev17 | {<port1> 1}}",
> > > > > shape=Mrecord, style=filled, fillcolor=green]
> > > > > n0000006e:port1 -> n00000001:port2 [style=bold]
> > > > > n00000073 [label="{{<port0> 0} |
> > > > > csidev-4ad30000.csi\n/dev/v4l-subdev18 | {<port1> 1}}", shape=Mrecord,
> > > > > style=filled, fillcolor=green]
> > > > > n00000073:port1 -> n0000006e:port0 [style=bold]
> > > > > n00000078 [label="{{<port0> 0 | <port1> 1 | <port2> 2 | <port3> 3} |
> > > > > max96724 2-0027\n/dev/v4l-subdev19 | {<port4> 4 | <port5> 5}}",
> > > > > shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000078:port4 -> n00000073:port0 [style=dashed]
> > > > > n00000081 [label="{{} | mx95mbcam 8-0040\n/dev/v4l-subdev20 |
> > > > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000081:port0 -> n00000078:port0 [style=bold]
> > > > > n00000085 [label="{{} | mx95mbcam 9-0040\n/dev/v4l-subdev21 |
> > > > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000085:port0 -> n00000078:port1 [style=bold]
> > > > > n00000089 [label="{{} | mx95mbcam 10-0040\n/dev/v4l-subdev22 |
> > > > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n00000089:port0 -> n00000078:port2 [style=bold]
> > > > > n0000008d [label="{{} | mx95mbcam 11-0040\n/dev/v4l-subdev23 |
> > > > > {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
> > > > > n0000008d:port0 -> n00000078:port3 [style=bold]
> > > > > }
> > > > >
> > > > >
> > > > > > >
> > > > > > > If I'm not mistaken you'll have 8 copies of the ISP media graphs, and
> > > > > > > that's exactly what we're working on with the context framework :)
> > > > > > >
> > > > >
> > > > > Ok. Then I should have a look to context framework too ...
> > > > >
> > > >
> > > > Please, I hope to be able to resume working on it sooner or later
> > > > given the right use case.
> > >
> > > Ok. Will continue monitoring the multi context work. Seems to be a nice
> > > feature indeed. But as impact on userspace is more significant, that can be
> > > done as a second step I guess, and will keep the multi instance downstream
> > > patch meanwhile.
> > >
> > > >
> > > > > > >
> > > > > > > >
> > > > > > > > ... since it is not, your assumption seems very reasonable.
> > > > > > > >
> > > > > > > > >
> > > > > > > > > > - How can the user decide whether direct (csi2isp) or indirect
> > > > > > > > > > (mem2mem) streaming shall be used?
> > > > > > > > >
> > > > > > > > > That will also be part of the evaluation. From dts would be my first
> > > > > > > > > option, but may prevent using both modes on same platform then.
> > > > > > > >
> > > > > > > > Of course this depends what the hardware is able to do, but in case the
> > > > > > > > HW is reconfigurable easily, I doubt that device tree is a good choice
> > > > > > > > to solve that.
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > While it is certainly OK to introduce this support only at a later
> > > > > > > > > > stage, it makes sense to consider this right from the start to avoid
> > > > > > > > > > some nasty changes e.g. in how this hardware is exposed to user space.
> > > > > > > > > >
> > > > > > > > > > Also, we are facing a similiar challenge with recent Rockchip ISP
> > > > > > > > > > hardware (RK3588, RK3576, ...) and it would be great to hear your
> > > > > > > > > > thoughts about that.
> > > > > > > > >
> > > > > > > > > Is there an existing discussion thread available on this topic? I would
> > > > > > > > > be very interested in following it.
> > > > > > > >
> > > > > > > > Not yet, I am afraid. But there should be one or two soon (TM) :-)
> > > > > > >
> > > > > > > It's probably time to have one :)
> > > > >
> > > > > Good. Please loop me in ;)
> > > >
> > > > You are in, this is the conversation ;)
> > > >
> > > > It might be a good discussion point for the media summit in Nice
> > > > co-located with Embedded Recipes if people with interest in the topic
> > > > will going the be there.
> > >
> > > Great ! Will try to join then.
> > >
> >
> > I'm not sure yet how many interested parties will be in Nice and if it
> > would make sense to organize an "ISP design day" there or should we
> > plan a devroom for Plumbers in Prague ?
> >
> >
> > > BR
> > > Antoine
> > >
> > > >
> > > > I'm also adding Anthony from ARM as I know he's going through the same
> > > > inline/m2m duality you're now facing.
> > > >
> > > > Thanks
> > > > j
> > > >
> > > > >
> > > > > BR
> > > > > Antoine
> > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > Thanks and regards,
> > > > > > > > Michael
> > > > > > > >
> > > > > > > > >
> > > > > > > > > Thanks
> > > > > > > > > Antoine
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Thanks in advance and best regards,
> > > > > > > > > > Michael
> > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > This series is posted as RFC because extending the v4l2-isp interface
> > > > > > > > > > > may
> > > > > > > > > > > overlap with ongoing work. If similar development already exists, I am
> > > > > > > > > > > happy to rebase or adapt the series accordingly. If preferred, the
> > > > > > > > > > > series
> > > > > > > > > > > can also be split into two parts: the v4l2-isp rework and the Neo ISP
> > > > > > > > > > > driver introduction.
> > > > > > > > > > >
> > > > > > > > > > > A few checkpatch warnings in v4l2-ioctl.c remain intentionally to stay
> > > > > > > > > > > consistent with the existing style in that file.
> > > > > > > > > > >
> > > > > > > > > > > Testing was performed on the i.MX95 EVK using the media/next kernel in
> > > > > > > > > > > standalone M2M mode. End-to-end camera-to-ISP capture has been validated
> > > > > > > > > > > using the downstream NXP kernel, as some hardware dependencies are not
> > > > > > > > > > > yet upstreamed.
> > > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > > Antoine
> > > > > > > > > > >
> > > > > > > > > > > ---
> > > > > > > > > > > Here are v4l2-compliance test results:
> > > > > > > > > > >
> > > > > > > > > > > v4l2-compliance 1.28.1-5233, 64 bits, 64-bit time_t
> > > > > > > > > > > v4l2-compliance SHA: fc15e229d9d3 2024-07-23 19:22:15
> > > > > > > > > > >
> > > > > > > > > > > Compliance test for neoisp device /dev/media0:
> > > > > > > > > > >
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/media0 open: OK
> > > > > > > > > > > test MEDIA_IOC_DEVICE_INFO: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Media Controller ioctls:
> > > > > > > > > > > test MEDIA_IOC_G_TOPOLOGY: OK
> > > > > > > > > > > Entities: 7 Interfaces: 7 Pads: 12 Links: 13
> > > > > > > > > > > test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> > > > > > > > > > > test MEDIA_IOC_SETUP_LINK: OK
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/media0: 8, Succeeded: 8, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/video0:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Card type : neoisp
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Device Capabilities
> > > > > > > > > > > Device Caps : 0x04202000
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x0300000a
> > > > > > > > > > > Type : V4L Video
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x00000008 (8)
> > > > > > > > > > > Name : neoisp-input0
> > > > > > > > > > > Function : V4L2 I/O
> > > > > > > > > > > Pad 0x01000009 : 0: Source
> > > > > > > > > > > Link 0x0200000c: to remote pad 0x1000002 of entity
> > > > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled, Immutable
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/video0 open: OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/video0: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/video1:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Card type : neoisp
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Device Capabilities
> > > > > > > > > > > Device Caps : 0x04202000
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x03000010
> > > > > > > > > > > Type : V4L Video
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x0000000e (14)
> > > > > > > > > > > Name : neoisp-input1
> > > > > > > > > > > Function : V4L2 I/O
> > > > > > > > > > > Pad 0x0100000f : 0: Source
> > > > > > > > > > > Link 0x02000012: to remote pad 0x1000003 of entity
> > > > > > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/video1 open: OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/video1: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/video2:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Card type : neoisp
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Device Capabilities
> > > > > > > > > > > Device Caps : 0x0c200000
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x03000016
> > > > > > > > > > > Type : V4L Video
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x00000014 (20)
> > > > > > > > > > > Name : neoisp-params
> > > > > > > > > > > Function : V4L2 I/O
> > > > > > > > > > > Pad 0x01000015 : 0: Source
> > > > > > > > > > > Link 0x02000018: to remote pad 0x1000004 of entity
> > > > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/video2 open: OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/video2: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/video3:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Card type : neoisp
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Device Capabilities
> > > > > > > > > > > Device Caps : 0x04201000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x0300001c
> > > > > > > > > > > Type : V4L Video
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x0000001a (26)
> > > > > > > > > > > Name : neoisp-frame
> > > > > > > > > > > Function : V4L2 I/O
> > > > > > > > > > > Pad 0x0100001b : 0: Sink
> > > > > > > > > > > Link 0x0200001e: from remote pad 0x1000005 of entity
> > > > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/video3 open: OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/video3: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/video4:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Card type : neoisp
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Device Capabilities
> > > > > > > > > > > Device Caps : 0x04201000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x03000022
> > > > > > > > > > > Type : V4L Video
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x00000020 (32)
> > > > > > > > > > > Name : neoisp-ir
> > > > > > > > > > > Function : V4L2 I/O
> > > > > > > > > > > Pad 0x01000021 : 0: Sink
> > > > > > > > > > > Link 0x02000024: from remote pad 0x1000006 of entity
> > > > > > > > > > > 'neoisp' (Image Signal Processor): Data
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/video4 open: OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/video4: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/video5:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Card type : neoisp
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x8ca03000
> > > > > > > > > > > Video Capture Multiplanar
> > > > > > > > > > > Video Output Multiplanar
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Metadata Output
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Device Capabilities
> > > > > > > > > > > Device Caps : 0x04a00000
> > > > > > > > > > > Metadata Capture
> > > > > > > > > > > Streaming
> > > > > > > > > > > Extended Pix Format
> > > > > > > > > > > Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x03000028
> > > > > > > > > > > Type : V4L Video
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x00000026 (38)
> > > > > > > > > > > Name : neoisp-stats
> > > > > > > > > > > Function : V4L2 I/O
> > > > > > > > > > > Pad 0x01000027 : 0: Sink
> > > > > > > > > > > Link 0x0200002a: from remote pad 0x1000007 of entity
> > > > > > > > > > > 'neoisp' (Image Signal Processor): Data, Enabled
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/video5 open: OK
> > > > > > > > > > > test VIDIOC_QUERYCAP: OK
> > > > > > > > > > > test VIDIOC_G/S_PRIORITY: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 0 Private Controls: 0
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK
> > > > > > > > > > > test VIDIOC_S_FMT: OK
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/video5: 48, Succeeded: 48, Failed: 0,
> > > > > > > > > > > Warnings: 0
> > > > > > > > > > > --------------------------------------------------------------------------------
> > > > > > > > > > > Compliance test for neoisp device /dev/v4l-subdev0:
> > > > > > > > > > >
> > > > > > > > > > > Driver Info:
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Capabilities : 0x00000000
> > > > > > > > > > > Client Capabilities: 0x0000000000000002
> > > > > > > > > > > interval-uses-which Media Driver Info:
> > > > > > > > > > > Driver name : neoisp
> > > > > > > > > > > Model : neoisp
> > > > > > > > > > > Serial :
> > > > > > > > > > > Bus info : platform:4ae00000.isp
> > > > > > > > > > > Media version : 6.19.0
> > > > > > > > > > > Hardware revision: 0x00000002 (2)
> > > > > > > > > > > Driver version : 6.19.0
> > > > > > > > > > > Interface Info:
> > > > > > > > > > > ID : 0x0300002c
> > > > > > > > > > > Type : V4L Sub-Device
> > > > > > > > > > > Entity Info:
> > > > > > > > > > > ID : 0x00000001 (1)
> > > > > > > > > > > Name : neoisp
> > > > > > > > > > > Function : Image Signal Processor
> > > > > > > > > > > Pad 0x01000002 : 0: Sink
> > > > > > > > > > > Link 0x0200000c: from remote pad 0x1000009 of entity
> > > > > > > > > > > 'neoisp-input0' (V4L2 I/O): Data, Enabled, Immutable
> > > > > > > > > > > Pad 0x01000003 : 1: Sink
> > > > > > > > > > > Link 0x02000012: from remote pad 0x100000f of entity
> > > > > > > > > > > 'neoisp-input1' (V4L2 I/O): Data
> > > > > > > > > > > Pad 0x01000004 : 2: Sink
> > > > > > > > > > > Link 0x02000018: from remote pad 0x1000015 of entity
> > > > > > > > > > > 'neoisp-params' (V4L2 I/O): Data, Enabled
> > > > > > > > > > > Pad 0x01000005 : 3: Source
> > > > > > > > > > > Link 0x0200001e: to remote pad 0x100001b of entity 'neoisp-
> > > > > > > > > > > frame' (V4L2 I/O): Data, Enabled
> > > > > > > > > > > Pad 0x01000006 : 4: Source
> > > > > > > > > > > Link 0x02000024: to remote pad 0x1000021 of entity 'neoisp-
> > > > > > > > > > > ir' (V4L2 I/O): Data
> > > > > > > > > > > Pad 0x01000007 : 5: Source
> > > > > > > > > > > Link 0x0200002a: to remote pad 0x1000027 of entity 'neoisp-
> > > > > > > > > > > stats' (V4L2 I/O): Data, Enabled
> > > > > > > > > > >
> > > > > > > > > > > Required ioctls:
> > > > > > > > > > > test MC information (see 'Media Driver Info' above): OK
> > > > > > > > > > > test VIDIOC_SUDBEV_QUERYCAP: OK
> > > > > > > > > > > test invalid ioctls: OK
> > > > > > > > > > >
> > > > > > > > > > > Allow for multiple opens:
> > > > > > > > > > > test second /dev/v4l-subdev0 open: OK
> > > > > > > > > > > test VIDIOC_SUBDEV_QUERYCAP: OK
> > > > > > > > > > > test for unlimited opens: OK
> > > > > > > > > > >
> > > > > > > > > > > Debug ioctls:
> > > > > > > > > > > test VIDIOC_LOG_STATUS: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Input ioctls:
> > > > > > > > > > > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDIO: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDIO: OK (Not Supported)
> > > > > > > > > > > Inputs: 0 Audio Inputs: 0 Tuners: 0
> > > > > > > > > > >
> > > > > > > > > > > Output ioctls:
> > > > > > > > > > > test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> > > > > > > > > > > Outputs: 0 Audio Outputs: 0 Modulators: 0
> > > > > > > > > > >
> > > > > > > > > > > Input/Output configuration ioctls:
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G/S_EDID: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Sub-Device ioctls (Sink Pad 0):
> > > > > > > > > > > Try Stream 0
> > > > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > Active Stream 0
> > > > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Sub-Device ioctls (Sink Pad 1):
> > > > > > > > > > > Try Stream 0
> > > > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > Active Stream 0
> > > > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Sub-Device ioctls (Sink Pad 2):
> > > > > > > > > > > Try Stream 0
> > > > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > Active Stream 0
> > > > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Sub-Device ioctls (Source Pad 3):
> > > > > > > > > > > Try Stream 0
> > > > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > Active Stream 0
> > > > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Sub-Device ioctls (Source Pad 4):
> > > > > > > > > > > Try Stream 0
> > > > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > Active Stream 0
> > > > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Sub-Device ioctls (Source Pad 5):
> > > > > > > > > > > Try Stream 0
> > > > > > > > > > > test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > Active Stream 0
> > > > > > > > > > > test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/
> > > > > > > > > > > FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FMT: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> > > > > > > > > > > test Active VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Control ioctls:
> > > > > > > > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> > > > > > > > > > > test VIDIOC_QUERYCTRL: OK
> > > > > > > > > > > test VIDIOC_G/S_CTRL: OK
> > > > > > > > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> > > > > > > > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> > > > > > > > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> > > > > > > > > > > Standard Controls: 1 Private Controls: 1
> > > > > > > > > > >
> > > > > > > > > > > Format ioctls:
> > > > > > > > > > > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not
> > > > > > > > > > > Supported)
> > > > > > > > > > > test VIDIOC_G/S_PARM: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FBUF: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_FMT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_TRY_FMT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_S_FMT: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> > > > > > > > > > > test Cropping: OK (Not Supported)
> > > > > > > > > > > test Composing: OK (Not Supported)
> > > > > > > > > > > test Scaling: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Codec ioctls:
> > > > > > > > > > > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> > > > > > > > > > > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Buffer ioctls:
> > > > > > > > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> > > > > > > > > > > test CREATE_BUFS maximum buffers: OK
> > > > > > > > > > > test VIDIOC_REMOVE_BUFS: OK
> > > > > > > > > > > test VIDIOC_EXPBUF: OK (Not Supported)
> > > > > > > > > > > test Requests: OK (Not Supported)
> > > > > > > > > > >
> > > > > > > > > > > Total for neoisp device /dev/v4l-subdev0: 88, Succeeded: 88, Failed:
> > > > > > > > > > > 0, Warnings: 0
> > > > > > > > > > >
> > > > > > > > > > > Grand Total for neoisp device /dev/media0: 384, Succeeded: 384,
> > > > > > > > > > > Failed: 0, Warnings: 0
> > > > > > > > > > >
> > > > > > > > > > > ---
> > > > > > > > > > > Antoine Bouyer (11):
> > > > > > > > > > > media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions
> > > > > > > > > > > media: v4l2-isp: Add helper function to compute extended stats size
> > > > > > > > > > > media: Documentation: uapi: Update V4L2 ISP for extensible stats
> > > > > > > > > > > media: Documentation: Add NXP neoisp driver documentation
> > > > > > > > > > > dt-bindings: media: Add nxp neoisp support
> > > > > > > > > > > media: v4l2-ctrls: Add user control base for NXP neoisp controls
> > > > > > > > > > > media: Add meta formats supported by NXP neoisp driver
> > > > > > > > > > > media: uapi: Add NXP NEOISP user interface header file
> > > > > > > > > > > media: platform: Add NXP Neoisp Image Signal Processor
> > > > > > > > > > > media: platform: neoisp: Add debugfs support
> > > > > > > > > > > arm64: dts: freescale: imx95: Add NXP neoisp device tree node
> > > > > > > > > > >
> > > > > > > > > > > .../admin-guide/media/nxp-neoisp-diagram.dot | 22 +
> > > > > > > > > > > .../admin-guide/media/nxp-neoisp.dot | 16 +
> > > > > > > > > > > .../admin-guide/media/nxp-neoisp.rst | 189 ++
> > > > > > > > > > > .../admin-guide/media/v4l-drivers.rst | 1 +
> > > > > > > > > > > .../devicetree/bindings/media/nxp,neoisp.yaml | 65 +
> > > > > > > > > > > .../userspace-api/media/v4l/meta-formats.rst | 1 +
> > > > > > > > > > > .../media/v4l/metafmt-nxp-neoisp.rst | 114 +
> > > > > > > > > > > .../userspace-api/media/v4l/v4l2-isp.rst | 42 +-
> > > > > > > > > > > MAINTAINERS | 9 +
> > > > > > > > > > > .../boot/dts/freescale/imx95-19x19-evk.dts | 4 +
> > > > > > > > > > > arch/arm64/boot/dts/freescale/imx95.dtsi | 11 +
> > > > > > > > > > > drivers/media/platform/nxp/Kconfig | 1 +
> > > > > > > > > > > drivers/media/platform/nxp/Makefile | 1 +
> > > > > > > > > > > drivers/media/platform/nxp/neoisp/Kconfig | 15 +
> > > > > > > > > > > drivers/media/platform/nxp/neoisp/Makefile | 8 +
> > > > > > > > > > > drivers/media/platform/nxp/neoisp/neoisp.h | 270 ++
> > > > > > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.c | 2798 +++++++++++++++++
> > > > > > > > > > > .../media/platform/nxp/neoisp/neoisp_ctx.h | 85 +
> > > > > > > > > > > .../platform/nxp/neoisp/neoisp_debugfs.c | 503 +++
> > > > > > > > > > > .../media/platform/nxp/neoisp/neoisp_fmt.h | 509 +++
> > > > > > > > > > > drivers/media/platform/nxp/neoisp/neoisp_hw.h | 577 ++++
> > > > > > > > > > > .../media/platform/nxp/neoisp/neoisp_main.c | 1999 ++++++++++++
> > > > > > > > > > > .../media/platform/nxp/neoisp/neoisp_nodes.h | 60 +
> > > > > > > > > > > .../media/platform/nxp/neoisp/neoisp_regs.h | 2501 +++++++++++++++
> > > > > > > > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 4 +
> > > > > > > > > > > include/media/v4l2-isp.h | 13 +
> > > > > > > > > > > include/uapi/linux/media/nxp/nxp_neoisp.h | 1968 ++++++++++++
> > > > > > > > > > > include/uapi/linux/media/v4l2-isp.h | 85 +
> > > > > > > > > > > include/uapi/linux/v4l2-controls.h | 6 +
> > > > > > > > > > > include/uapi/linux/videodev2.h | 6 +
> > > > > > > > > > > 30 files changed, 11880 insertions(+), 3 deletions(-)
> > > > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp-
> > > > > > > > > > > diagram.dot
> > > > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.dot
> > > > > > > > > > > create mode 100644 Documentation/admin-guide/media/nxp-neoisp.rst
> > > > > > > > > > > create mode 100644 Documentation/devicetree/bindings/media/
> > > > > > > > > > > nxp,neoisp.yaml
> > > > > > > > > > > create mode 100644 Documentation/userspace-api/media/v4l/metafmt-
> > > > > > > > > > > nxp-neoisp.rst
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Kconfig
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/Makefile
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp.h
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.c
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_ctx.h
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_fmt.h
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_hw.h
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_main.c
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_nodes.h
> > > > > > > > > > > create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_regs.h
> > > > > > > > > > > create mode 100644 include/uapi/linux/media/nxp/nxp_neoisp.h
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > >
> > >
>
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [RFC v1 00/11] Add iMX95 neoisp driver
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
` (10 preceding siblings ...)
2026-01-26 9:44 ` [RFC v1 00/11] Add iMX95 neoisp driver Michael Riesch
@ 2026-02-06 20:51 ` Michael Riesch
11 siblings, 0 replies; 49+ messages in thread
From: Michael Riesch @ 2026-02-06 20:51 UTC (permalink / raw)
To: Antoine Bouyer, julien.vuillaumier, alexi.birlinger,
daniel.baluta, peng.fan, frank.li, jacopo.mondi, laurent.pinchart,
mchehab, robh, krzk+dt, conor+dt, shawnguo, s.hauer, kernel,
festevam
Cc: linux-kernel, linux-media, devicetree, linux-arm-kernel
Hi Antoine,
On 1/23/26 09:09, Antoine Bouyer wrote:
> [...]
> This series is posted as RFC because extending the v4l2-isp interface may
> overlap with ongoing work. If similar development already exists, I am
> happy to rebase or adapt the series accordingly. If preferred, the series
> can also be split into two parts: the v4l2-isp rework and the Neo ISP
> driver introduction.
I would be a huge fan of this split, at least when you submit the first
non-RFC patch series.
>
> [...]
Thanks and best regards,
Michael
^ permalink raw reply [flat|nested] 49+ messages in thread