1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * Media Bus API header
4 *
5 * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
6 */
7
8#ifndef __LINUX_V4L2_MEDIABUS_H
9#define __LINUX_V4L2_MEDIABUS_H
10
11#include <linux/media-bus-format.h>
12#include <linux/types.h>
13#include <linux/videodev2.h>
14
15#define V4L2_MBUS_FRAMEFMT_SET_CSC	0x0001
16
17/**
18 * struct v4l2_mbus_framefmt - frame format on the media bus
19 * @width:	image width
20 * @height:	image height
21 * @code:	data format code (from enum v4l2_mbus_pixelcode)
22 * @field:	used interlacing type (from enum v4l2_field)
23 * @colorspace:	colorspace of the data (from enum v4l2_colorspace)
24 * @ycbcr_enc:	YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
25 * @hsv_enc:	HSV encoding of the data (from enum v4l2_hsv_encoding)
26 * @quantization: quantization of the data (from enum v4l2_quantization)
27 * @xfer_func:  transfer function of the data (from enum v4l2_xfer_func)
28 * @flags:	flags (V4L2_MBUS_FRAMEFMT_*)
29 * @reserved:  reserved bytes that can be later used
30 */
31struct v4l2_mbus_framefmt {
32	__u32			width;
33	__u32			height;
34	__u32			code;
35	__u32			field;
36	__u32			colorspace;
37	union {
38		/* enum v4l2_ycbcr_encoding */
39		__u16			ycbcr_enc;
40		/* enum v4l2_hsv_encoding */
41		__u16			hsv_enc;
42	};
43	__u16			quantization;
44	__u16			xfer_func;
45	__u16			flags;
46	__u16			reserved[10];
47};
48
49#ifndef __KERNEL__
50/*
51 * enum v4l2_mbus_pixelcode and its definitions are now deprecated, and
52 * MEDIA_BUS_FMT_ definitions (defined in media-bus-format.h) should be
53 * used instead.
54 *
55 * New defines should only be added to media-bus-format.h. The
56 * v4l2_mbus_pixelcode enum is frozen.
57 */
58
59#define V4L2_MBUS_FROM_MEDIA_BUS_FMT(name)	\
60	V4L2_MBUS_FMT_ ## name = MEDIA_BUS_FMT_ ## name
61
62enum v4l2_mbus_pixelcode {
63	V4L2_MBUS_FROM_MEDIA_BUS_FMT(FIXED),
64
65	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB444_2X8_PADHI_BE),
66	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB444_2X8_PADHI_LE),
67	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB555_2X8_PADHI_BE),
68	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB555_2X8_PADHI_LE),
69	V4L2_MBUS_FROM_MEDIA_BUS_FMT(BGR565_2X8_BE),
70	V4L2_MBUS_FROM_MEDIA_BUS_FMT(BGR565_2X8_LE),
71	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB565_2X8_BE),
72	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB565_2X8_LE),
73	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB666_1X18),
74	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_1X24),
75	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_2X12_BE),
76	V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_2X12_LE),
77	V4L2_MBUS_FROM_MEDIA_BUS_FMT(ARGB8888_1X32),
78
79	V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y8_1X8),
80	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UV8_1X8),
81	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_1_5X8),
82	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_1_5X8),
83	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_1_5X8),
84	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_1_5X8),
85	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_2X8),
86	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_2X8),
87	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_2X8),
88	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_2X8),
89	V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y10_1X10),
90	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY10_2X10),
91	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY10_2X10),
92	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV10_2X10),
93	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU10_2X10),
94	V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y12_1X12),
95	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_1X16),
96	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_1X16),
97	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_1X16),
98	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_1X16),
99	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YDYUYDYV8_1X16),
100	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY10_1X20),
101	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY10_1X20),
102	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV10_1X20),
103	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU10_1X20),
104	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUV10_1X30),
105	V4L2_MBUS_FROM_MEDIA_BUS_FMT(AYUV8_1X32),
106	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY12_2X12),
107	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY12_2X12),
108	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV12_2X12),
109	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU12_2X12),
110	V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY12_1X24),
111	V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY12_1X24),
112	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV12_1X24),
113	V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU12_1X24),
114
115	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR8_1X8),
116	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG8_1X8),
117	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG8_1X8),
118	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB8_1X8),
119	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_ALAW8_1X8),
120	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_ALAW8_1X8),
121	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_ALAW8_1X8),
122	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_ALAW8_1X8),
123	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_DPCM8_1X8),
124	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_DPCM8_1X8),
125	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_DPCM8_1X8),
126	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_DPCM8_1X8),
127	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADHI_BE),
128	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADHI_LE),
129	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADLO_BE),
130	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADLO_LE),
131	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_1X10),
132	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_1X10),
133	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_1X10),
134	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_1X10),
135	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR12_1X12),
136	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG12_1X12),
137	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG12_1X12),
138	V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB12_1X12),
139
140	V4L2_MBUS_FROM_MEDIA_BUS_FMT(JPEG_1X8),
141
142	V4L2_MBUS_FROM_MEDIA_BUS_FMT(S5C_UYVY_JPEG_1X8),
143
144	V4L2_MBUS_FROM_MEDIA_BUS_FMT(AHSV8888_1X32),
145};
146#endif /* __KERNEL__ */
147
148#endif
149