xref: /openbmc/linux/drivers/media/platform/qcom/camss/camss-video.h (revision cbecf716ca618fd44feda6bd9a64a8179d031fc5)
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