1*b873663bSTodor Tomov /* SPDX-License-Identifier: GPL-2.0 */ 2ec6859b2STodor Tomov /* 3ec6859b2STodor Tomov * camss-video.h 4ec6859b2STodor Tomov * 5ec6859b2STodor Tomov * Qualcomm MSM Camera Subsystem - V4L2 device node 6ec6859b2STodor Tomov * 7ec6859b2STodor Tomov * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved. 8ec6859b2STodor Tomov * Copyright (C) 2015-2018 Linaro Ltd. 9ec6859b2STodor Tomov */ 10ec6859b2STodor Tomov #ifndef QC_MSM_CAMSS_VIDEO_H 11ec6859b2STodor Tomov #define QC_MSM_CAMSS_VIDEO_H 12ec6859b2STodor Tomov 13ec6859b2STodor Tomov #include <linux/mutex.h> 14ec6859b2STodor Tomov #include <linux/videodev2.h> 15ec6859b2STodor Tomov #include <media/media-entity.h> 16ec6859b2STodor Tomov #include <media/v4l2-dev.h> 17ec6859b2STodor Tomov #include <media/v4l2-device.h> 18ec6859b2STodor Tomov #include <media/v4l2-fh.h> 19ec6859b2STodor Tomov #include <media/v4l2-mediabus.h> 20ec6859b2STodor Tomov #include <media/videobuf2-v4l2.h> 21ec6859b2STodor Tomov 22ec6859b2STodor Tomov struct camss_buffer { 23ec6859b2STodor Tomov struct vb2_v4l2_buffer vb; 24ec6859b2STodor Tomov dma_addr_t addr[3]; 25ec6859b2STodor Tomov struct list_head queue; 26ec6859b2STodor Tomov }; 27ec6859b2STodor Tomov 28ec6859b2STodor Tomov struct camss_video; 29ec6859b2STodor Tomov 30ec6859b2STodor Tomov struct camss_video_ops { 31ec6859b2STodor Tomov int (*queue_buffer)(struct camss_video *vid, struct camss_buffer *buf); 32ec6859b2STodor Tomov int (*flush_buffers)(struct camss_video *vid, 33ec6859b2STodor Tomov enum vb2_buffer_state state); 34ec6859b2STodor Tomov }; 35ec6859b2STodor Tomov 36ec6859b2STodor Tomov struct camss_format_info; 37ec6859b2STodor Tomov 38ec6859b2STodor Tomov struct camss_video { 39ec6859b2STodor Tomov struct camss *camss; 40ec6859b2STodor Tomov struct vb2_queue vb2_q; 41ec6859b2STodor Tomov struct video_device vdev; 42ec6859b2STodor Tomov struct media_pad pad; 43ec6859b2STodor Tomov struct v4l2_format active_fmt; 44ec6859b2STodor Tomov enum v4l2_buf_type type; 45ec6859b2STodor Tomov struct media_pipeline pipe; 46ec6859b2STodor Tomov const struct camss_video_ops *ops; 47ec6859b2STodor Tomov struct mutex lock; 48ec6859b2STodor Tomov struct mutex q_lock; 49ec6859b2STodor Tomov unsigned int bpl_alignment; 50ec6859b2STodor Tomov unsigned int line_based; 51ec6859b2STodor Tomov const struct camss_format_info *formats; 52ec6859b2STodor Tomov unsigned int nformats; 53ec6859b2STodor Tomov }; 54ec6859b2STodor Tomov 55ec6859b2STodor Tomov int msm_video_register(struct camss_video *video, struct v4l2_device *v4l2_dev, 56ec6859b2STodor Tomov const char *name, int is_pix); 57ec6859b2STodor Tomov 58ec6859b2STodor Tomov void msm_video_unregister(struct camss_video *video); 59ec6859b2STodor Tomov 60ec6859b2STodor Tomov #endif /* QC_MSM_CAMSS_VIDEO_H */ 61