162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * camss-video.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Qualcomm MSM Camera Subsystem - V4L2 device node
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
862306a36Sopenharmony_ci * Copyright (C) 2015-2018 Linaro Ltd.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci#ifndef QC_MSM_CAMSS_VIDEO_H
1162306a36Sopenharmony_ci#define QC_MSM_CAMSS_VIDEO_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/mutex.h>
1462306a36Sopenharmony_ci#include <linux/videodev2.h>
1562306a36Sopenharmony_ci#include <media/media-entity.h>
1662306a36Sopenharmony_ci#include <media/v4l2-dev.h>
1762306a36Sopenharmony_ci#include <media/v4l2-device.h>
1862306a36Sopenharmony_ci#include <media/v4l2-fh.h>
1962306a36Sopenharmony_ci#include <media/v4l2-mediabus.h>
2062306a36Sopenharmony_ci#include <media/videobuf2-v4l2.h>
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct camss_buffer {
2362306a36Sopenharmony_ci	struct vb2_v4l2_buffer vb;
2462306a36Sopenharmony_ci	dma_addr_t addr[3];
2562306a36Sopenharmony_ci	struct list_head queue;
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistruct camss_video;
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct camss_video_ops {
3162306a36Sopenharmony_ci	int (*queue_buffer)(struct camss_video *vid, struct camss_buffer *buf);
3262306a36Sopenharmony_ci	int (*flush_buffers)(struct camss_video *vid,
3362306a36Sopenharmony_ci			     enum vb2_buffer_state state);
3462306a36Sopenharmony_ci};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistruct camss_format_info;
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistruct camss_video {
3962306a36Sopenharmony_ci	struct camss *camss;
4062306a36Sopenharmony_ci	struct vb2_queue vb2_q;
4162306a36Sopenharmony_ci	struct video_device vdev;
4262306a36Sopenharmony_ci	struct media_pad pad;
4362306a36Sopenharmony_ci	struct v4l2_format active_fmt;
4462306a36Sopenharmony_ci	enum v4l2_buf_type type;
4562306a36Sopenharmony_ci	struct media_pipeline pipe;
4662306a36Sopenharmony_ci	const struct camss_video_ops *ops;
4762306a36Sopenharmony_ci	struct mutex lock;
4862306a36Sopenharmony_ci	struct mutex q_lock;
4962306a36Sopenharmony_ci	unsigned int bpl_alignment;
5062306a36Sopenharmony_ci	unsigned int line_based;
5162306a36Sopenharmony_ci	const struct camss_format_info *formats;
5262306a36Sopenharmony_ci	unsigned int nformats;
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciint msm_video_register(struct camss_video *video, struct v4l2_device *v4l2_dev,
5662306a36Sopenharmony_ci		       const char *name, int is_pix);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_civoid msm_video_unregister(struct camss_video *video);
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci#endif /* QC_MSM_CAMSS_VIDEO_H */
61