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>
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>
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>
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>
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>
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>
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>
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>
Sort alphabetically the header added in the previous few commits
as well as the original implementation.
Signed-off-by: Josuah Demangeon <me@josuah.net>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>