mbox series

[v7,0/5] Add support for DCMIPP camera interface of STMicroelectronics STM32 SoC series

Message ID 20231120170809.728941-1-alain.volmat@foss.st.com
Headers show
Series Add support for DCMIPP camera interface of STMicroelectronics STM32 SoC series | expand

Message

Alain Volmat Nov. 20, 2023, 5:07 p.m. UTC
This patchset introduces support for Digital Camera Memory Interface
Pixel Processor (DCMIPP) of STMicroelectronics STM32 SoC series.

This initial support implements a single capture pipe
allowing RGB565, YUV, Y, RAW8 and JPEG capture with
frame skipping, prescaling and cropping.

DCMIPP is exposed through 3 subdevices:
- dcmipp_dump_parallel: parallel interface handling
- dcmipp_dump_postproc: frame skipping, prescaling and cropping control
- dcmipp_dump_capture: video device capture node

v7:
  - correct byteproc set_fmt handling and compose/crop/fmt handling
  - replace few v4l2_subdev_get_try_* into v4l2_subdev_get_pad_*
  - correct ordering within dcmipp_remove

v6:
  - correct copyright year in all files
  - correct Kconfig (removal of OF addition of select
    VIDEO_V4L2_SUBDEV_API/MEDIA_CONTROLLER
  - add missing mutex_destroy in error handling
  - rely on fwnode_graph_get_endpoint_by_id instead of fwnode_graph_get_next_endpoint
  - rely on device_get_match_data instead of of_device_get_match_data
  - use local variable for pads_flag initialization

v5:
  - removal of dcmipp_frame_size & dcmipp_frame_stride and use
    v4l2_fill_pixfmt
  - correct typos & avoid check of available buffer at start_streaming
    time since this is done by vb2 framework
  - avoid set of pad format in dcmipp_par_ent_init and
    dcmipp_byteproc_ent_init since done via init_cfg
  - reorder bound functions
  - use v4l2_subdev_get_fmt in parallel and byteproc subdevs
  - correct struct dcmipp_ent_device comments
  - removal of dcmipp_hdw_pixel_alignment in bytecap subdev since not
    applicable in this byte mode pipeline

v4:
  - rework of mutex / spinlock handling
  - addition of dma mask setting
  - removal of __maybe_unused, use pm_ptr and new declaration macros
  - driver now only generate a single stm32-dcmipp.ko module instead of
    several as before
  - removal of the component framework usage
  - various small fixes (function names, lowercase values, indentation,
    print formats)
  - register name removal in register access function, only dev_dbg with
    address & values are kept
  - removal of VB2_READ and CAP_READWRITE
  - usage of subdev active state mechanism and removal of locally stored
    format/compose/crop
  - addition of port { } within the stm32mp135.dtsi

v3:
  - Have same To & Cc in all patches emails of the serie so that everybody
    has coherent view of the serie
  - bindings: correct wording, clock-names & label removal
  - driver: replace of_graph call with fwnode_graph
  - driver: use defined bus-type when calling v4l2_fwnode_endpoint_parse
  - driver: remove clock name
  - dtsi: remove clock-names property

v2:
  - removal of pclk-max-frequency from yaml example dts
  - codying-style fixes
  - correction in enum functions (format, mbus, frame_size ...) handling
  - drop of v4l2_pipeline_pm_ calls, and specific open/close handler of
    vdev
  - video dev s_stream handling updated to call s_stream of remote subdev
    instead of loop until sensor subdev
  - code update following media_pipeline & v4l2_async_ api changes since v1
  - removal of IP reset call upon error
  - removal of link_validate handlers
  - addition of V4L2_CAP_IO_MC device_caps
  - removal of the frame skip control for the time being, will be added
    back in another commit once control method will be agreed
  - change byteproc entity type to MEDIA_ENT_F_PROC_VIDEO_SCALER
  - various fixes from Dan & Sakari remarks

Alain Volmat (2):
  dt-bindings: media: add bindings for stm32 dcmipp
  media: MAINTAINERS: add entry for STM32 DCMIPP driver

Hugues Fruchet (3):
  media: stm32-dcmipp: STM32 DCMIPP camera interface driver
  ARM: dts: stm32: add dcmipp support to stm32mp135
  ARM: multi_v7_defconfig: enable STM32 DCMIPP media support

 .../bindings/media/st,stm32-dcmipp.yaml       |  89 ++
 MAINTAINERS                                   |   5 +-
 arch/arm/boot/dts/st/stm32mp135.dtsi          |  11 +
 arch/arm/configs/multi_v7_defconfig           |   1 +
 drivers/media/platform/st/stm32/Kconfig       |  16 +
 drivers/media/platform/st/stm32/Makefile      |   1 +
 .../platform/st/stm32/stm32-dcmipp/Makefile   |   4 +
 .../st/stm32/stm32-dcmipp/dcmipp-bytecap.c    | 914 ++++++++++++++++++
 .../st/stm32/stm32-dcmipp/dcmipp-byteproc.c   | 565 +++++++++++
 .../st/stm32/stm32-dcmipp/dcmipp-common.c     | 106 ++
 .../st/stm32/stm32-dcmipp/dcmipp-common.h     | 216 +++++
 .../st/stm32/stm32-dcmipp/dcmipp-core.c       | 604 ++++++++++++
 .../st/stm32/stm32-dcmipp/dcmipp-parallel.c   | 440 +++++++++
 13 files changed, 2971 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/media/st,stm32-dcmipp.yaml
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/Makefile
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.c
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c
 create mode 100644 drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-parallel.c

Comments

Sakari Ailus Nov. 20, 2023, 9:18 p.m. UTC | #1
Hi Alain,

On Mon, Nov 20, 2023 at 06:07:56PM +0100, Alain Volmat wrote:
> This patchset introduces support for Digital Camera Memory Interface
> Pixel Processor (DCMIPP) of STMicroelectronics STM32 SoC series.
> 
> This initial support implements a single capture pipe
> allowing RGB565, YUV, Y, RAW8 and JPEG capture with
> frame skipping, prescaling and cropping.
> 
> DCMIPP is exposed through 3 subdevices:
> - dcmipp_dump_parallel: parallel interface handling
> - dcmipp_dump_postproc: frame skipping, prescaling and cropping control
> - dcmipp_dump_capture: video device capture node
> 
> v7:
>   - correct byteproc set_fmt handling and compose/crop/fmt handling
>   - replace few v4l2_subdev_get_try_* into v4l2_subdev_get_pad_*

Can you rebase this on my my linuxtv.org tree master branch
<URL:https://git.linuxtv.org/sailus/media_tree.git/log/>?

These will be called v4l2_subdev_state_get_* now.

Thanks.
Alain Volmat Nov. 22, 2023, 7:44 a.m. UTC | #2
Hi Sakari,

On Mon, Nov 20, 2023 at 09:18:40PM +0000, Sakari Ailus wrote:
> Hi Alain,
> 
> On Mon, Nov 20, 2023 at 06:07:56PM +0100, Alain Volmat wrote:
> > This patchset introduces support for Digital Camera Memory Interface
> > Pixel Processor (DCMIPP) of STMicroelectronics STM32 SoC series.
> > 
> > This initial support implements a single capture pipe
> > allowing RGB565, YUV, Y, RAW8 and JPEG capture with
> > frame skipping, prescaling and cropping.
> > 
> > DCMIPP is exposed through 3 subdevices:
> > - dcmipp_dump_parallel: parallel interface handling
> > - dcmipp_dump_postproc: frame skipping, prescaling and cropping control
> > - dcmipp_dump_capture: video device capture node
> > 
> > v7:
> >   - correct byteproc set_fmt handling and compose/crop/fmt handling
> >   - replace few v4l2_subdev_get_try_* into v4l2_subdev_get_pad_*
> 
> Can you rebase this on my my linuxtv.org tree master branch
> <URL:https://git.linuxtv.org/sailus/media_tree.git/log/>?
> 
> These will be called v4l2_subdev_state_get_* now.

Ok, serie v8 is now rebased on top of the master branch of your tree.
I'm going to push the rebased gc2145 sensor driver as well in a moment.

Thanks.
Alain

> 
> Thanks.
> 
> -- 
> Regards,
> 
> Sakari Ailus
Sakari Ailus Nov. 22, 2023, 8:07 a.m. UTC | #3
Hi Alain,

On Wed, Nov 22, 2023 at 08:44:04AM +0100, Alain Volmat wrote:
> Hi Sakari,
> 
> On Mon, Nov 20, 2023 at 09:18:40PM +0000, Sakari Ailus wrote:
> > Hi Alain,
> > 
> > On Mon, Nov 20, 2023 at 06:07:56PM +0100, Alain Volmat wrote:
> > > This patchset introduces support for Digital Camera Memory Interface
> > > Pixel Processor (DCMIPP) of STMicroelectronics STM32 SoC series.
> > > 
> > > This initial support implements a single capture pipe
> > > allowing RGB565, YUV, Y, RAW8 and JPEG capture with
> > > frame skipping, prescaling and cropping.
> > > 
> > > DCMIPP is exposed through 3 subdevices:
> > > - dcmipp_dump_parallel: parallel interface handling
> > > - dcmipp_dump_postproc: frame skipping, prescaling and cropping control
> > > - dcmipp_dump_capture: video device capture node
> > > 
> > > v7:
> > >   - correct byteproc set_fmt handling and compose/crop/fmt handling
> > >   - replace few v4l2_subdev_get_try_* into v4l2_subdev_get_pad_*
> > 
> > Can you rebase this on my my linuxtv.org tree master branch
> > <URL:https://git.linuxtv.org/sailus/media_tree.git/log/>?
> > 
> > These will be called v4l2_subdev_state_get_* now.
> 
> Ok, serie v8 is now rebased on top of the master branch of your tree.
> I'm going to push the rebased gc2145 sensor driver as well in a moment.

Thanks. Hans said he's going to merge the API change later this week (Mauro
might do that earlier), I'll take these then.