Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux...
[sfrench/cifs-2.6.git] / include / media / v4l2-mediabus.h
1 /*
2  * Media Bus API header
3  *
4  * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #ifndef V4L2_MEDIABUS_H
12 #define V4L2_MEDIABUS_H
13
14 /*
15  * These pixel codes uniquely identify data formats on the media bus. Mostly
16  * they correspond to similarly named V4L2_PIX_FMT_* formats, format 0 is
17  * reserved, V4L2_MBUS_FMT_FIXED shall be used by host-client pairs, where the
18  * data format is fixed. Additionally, "2X8" means that one pixel is transferred
19  * in two 8-bit samples, "BE" or "LE" specify in which order those samples are
20  * transferred over the bus: "LE" means that the least significant bits are
21  * transferred first, "BE" means that the most significant bits are transferred
22  * first, and "PADHI" and "PADLO" define which bits - low or high, in the
23  * incomplete high byte, are filled with padding bits.
24  */
25 enum v4l2_mbus_pixelcode {
26         V4L2_MBUS_FMT_FIXED = 1,
27         V4L2_MBUS_FMT_YUYV8_2X8,
28         V4L2_MBUS_FMT_YVYU8_2X8,
29         V4L2_MBUS_FMT_UYVY8_2X8,
30         V4L2_MBUS_FMT_VYUY8_2X8,
31         V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
32         V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
33         V4L2_MBUS_FMT_RGB565_2X8_LE,
34         V4L2_MBUS_FMT_RGB565_2X8_BE,
35         V4L2_MBUS_FMT_SBGGR8_1X8,
36         V4L2_MBUS_FMT_SBGGR10_1X10,
37         V4L2_MBUS_FMT_GREY8_1X8,
38         V4L2_MBUS_FMT_Y10_1X10,
39         V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE,
40         V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
41         V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE,
42         V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE,
43         V4L2_MBUS_FMT_SGRBG8_1X8,
44         V4L2_MBUS_FMT_SBGGR12_1X12,
45         V4L2_MBUS_FMT_YUYV8_1_5X8,
46         V4L2_MBUS_FMT_YVYU8_1_5X8,
47         V4L2_MBUS_FMT_UYVY8_1_5X8,
48         V4L2_MBUS_FMT_VYUY8_1_5X8,
49 };
50
51 /**
52  * struct v4l2_mbus_framefmt - frame format on the media bus
53  * @width:      frame width
54  * @height:     frame height
55  * @code:       data format code
56  * @field:      used interlacing type
57  * @colorspace: colorspace of the data
58  */
59 struct v4l2_mbus_framefmt {
60         __u32                           width;
61         __u32                           height;
62         enum v4l2_mbus_pixelcode        code;
63         enum v4l2_field                 field;
64         enum v4l2_colorspace            colorspace;
65 };
66
67 static inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt,
68                                 const struct v4l2_mbus_framefmt *mbus_fmt)
69 {
70         pix_fmt->width = mbus_fmt->width;
71         pix_fmt->height = mbus_fmt->height;
72         pix_fmt->field = mbus_fmt->field;
73         pix_fmt->colorspace = mbus_fmt->colorspace;
74 }
75
76 static inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt,
77                            const struct v4l2_pix_format *pix_fmt,
78                            enum v4l2_mbus_pixelcode code)
79 {
80         mbus_fmt->width = pix_fmt->width;
81         mbus_fmt->height = pix_fmt->height;
82         mbus_fmt->field = pix_fmt->field;
83         mbus_fmt->colorspace = pix_fmt->colorspace;
84         mbus_fmt->code = code;
85 }
86
87 #endif