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