1 /* SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2021 StarFive Technology Co., Ltd.
8 #include <linux/mutex.h>
9 #include <media/videobuf2-v4l2.h>
10 #include <linux/videodev2.h>
11 #include <media/v4l2-dev.h>
12 #include <media/v4l2-device.h>
13 #include <media/v4l2-fh.h>
14 #include <media/v4l2-ioctl.h>
16 #define STFCAMSS_FRAME_MIN_WIDTH 64
17 #define STFCAMSS_FRAME_MAX_WIDTH 1920
18 #define STFCAMSS_FRAME_MIN_HEIGHT 64
19 #define STFCAMSS_FRAME_MAX_HEIGHT 1080
20 #define STFCAMSS_FRAME_WIDTH_ALIGN_8 8
21 #define STFCAMSS_FRAME_WIDTH_ALIGN_128 128
22 #define STFCAMSS_MIN_BUFFERS 2
24 struct stfcamss_buffer {
25 struct vb2_v4l2_buffer vb;
27 struct list_head queue;
31 struct stfcamss_video;
33 struct stfcamss_video_ops {
34 int (*queue_buffer)(struct stfcamss_video *vid,
35 struct stfcamss_buffer *buf);
36 int (*flush_buffers)(struct stfcamss_video *vid,
37 enum vb2_buffer_state state);
45 struct stfcamss_format_info {
54 struct stfcamss_video {
55 struct stfcamss *stfcamss;
57 struct vb2_queue vb2_q;
58 struct video_device vdev;
60 struct media_pipeline pipe;
61 struct v4l2_format active_fmt;
62 enum v4l2_buf_type type;
63 const struct stfcamss_video_ops *ops;
66 unsigned int bpl_alignment;
67 const struct stfcamss_format_info *formats;
68 unsigned int nformats;
72 int stf_video_register(struct stfcamss_video *video,
73 struct v4l2_device *v4l2_dev, const char *name, int is_mp);
75 void stf_video_unregister(struct stfcamss_video *video);
77 #endif /* STF_VIDEO_H */