18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * camss-video.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Qualcomm MSM Camera Subsystem - V4L2 device node
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
88c2ecf20Sopenharmony_ci * Copyright (C) 2015-2018 Linaro Ltd.
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci#ifndef QC_MSM_CAMSS_VIDEO_H
118c2ecf20Sopenharmony_ci#define QC_MSM_CAMSS_VIDEO_H
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <linux/mutex.h>
148c2ecf20Sopenharmony_ci#include <linux/videodev2.h>
158c2ecf20Sopenharmony_ci#include <media/media-entity.h>
168c2ecf20Sopenharmony_ci#include <media/v4l2-dev.h>
178c2ecf20Sopenharmony_ci#include <media/v4l2-device.h>
188c2ecf20Sopenharmony_ci#include <media/v4l2-fh.h>
198c2ecf20Sopenharmony_ci#include <media/v4l2-mediabus.h>
208c2ecf20Sopenharmony_ci#include <media/videobuf2-v4l2.h>
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistruct camss_buffer {
238c2ecf20Sopenharmony_ci	struct vb2_v4l2_buffer vb;
248c2ecf20Sopenharmony_ci	dma_addr_t addr[3];
258c2ecf20Sopenharmony_ci	struct list_head queue;
268c2ecf20Sopenharmony_ci};
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistruct camss_video;
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_cistruct camss_video_ops {
318c2ecf20Sopenharmony_ci	int (*queue_buffer)(struct camss_video *vid, struct camss_buffer *buf);
328c2ecf20Sopenharmony_ci	int (*flush_buffers)(struct camss_video *vid,
338c2ecf20Sopenharmony_ci			     enum vb2_buffer_state state);
348c2ecf20Sopenharmony_ci};
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_cistruct camss_format_info;
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistruct camss_video {
398c2ecf20Sopenharmony_ci	struct camss *camss;
408c2ecf20Sopenharmony_ci	struct vb2_queue vb2_q;
418c2ecf20Sopenharmony_ci	struct video_device vdev;
428c2ecf20Sopenharmony_ci	struct media_pad pad;
438c2ecf20Sopenharmony_ci	struct v4l2_format active_fmt;
448c2ecf20Sopenharmony_ci	enum v4l2_buf_type type;
458c2ecf20Sopenharmony_ci	struct media_pipeline pipe;
468c2ecf20Sopenharmony_ci	const struct camss_video_ops *ops;
478c2ecf20Sopenharmony_ci	struct mutex lock;
488c2ecf20Sopenharmony_ci	struct mutex q_lock;
498c2ecf20Sopenharmony_ci	unsigned int bpl_alignment;
508c2ecf20Sopenharmony_ci	unsigned int line_based;
518c2ecf20Sopenharmony_ci	const struct camss_format_info *formats;
528c2ecf20Sopenharmony_ci	unsigned int nformats;
538c2ecf20Sopenharmony_ci};
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ciint msm_video_register(struct camss_video *video, struct v4l2_device *v4l2_dev,
568c2ecf20Sopenharmony_ci		       const char *name, int is_pix);
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_civoid msm_video_unregister(struct camss_video *video);
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci#endif /* QC_MSM_CAMSS_VIDEO_H */
61