Re: [PATCH v1 000/107] media: ti-vpe: cal: Add media controller support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Benoit Parrot <bparrot@xxxxxx> wrote on Fri [2020-Jun-19 09:53:03 -0500]:
> Hi Laurent,
> 
> Except for patch 56, 78, 84 and 107.

Sorry, hit send too quickly here.

Except for patch 8, 30, 56, 68, 78, 84 and 107.

> 
> Reviewed-by: Benoit Parrot <bparrot@xxxxxx>
> 
> Benoit
> 
> Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> wrote on Mon [2020-Jun-15 02:57:57 +0300]:
> > Hello,
> > 
> > This small patch series adds media controller support to the ti-cal
> > driver.
> > 
> > The end goal is to support pipelines where the image source is more
> > complex than a single subdev (for instance a SMIA++-compliant sensor, or
> > an FPD-Link source made of a camera, a serializer and a deserializer),
> > and to prepare for support of multiple hardware contexts, needed for
> > CSI-2 virtual channel and data type multiplexing support. These use
> > cases require configuration of the external pipeline from userspace, and
> > thus need support for the media controller and V4L2 subdev userspace
> > APIs.
> > 
> > The series starts with miscellaneous cleanups and refactoring, in
> > patches 001/107 to 083/107. Worth being noted is the split of the large
> > driver into multiple files, with patch 081/107 moving video node
> > handling to cal-video.c and patch 083/107 moving CAMERARX handling to
> > cal-camerarx.c.
> > 
> > Interleaved with more cleanup and refactoring, patch 084/107 creates
> > subdevs for the CAMERARX instances, patch 090/107 implements the subdev
> > operations, and patch 091/107 uses the subdev .set_fmt() and .s_stream()
> > operations to configure and control the CAMERARX. 
> > 
> > More refactoring and cleanup follow in patches 092/107 to 106/107, until
> > patch 107/107 that adds media controller support. As the existing video
> > node centric API needs to be preserved to avoid breaking userspace
> > applications, a module parameter is added to enable the media controller
> > API. Changes are otherwise fairly limited, and mostly involve the
> > implementation of MC-centric V4L2 ioctl handlers (which are far simpler
> > than their video node centric equivalents), additional pipeline
> > validation in the vb2 start streaming handler, and disabling control
> > handling in the video nodes.
> > 
> > The patches have been tested on an AM65x EVM with an OV5640 camera
> > module with the yavta test application, both in MC mode and in legacy
> > mode. As the ov5640 driver sets a default format identical to the
> > default of the ti-cal driver, capture in both modes can simply be tested
> > with
> > 
> > 	yavta -f UYVY -s 640x480 -c10 --requeue-last /dev/video0
> > 
> > without requiring manual pipeline setup through the media controller
> > API. Usage of other formats or resolutions require pipeline
> > configuration before capture.
> > 
> > Laurent Pinchart (107):
> >   media: ti-vpe: cal: Sort headers alphabetically
> >   media: ti-vpe: cal: Avoid function forward declaration
> >   media: ti-vpe: cal: Decouple CSI2 port and CPORT
> >   media: ti-vpe: cal: Index CSI-2 port starting at 0
> >   media: ti-vpe: cal: Index IRQ registersstarting at 0
> >   media: ti-vpe: cal: Merge all status variables in IRQ handler
> >   media: ti-vpe: cal: Inline CAL_VERSION macro in its only user
> >   media: ti-vpe: cal: Turn reg_(read|write)_field() into inline
> >     functions
> >   media: ti-vpe: cal: Make cal_formats array const
> >   media: ti-vpe: cal: Remove needless variable initialization
> >   media: ti-vpe: cal: Remove needless casts
> >   media: ti-vpe: cal: Turn boolean variable into bool
> >   media: ti-vpe: cal: Make loop indices unsigned where applicable
> >   media: ti-vpe: cal: Embed base_fields array in struct cal_csi2_phy
> >   media: ti-vpe: cal: Don't modify cal_csi2_phy base_fields
> >   media: ti-vpe: cal: Store PHY regmap fields in struct cc_data
> >   media: ti-vpe: cal: Rename cal_csi2_phy base_fields to fields
> >   media: ti-vpe: cal: Make structure fields unsigned where applicable
> >   media: ti-vpe: cal: Constify platform data
> >   media: ti-vpe: cal: Remove static const cal_regmap_config template
> >   media: ti-vpe: cal: Remove unused structure fields
> >   media: ti-vpe: cal: Remove flags field from struct cal_dev
> >   media: ti-vpe: cal: Move function to avoid forward declaration
> >   media: ti-vpe: cal: Rename cc_data to cal_camerarx
> >   media: ti-vpe: cal: Rename cal_csi2_phy to cal_camerarx_data
> >   media: ti-vpe: cal: Name all cal_dev pointers consistently
> >   media: ti-vpe: cal: Name all cal_camerarx pointers consistently
> >   media: ti-vpe: cal: Remove internal phy structure from cal_camerarx
> >   media: ti-vpe: cal: Store instance ID and cal pointer in cal_camerarx
> >   media: ti-vpe: cal: Use dev_* print macros
> >   media: ti-vpe: cal: Add print macros for the cal_camerarx instances
> >   media: ti-vpe: cal: Store sensor-related data in cal_camerarx
> >   media: ti-vpe: cal: Create consistent naming for CAMERARX functions
> >   media: ti-vpe: cal: Group CAMERARX-related functions together
> >   media: ti-vpe: cal: Create consistent naming for context functions
> >   media: ti-vpe: cal: Reorganize remaining code in sections
> >   media: ti-vpe: cal: Rename cal_ctx.csi2_port to cal_ctx.index
> >   media: ti-vpe: cal: Use correct device name for bus_info
> >   media: ti-vpe: cal: Get struct device without going through
> >     v4l2_device
> >   media: ti-vpe: cal: Use ctx_info() instead of v4l2_info()
> >   media: ti-vpe: cal: Use a loop to create CAMERARX and context
> >     instances
> >   media: ti-vpe: cal: Drop struct cal_dev v4l2_dev field
> >   media: ti-vpe: cal: Split CAMERARX syscon regmap retrieval to a
> >     function
> >   media: ti-vpe: cal: Use syscon_regmap_lookup_by_phandle_args()
> >   media: ti-vpe: cal: Inline cal_get_camerarx_regmap() in caller
> >   media: ti-vpe: cal: Add comments to cal_probe() to delimitate sections
> >   media: ti-vpe: cal: Rename cal_create_instance() to cal_ctx_create()
> >   media: ti-vpe: cal: Hardcode virtual channel to 0
> >   media: ti-vpe: cal: Use of_graph_get_endpoint_by_regs() to parse OF
> >   media: ti-vpe: cal: Fix usage of v4l2_fwnode_endpoint_parse()
> >   media: ti-vpe: cal: Decouple control handler from v4l2_device
> >   media: ti-vpe: cal: Move v4l2_device from cal_ctx to cal_dev
> >   media: ti-vpe: cal: Split video device initialization and registration
> >   media: ti-vpe: cal: Add context V4L2 cleanup and unregister functions
> >   media: ti-vpe: cal: Unregister video device before cleanup
> >   media: ti-vpe: cal: Add cal_camerarx_destroy() to cleanup CAMERARX
> >   media: ti-vpe: cal: Move DT parsing to CAMERARX
> >   media: ti-vpe: cal: Use ARRAY_SIZE to replace numerical value
> >   media: ti-vpe: cal: Move all sensor-related init to .bound() notifier
> >   media: ti-vpe: cal: Allow multiple contexts per subdev notifier
> >   media: ti-vpe: cal: Move async notifiers from contexts to cal_dev
> >   media: ti-vpe: cal: Replace context with phy in async notifier entries
> >   media: ti-vpe: cal: Operate on phy instances in cal_quickdump_regs()
> >   media: ti-vpe: cal: Decouple context and phy cleanup at remove time
> >   media: ti-vpe: cal: Move CAL_NUM_CSI2_PORTS from cal_regs.h to cal.c
> >   media: ti-vpe: cal: Remove isvcirqset() and isportirqset() macros
> >   media: ti-vpe: cal: Replace number of ports numerical value by macro
> >   media: ti-vpe: cal: Split media initialization and cleanup to
> >     functions
> >   media: ti-vpe: cal: Read hardware revision earlier during probe
> >   media: ti-vpe: cal: Print revision and hwinfo in a more readable
> >     format
> >   media: ti-vpe: cal: Store struct device in cal_dev
> >   media: ti-vpe: cal: Register a media device
> >   media: ti-vpe: cal: Init formats in cal_ctx_v4l2_register()
> >   media: ti-vpe: cal: Allocate cal_ctx active_fmt array dynamically
> >   media: ti-vpe: cal: Inline cal_camerarx_max_lanes() in its only caller
> >   media: ti-vpe: cal: Reorder camerarx functions to prepare refactoring
> >   media: ti-vpe: cal: Refactor camerarx start and stop
> >   media: ti-vpe: cal: Don't store external rate in cal_camerarx
> >   media: ti-vpe: cal: Remove unneeded phy->sensor NULL check
> >   media: ti-vpe: cal: Use 'unsigned int' type instead of 'unsigned'
> >   media: ti-vpe: cal: Split video node handling to cal-video.c
> >   media: ti-vpe: cal: Move CAL I/O accessors to cal.h
> >   media: ti-vpe: cal: Split CAMERARX handling to cal-camerarx.c
> >   media: ti-vpe: cal: Create subdev for CAMERARX
> >   media: ti-vpe: cal: Drop cal_ctx m_fmt field
> >   media: ti-vpe: cal: Move format handling to cal.c and expose helpers
> >   media: ti-vpe: cal: Rename MAX_(WIDTH|HEIGHT)_* macros with CAL_
> >     prefix
> >   media: ti-vpe: cal: Replace hardcoded BIT() value with macro
> >   media: ti-vpe: cal: Iterate over correct number of CAMERARX instances
> >   media: ti-vpe: cal: Implement subdev ops for CAMERARX
> >   media: ti-vpe: cal: Use CAMERARX subdev s_stream op in video device
> >     code
> >   media: ti-vpe: cal: Don't pass format to cal_ctx_wr_dma_config()
> >   media: ti-vpe: cal: Rename struct cal_fmt to cal_format_info
> >   media: ti-vpe: cal: Refactor interrupt enable/disable
> >   media: ti-vpe: cal: Fold PPI enable in CAMERARX .s_stream()
> >   media: ti-vpe: cal: Stop write DMA without disabling PPI
> >   media: ti-vpe: cal: Use spin_lock_irq() when starting or stopping
> >     stream
> >   media: ti-vpe: cal: Share buffer release code between start and stop
> >   media: ti-vpe: cal: Drop V4L2_CAP_READWRITE
> >   media: ti-vpe: cal: Drop unneeded check in cal_calc_format_size()
> >   media: ti-vpe: cal: Remove DMA queue empty check at start streaming
> >     time
> >   media: ti-vpe: cal: Use list_first_entry()
> >   media: ti-vpe: cal: Group all DMA queue fields in struct cal_dmaqueue
> >   media: ti-vpe: cal: Set cal_dmaqueue.pending to NULL when no pending
> >     buffer
> >   media: ti-vpe: cal: Store buffer DMA address in dma_addr_t
> >   media: ti-vpe: cal: Simplify the context API
> >   media: ti-vpe: cal: Implement media controller centric API
> > 
> >  drivers/media/platform/ti-vpe/Makefile       |    2 +-
> >  drivers/media/platform/ti-vpe/cal-camerarx.c |  857 ++++++
> >  drivers/media/platform/ti-vpe/cal-video.c    |  957 ++++++
> >  drivers/media/platform/ti-vpe/cal.c          | 2732 +++++-------------
> >  drivers/media/platform/ti-vpe/cal.h          |  310 ++
> >  drivers/media/platform/ti-vpe/cal_regs.h     |   74 +-
> >  6 files changed, 2865 insertions(+), 2067 deletions(-)
> >  create mode 100644 drivers/media/platform/ti-vpe/cal-camerarx.c
> >  create mode 100644 drivers/media/platform/ti-vpe/cal-video.c
> >  create mode 100644 drivers/media/platform/ti-vpe/cal.h
> > 
> > -- 
> > Regards,
> > 
> > Laurent Pinchart
> > 



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux