During #89407 a driver-specific header stm32_dcmipp.h got introduced to
support new functionnalities not yet covered by video APIs.
Move this header into a new <include/zephyr/drivers/video/> include
direcctory like what other driver classes do.
Signed-off-by: Josuah Demangeon <me@josuah.net>
Commit 64149e4df6 added an "#if defined()"
for configuring DMA channels differently depending on SOC family of the
STM32 HAL, but did not include the STM32H7 family in the same group as
STM32F7. Fix it by adding the STM32H7 in the same #ifdef filter.
Fixes#92015
Signed-off-by: Josuah Demangeon <me@josuah.net>
Correct cmd_video_format return value in case of video_shell_parse_in_out
returns a negative value.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Add shell handling in order to interact with drivers
via the set/get_selection APIs allowing to get/set
crop / compose and get HW capabilities such as
crop bound / compose bound or native size.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Add possibility to perform crop on all pipes and compose (downscale) on
pixel pipes (endpoint #1 and endpoint #2).
Rework the code in order to move the downscale control from
the set_fmt into the set_selection (compose).
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
This bit would be used in order to generate several variants
of Bayer formats, however it shouldn't be enabled for YUV/RGB
formats by default.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Correct wrong macro GC2145_REG_OUTPUT_FMT / GC2145_REG_SYNC_MODE
being used while a different page is being accessed.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Category: Null pointer dereference (CWE-476)
Corrects the logic that validates the result of mipid04_get_format_desc().
Previously, the check was inverted, which could lead to a NULL pointer
dereference when accessing desc->pixelformat.
Fixes Coverity CID: 525183
Signed-off-by: sudarsan N <sudarsansamy2002@gmail.com>
When enumerating controls with VIDEO_CTRL_FLAG_NEXT_CTRL, if child devices
have controls with IDs lower or equal to the ones in the parent devices,
those controls will be accidentally skipped.
Fix this by resetting the query's ID and tracking of the queried device in
the query when moving to the next device in the pipeline.
Signed-off-by: Phi Bang Nguyen <phibang.nguyen@nxp.com>
Signed-off-by: Josuah Demangeon <me@josuah.net>
The previous initialization sequence fails to configure the module
properly. Update the sequence using the code provided by vendor.
The update is verified using the FRDM-MCXN947 SmartDMA camera case
under samples/drivers/video/capture.
Signed-off-by: Kate Wang <yumeng.wang@nxp.com>
Avoid k_sleep() never being called when video_write_reg_retry() and
video_read_reg_retry() have a number of retry set to zero (default).
The default number of retries being controlled by
CONFIG_VIDEO_I2C_RETRY_NUM.
Signed-off-by: Josuah Demangeon <me@josuah.net>
Add weak functions and their call within the dcmipp driver so that
externally provided ISP control functions can be called by the
driver at right timing in order to perform the control of the
ISP part of the DCMIPP.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
The STM32 Digital Camera Memory Interface Pixel Processor (DCMIPP)
is a multi-pipeline camera interface allowing to capture
and process frames from parallel or CSI interfaces depending on its
version.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
This commit add support for the Omnivision OV9655 sensor,
a 1.3MPix Color SXGA (1280x1024 sensor).
Current driver only allow output of 320x240 and 160x120
resolution either in RGB565 or YUYV.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
DMA callback is wrongly named as dmci in the source code,
correct the name to be dcmi_dma_callback.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
The STM32 DMA LL api differ between the STM32F7 and the STM32L4
in order to get the CHANNEL instance information. For that
reason, enclose within preproc statements STM32F7 specific code
and add STM32L4 code related to the DMA configuration for the
DCMI peripheral.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
This commit fixes an error introduced by commit c0dae0c9ac
("video: stm32: dcmi: perform config based on endpoint properties")
in which incorrect instance was being access leading to usage of
the default value for pixel clock / hsync / vsync polarities and bus
width.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Rely on DT_ANY_INST_HAS_PROP_STATUS_OKAY to only build the
gpio handling code for reset pin if this is being used by
one or more instance of the device.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Increase the T4 delay after releasing the reset of the
sensor in order to avoid getting I2C communication issues
at initialization time.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Rely on DT_ANY_INST_HAS_PROP_STATUS_OKAY to only build the
gpio handling code for reset and powerdown pins if this is
being used by one or more instance of the device.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
reset and powerdown pins are optionals.
gpio_is_ready_dt should not be called in case of reset or
powerdown are not present.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Make the video software generator a devicetree node, which allows enabling
several instances, and select it as chosen { zephyr,camera = &... }; node.
It can be enabled via a `video-sw-generator` snippet.
Signed-off-by: Josuah Demangeon <me@josuah.net>
Since QVGA resolution is currently not working in CSI, use VGA
as default resolution to avoid failing during the init of the
driver.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
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>