v4l2: fixed v4l2 compliance issue
[platform/kernel/linux-starfive.git] / drivers / media / platform / starfive / v4l2_driver / stf_video.h
1 /* SPDX-License-Identifier: GPL-2.0
2  *
3  * Copyright (C) 2021 StarFive Technology Co., Ltd.
4  */
5 #ifndef STF_VIDEO_H
6 #define STF_VIDEO_H
7
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>
15
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
23
24 struct stfcamss_buffer {
25         struct vb2_v4l2_buffer vb;
26         dma_addr_t addr[3];
27         struct list_head queue;
28         int sizeimage;
29 };
30
31 struct stfcamss_video;
32
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);
38 };
39
40 struct fract {
41         u8 numerator;
42         u8 denominator;
43 };
44
45 struct stfcamss_format_info {
46         u32 code;
47         u32 pixelformat;
48         u8 planes;
49         struct fract hsub[3];
50         struct fract vsub[3];
51         u8 bpp[3];
52 };
53
54 struct stfcamss_video {
55         struct stfcamss *stfcamss;
56         u8 id;
57         struct vb2_queue vb2_q;
58         struct video_device vdev;
59         struct media_pad pad;
60         struct media_pipeline pipe;
61         struct v4l2_format active_fmt;
62         enum v4l2_buf_type type;
63         const struct stfcamss_video_ops *ops;
64         struct mutex lock;
65         struct mutex q_lock;
66         unsigned int bpl_alignment;
67         const struct stfcamss_format_info *formats;
68         unsigned int nformats;
69         unsigned int is_mp;
70 };
71
72 int stf_video_register(struct stfcamss_video *video,
73                 struct v4l2_device *v4l2_dev, const char *name, int is_mp);
74
75 void stf_video_unregister(struct stfcamss_video *video);
76
77 #endif /* STF_VIDEO_H */