Commit graph

266 commits

Author SHA1 Message Date
Alain Volmat
79e218aaf4 video: gc2145: add CSI mode of the GC2145 sensor
Add possibility to use the gc2145 sensor in CSI mode by
adding the bus-type property in the device-tree.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-06-02 05:48:12 +02:00
Alain Volmat
979d8ff0fe video: gc2145: avoid default DVP enabling
Do not enable by default the DVP streaming to avoid conflict
with the introduction of the MIPI mode of the GC2145.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-06-02 05:48:12 +02:00
Alain Volmat
eeab052505 video: st_mipid02: addition of ST MIPID02 CSI bridge
Addition of the support for the CSI to DVP bridge ST MIPID02.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-06-02 05:48:03 +02:00
Alain Volmat
b0432a8f48 video: add LINK_FREQ ctrl and a helper to retrieve it
Add a ctrl VIDEO_CID_LINK_FREQ to indicate to a sink
the frequency at which a device streams data over
CSI2. Since not all source device currently provide the
LINK_FREQ control, add a helper function to retrieve
it, with a fall-back by doing an approximate via the
PIXEL_RATE control.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-06-02 05:48:03 +02:00
Alain Volmat
b5d8aee7d7 video: common: addition of INTEGER_MENU control type
Add a new INTEGER_MENU type allowing to store signed 64bits
integer into a menu.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-06-02 05:48:03 +02:00
Alain Volmat
087a08c5fb video: sw_generator: remove frmival values check
Now that api core functions check that denominator / numerator are not
null, it is no more necessary to perform this check within drivers.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-28 05:54:15 +02:00
Alain Volmat
5623772ff3 video: remove valid pointer check in api entry points
Now that video api functions have __ASSERT_NO_MSG calls, drivers
do not need to check the entry point functions pointers.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-28 05:54:15 +02:00
Alain Volmat
08df2fd92e video: common: add __ASSERT_NO_MSG in video api function entry
Protect video API functions via __ASSERT_NO_MSG call to ensure that
required pointers are valid when entering functions.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-28 05:54:15 +02:00
Phi Bang Nguyen
e462ef3c07 drivers: video: ov7670: Set default format to RGB565 QVGA
The default format for ov7670 is currently VGA YUYV and it counts on the
smartdma to reset the format to RGB565 QVGA when get_format() is called.

Recently, set_format() is decoupled from get_format() so this assumption
is nolonger correct.

Set the default format to RGB565 QVGA instead.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-23 15:39:31 +02:00
Alain Volmat
1d6c2c7926 drivers: video: introduction of imx335 sensor driver
Add support for the Sony IMX335 CSI sensor.
This sensor supports resolution of 2592x1944 in RGGB bayer format
either 10 or 12 bits and using 2 or 4 CSI lanes.
For the time being only 10 bits on 2 CSI lanes is supported via
this commit.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-22 20:56:38 +02:00
Josuah Demangeon
638cb67191 drivers: video: sw_generator: sort header alphabetically
Sort alphabetically the header added in the previous few commits
as well as the original implementation.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
4f344584ce drivers: video: sw_generator: fix div by zero on very low framerate
When the FPS value stored in data->frame_rate is zero, a division by zero
occurs. Fix it by clamping the frame rate between min and max values.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
5687dc80c7 drivers: video: sw_generator: make k_work_sync a local variable
The documentation of k_work_cancel_delayable_sync() states that the input
k_work_sync parameter needs to be valid until the function call returns,
so there is no need to preserve the state across successive calls.
Now that there is a single work-related field in the struct, rename it
to simply "work".

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
04912d461b drivers: video: sw_generator: introduce the RGB24 test pattern
This complements the 32-bit RGB (XRGB32) test pattern with an equivalent
24-bit RGB (RGB24) implementation.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
d1e71ae901 drivers: video: sw_generator: add support for bayer and YUV formats
This refactors the pattern generator functions to also offer bayer formats
as input. 4 variant of bayer formats are proposed. The pixel packing is
also now split from the color selection: only a single RGB and single YUV
array used by all the pattern generators.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
70b4b93985 drivers: video: sw_generator: modify video_sw_generator_fill_colorbar()
Add a check for the array size to avoid overwriting unrelated memory when
the buffer is too small for the full format. It first check if there is
enough buffer for one line, and fill it programmatically. Then, it will
try to duplicate that line over the entire buffer, in the limit of the
room available.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
82d2f94f12 drivers: video: sw_generator: fix video_sw_generator_enum_frmival()
Return an error on fie.index >= 1 as there is only one framerate entry
per pixelformat, this prevents an endless loop.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
ba5d3bad8b drivers: video: sw_generator: use video_format_caps_index()
Use the video_format_caps_index() function to check if a format matches
any entry of the format caps.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
c15f24de60 drivers: video: sw_generator: refactor: flatten arrays
Help with maintainance and possibly readability by using a more regular
layout for various tables of numbers. This adds a comma on the last
element to help with formatters like clang-format.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Josuah Demangeon
d8d04ba66b drivers: video: sw_generator: preserve full prefix for internal functions
In order to help debugging through GDB and other error messages and debug
tools, convert the __xxx prefix to video_sw_generator_xxx full prefix.
To help keep function names short, use slightly shorter sufixes.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 19:56:30 +02:00
Alberto Escolar Piedras
ed4ed05501 drivers/video/video_ctrls: Fix code compliance issues
Fix issues detected by checkpatch

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2025-05-21 12:35:28 +02:00
Josuah Demangeon
c8ff2b89d9 drivers: video: common: introduce CCI utilities
Add a library for the Camera Common Interface, part of the MIPI CSI
protocol standard defining methods to configure a camera device over I2C,
such as which size for the register address/data.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-21 08:01:12 +02:00
Josuah Demangeon
c67b915482 drivers: video: shell: introduce the video shell
Introduce the video shell and implement some video shell commands.
Make use of the various querying API to implement tab-completion, and
validiate the data, as well as convert string names into integers.
Commands provided: frmival, format, ctrl, start, stop, capture

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-20 18:27:43 +02:00
Phi Bang Nguyen
075ee09bd1 drivers: video: mcux_smartdma: Don't set_format() in get_format()
Do not set_format() when doing get_format(). This design seems initially
to simplify the sample (just get_format() and everything works out of the
box) but it makes thing incomprehensive and error prone.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
d0eedc5192 drivers: video: mcux_csi: Don't set_format() in get_format()
Do not set_format() when doing get_format(). This design seems initially
to simplify the sample (just get_format() and everything works out of the
box) but it makes thing incomprehensive and error prone.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
0c1e2c9e6d drivers: video: Move format pitch setting to bridge drivers
The format pitch (bytesperline) field is typically set by the bridge
drivers, i.e. DMA, ISP drivers who actually handle the memory as they
know exactly the memory layout constraints.

Application just set the pixel format and resolution and must always
read back this field to see what the driver actually sets (to allocate
buffers for example).

Also, drop format pitch setting in sensor drivers as this is not needed.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
0b090fafa3 drivers: video: stm32-dcmi: Drop video_stm32_dcmi_is_fmt_valid
Drop video_stm32_dcmi_is_fmt_valid() as it is not needed. In this
function, (i) checking against a format based on another utility
function video_bits_per_pixel() is not robust, this check is done in
the sensor driver, (ii) checking against the heap size is not
appropriate because this should be done when allocating buffers, not
in get/set format.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
fcadb792be drivers: video: Compute bits per pixel according to format
Compute bits per pixel according to the pixel format instead of
hardcoding it.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Trung Hieu Le
da12135525 drivers: video: ov5640: Fix constrast value sign
Fix sign's register for constrast value.

Signed-off-by: Trung Hieu Le <trunghieu.le@nxp.com>
Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Trung Hieu Le
a3c31a5ca1 drivers: video: ov5640: Fix brightness control register
Fix the sign register for brightness control

Signed-off-by: Trung Hieu Le <trunghieu.le@nxp.com>
Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Trung Hieu Le
cc5f5506da drivers: video: ov5640: Fix HUE register write
SDE_CTRL8_REG's value must be modified using modify_register.

Signed-off-by: Trung Hieu Le <trunghieu.le@nxp.com>
Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
ae63908ae7 drivers: video: ov5640: Drop cur_pixrate internal variable
Update the control value directly. No need for an internal variable.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Farah Fliss
33ff1f65d6 drivers: video: mt9m114: Make the driver multi-instance
The mt9m114 camera driver used to be single-instance.
Improve it to multi-instance.

Signed-off-by: Farah Fliss <farah.fliss@nxp.com>
Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Farah Fliss
46bf6b589f drivers: video: mt9m114: Fix coding style
Fix coding style in a variable naming.

Signed-off-by: Farah Fliss <farah.fliss@nxp.com>
Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
c94bcb883b drivers: video: mipi_csi2rx: Fix type range related to pixel rate
Fix some type range related to pixel rate which can cause overflow.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Phi Bang Nguyen
a1e58acf4b drivers: video: mipi_csi2rx: Explicitly set init priority
The MIPI CSI-2 Rx needs to be initialized after the camera sensor which
is generally initialized with CONFIG_VIDEO_INIT_PRIORITY.

This is currently true "by chance" due to the order the linker links the
object files. This linker order is not easily controlled, so use an
explicit priority value to ensure this requirement.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-20 18:27:35 +02:00
Sylvio Alves
b1ab17a015 driver: video: remove endpoint id in esp32 driver
Remove endpoint ID entry in esp32 video driver needed after
API changes.

Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
2025-05-19 21:55:32 +02:00
Phi Bang Nguyen
7b421398c4 drivers: video: Rename signal variables to avoid compliance violation
Rename signal variables to sig to be compliant with code rule 21.2

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-16 19:00:09 +02:00
Phi Bang Nguyen
9fa1aeea32 drivers: video: Add video_buf_type
M2M devices like ISPs or PxP have two separate buffer queues, i.e.
incoming and outcoming queues. For each API, the driver needs to
distinguish on which queue it needs to take action.

Add video buffer type to support this kind of devices.

- get_caps(), set/get_format(), enqueue()/dequeue(): the buffer type
is embeded in the video_caps, video_format and video_buffer structs

- video_stream_start/stop() : buffer type needs is sent as a parameter

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-16 19:00:09 +02:00
Phi Bang Nguyen
b63fb91622 drivers: video: Drop video_endpoint_id
The video endpoints are already described in the devicetree. The
video_endpoint_id parameter in each video API is not necessary and has
no usage. Drop it.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-16 19:00:09 +02:00
Phi Bang Nguyen
579741e5e5 drivers: video: esp32: Fix flush callback
When stopping, the framework calls driver's stop callback then driver's
flush callback. Hence, driver's flush callback does not need to call
stop callback again.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-05-16 19:00:09 +02:00
Josuah Demangeon
084f0acb36 drivers: video: controls: add the BASE and CAMERA controls
Add all the base controls present like they are in Linux into Zephyr,
limited to those that can apply in the current system:
- Buttons are left as integer for now.
- Some description is modified to fit the Zephyr situation.
- For the minimum number of buffer, Zephyr uses a different mechanism.
- No audio support through the video subsystem.
- Homogenize the wording

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-16 16:11:32 +02:00
Alain Volmat
c1e7bdaa75 video: stm32-dcmi: implement frame interval handling
Implement the video API frame interval handling in order
to control the framerate of capture.

This allow to remove the capture-rate DT property as well.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-13 22:22:09 -04:00
Alain Volmat
df93e20414 video: stm32-dcmi: correct get/set fmt handling
This commit mainly correct the get/set format handling and how
DCMI format is stored within the driver.  struct video_format
within the data structure is used to store the format.
Reworked way to handle get format to avoid calling the sensor
set_fmt whenever performing the get_fmt.
Slightly adjusted code to as much as possible reuse return
values provided by functions.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-13 22:22:09 -04:00
Alain Volmat
c0dae0c9ac video: stm32: dcmi: perform config based on endpoint properties
Perform sensor interface properties parsing based on values
retrieved via the endpoint rather than the root of the node.
Use DT_PROP_OR to ensure proper configuration of optional
settings.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
2025-05-13 22:22:09 -04:00
Josuah Demangeon
e1f4181c29 drivers: video: common: turn ASSERT(false) into CODE_UNREACHABLE
The assert message was not very helpful, CODE_UNREACHABLE is more
readable and requires fewer effort while proofreading.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-12 19:20:45 +02:00
Josuah Demangeon
ee21d397d2 drivers: video: common: optimizations for video_closest_frmival()
In video_closest_frmival(), immediately stop searching when an exact
match is found, as a small performance optimization. Variables
that could be computed only once were moved further outside.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-12 19:20:45 +02:00
Josuah Demangeon
84f0eec62e drivers: video: common: fix video_closest_frmival() fie.index
Fix bug introduced in 46a262ffe6 where the
fie.index field was expected to be incremented by the driver, while it
is the responsibility of the caller to increment it.

Fixes #89663

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-05-12 19:20:45 +02:00
Phi Bang Nguyen
78b9f25f76 drivers: video: Use video interfaces binding for ov7670 and smartdma
Have ov7670 and video smartdma use video interfaces binding. With
this, we can fix the chicken-egg issue in init priority and don't need
the workaround anymore.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-04-26 11:15:50 -04:00
Phi Bang Nguyen
cc17b712f6 drivers: video: smartdma: Fix a typo breaking the build
Fix a typo so that it won't break the build.

Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
2025-04-26 11:15:50 -04:00