Hi, Shu-hsiang: On Wed, 2024-10-09 at 19:15 +0800, Shu-hsiang Yang wrote: > Introduces the top media device driver for the MediaTek ISP7X CAMSYS. > The driver maintains the camera system, including sub-device management, > DMA operations, and integration with the V4L2 framework. It handles > request stream data, buffer management, and MediaTek-specific features, > and pipeline management, streaming control, error handling mechanism. > Additionally, it aggregates sub-drivers for the camera interface, raw > and yuv pipelines. > > Signed-off-by: Shu-hsiang Yang <Shu-hsiang.Yang@xxxxxxxxxxxx> > --- [snip] > +struct mtk_cam_device { > + struct device *dev; > + > + struct v4l2_device v4l2_dev; > + struct v4l2_async_notifier notifier; > + struct media_device media_dev; > + void __iomem *base; > + > + struct mtk_scp *scp; > + struct device *smem_dev; > + phandle rproc_phandle; > + struct rproc *rproc_handle; > + > + unsigned int composer_cnt; > + > + unsigned int num_seninf_devices; > + unsigned int num_raw_devices; > + unsigned int num_larb_devices; > + > + /* raw_pipe controller subdev */ > + struct mtk_raw raw; > + struct mutex queue_lock; /* protect queue request */ > + > + unsigned int max_stream_num; > + unsigned int streaming_ctx; > + unsigned int streaming_pipe; > + struct mtk_cam_ctx *ctxs; > + > + /* request related */ > + struct list_head pending_job_list; > + spinlock_t pending_job_lock; /* protect pending_job_list */ > + struct list_head running_job_list; > + unsigned int running_job_count; > + spinlock_t running_job_lock; /* protect running_job_list */ > + > + /* standard v4l2 buffer control */ > + struct list_head dma_pending; > + spinlock_t dma_pending_lock; /* protect dma_pending_list */ > + struct list_head dma_processing; > + spinlock_t dma_processing_lock; /* protect dma_processing_list and dma_processing_count */ > + unsigned int dma_processing_count; I would like scp-related variable has the scp prefix. struct list_head scp_dma_processing; spinlock_t scp_dma_processing_lock; unsigned int scp_dma_processing_count; So it's easy to understand that scp_dma_processing_count's max value is 2. One buffer is currently doing dma, and another one is waiting for dma. Both buffer are queued in scp. Regards, CK > + > + struct mtk_cam_debug_fs *debug_fs; > + struct workqueue_struct *debug_wq; > + struct workqueue_struct *debug_exception_wq; > + wait_queue_head_t debug_exception_waitq; > +}; > +