aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-04-21 05:12:35 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-04-21 05:12:35 -0400
commit676ee36be04985062522804c2de04f0764212be6 (patch)
tree781df135c5a91a04decad1b7d53b5a925dc11522 /include
parentb18042a673e88c9457a6d1716219c2367ca447b0 (diff)
parente183201b9e917daf2530b637b2f34f1d5afb934d (diff)
Merge branch 'patchwork' into v4l_for_linus
* patchwork: (404 commits) [media] uvcvideo: add support for VIDIOC_QUERY_EXT_CTRL [media] uvcvideo: fix cropcap v4l2-compliance failure [media] media: omap3isp: remove unused clkdev [media] coda: Add tracing support [media] coda: drop dma_sync_single_for_device in coda_bitstream_queue [media] coda: fix fill bitstream errors in nonstreaming case [media] coda: call SEQ_END when the first queue is stopped [media] coda: fail to start streaming if userspace set invalid formats [media] coda: remove duplicate error messages for buffer allocations [media] coda: move parameter buffer in together with context buffer allocation [media] coda: allocate bitstream buffer from REQBUFS, size depends on the format [media] coda: allocate per-context buffers from REQBUFS [media] coda: use strlcpy instead of snprintf [media] coda: bitstream payload is unsigned [media] coda: fix double call to debugfs_remove [media] coda: check kasprintf return value in coda_open [media] coda: bitrate can only be set in kbps steps [media] v4l2-mem2mem: no need to initialize b in v4l2_m2m_next_buf and v4l2_m2m_buf_remove [media] s5p-mfc: set allow_zero_bytesused flag for vb2_queue_init [media] coda: set allow_zero_bytesused flag for vb2_queue_init ...
Diffstat (limited to 'include')
-rw-r--r--include/dt-bindings/media/xilinx-vip.h39
-rw-r--r--include/linux/fixp-arith.h145
-rw-r--r--include/linux/kconfig.h9
-rw-r--r--include/media/adv7604.h83
-rw-r--r--include/media/davinci/vpfe_capture.h2
-rw-r--r--include/media/media-entity.h21
-rw-r--r--include/media/mt9p031.h2
-rw-r--r--include/media/omap3isp.h38
-rw-r--r--include/media/ov2659.h34
-rw-r--r--include/media/saa7146_vv.h4
-rw-r--r--include/media/v4l2-clk.h10
-rw-r--r--include/media/v4l2-dev.h1
-rw-r--r--include/media/v4l2-device.h2
-rw-r--r--include/media/v4l2-ioctl.h6
-rw-r--r--include/media/v4l2-of.h30
-rw-r--r--include/media/v4l2-subdev.h55
-rw-r--r--include/media/videobuf2-core.h20
-rw-r--r--include/uapi/linux/Kbuild1
-rw-r--r--include/uapi/linux/am437x-vpfe.h2
-rw-r--r--include/uapi/linux/media-bus-format.h19
-rw-r--r--include/uapi/linux/media.h52
-rw-r--r--include/uapi/linux/v4l2-dv-timings.h64
-rw-r--r--include/uapi/linux/v4l2-subdev.h12
-rw-r--r--include/uapi/linux/videodev2.h18
-rw-r--r--include/uapi/linux/xilinx-v4l2-controls.h73
25 files changed, 528 insertions, 214 deletions
diff --git a/include/dt-bindings/media/xilinx-vip.h b/include/dt-bindings/media/xilinx-vip.h
new file mode 100644
index 000000000000..6298fec00685
--- /dev/null
+++ b/include/dt-bindings/media/xilinx-vip.h
@@ -0,0 +1,39 @@
1/*
2 * Xilinx Video IP Core
3 *
4 * Copyright (C) 2013-2015 Ideas on Board
5 * Copyright (C) 2013-2015 Xilinx, Inc.
6 *
7 * Contacts: Hyun Kwon <hyun.kwon@xilinx.com>
8 * Laurent Pinchart <laurent.pinchart@ideasonboard.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#ifndef __DT_BINDINGS_MEDIA_XILINX_VIP_H__
16#define __DT_BINDINGS_MEDIA_XILINX_VIP_H__
17
18/*
19 * Video format codes as defined in "AXI4-Stream Video IP and System Design
20 * Guide".
21 */
22#define XVIP_VF_YUV_422 0
23#define XVIP_VF_YUV_444 1
24#define XVIP_VF_RBG 2
25#define XVIP_VF_YUV_420 3
26#define XVIP_VF_YUVA_422 4
27#define XVIP_VF_YUVA_444 5
28#define XVIP_VF_RGBA 6
29#define XVIP_VF_YUVA_420 7
30#define XVIP_VF_YUVD_422 8
31#define XVIP_VF_YUVD_444 9
32#define XVIP_VF_RGBD 10
33#define XVIP_VF_YUVD_420 11
34#define XVIP_VF_MONO_SENSOR 12
35#define XVIP_VF_CUSTOM2 13
36#define XVIP_VF_CUSTOM3 14
37#define XVIP_VF_CUSTOM4 15
38
39#endif /* __DT_BINDINGS_MEDIA_XILINX_VIP_H__ */
diff --git a/include/linux/fixp-arith.h b/include/linux/fixp-arith.h
index 3089d7382325..d4686fe1cac7 100644
--- a/include/linux/fixp-arith.h
+++ b/include/linux/fixp-arith.h
@@ -1,6 +1,8 @@
1#ifndef _FIXP_ARITH_H 1#ifndef _FIXP_ARITH_H
2#define _FIXP_ARITH_H 2#define _FIXP_ARITH_H
3 3
4#include <linux/math64.h>
5
4/* 6/*
5 * Simplistic fixed-point arithmetics. 7 * Simplistic fixed-point arithmetics.
6 * Hmm, I'm probably duplicating some code :( 8 * Hmm, I'm probably duplicating some code :(
@@ -29,59 +31,126 @@
29 31
30#include <linux/types.h> 32#include <linux/types.h>
31 33
32/* The type representing fixed-point values */ 34static const s32 sin_table[] = {
33typedef s16 fixp_t; 35 0x00000000, 0x023be165, 0x04779632, 0x06b2f1d2, 0x08edc7b6, 0x0b27eb5c,
36 0x0d61304d, 0x0f996a26, 0x11d06c96, 0x14060b67, 0x163a1a7d, 0x186c6ddd,
37 0x1a9cd9ac, 0x1ccb3236, 0x1ef74bf2, 0x2120fb82, 0x234815ba, 0x256c6f9e,
38 0x278dde6e, 0x29ac379f, 0x2bc750e8, 0x2ddf003f, 0x2ff31bdd, 0x32037a44,
39 0x340ff241, 0x36185aee, 0x381c8bb5, 0x3a1c5c56, 0x3c17a4e7, 0x3e0e3ddb,
40 0x3fffffff, 0x41ecc483, 0x43d464fa, 0x45b6bb5d, 0x4793a20f, 0x496af3e1,
41 0x4b3c8c11, 0x4d084650, 0x4ecdfec6, 0x508d9210, 0x5246dd48, 0x53f9be04,
42 0x55a6125a, 0x574bb8e5, 0x58ea90c2, 0x5a827999, 0x5c135399, 0x5d9cff82,
43 0x5f1f5ea0, 0x609a52d1, 0x620dbe8a, 0x637984d3, 0x64dd894f, 0x6639b039,
44 0x678dde6d, 0x68d9f963, 0x6a1de735, 0x6b598ea1, 0x6c8cd70a, 0x6db7a879,
45 0x6ed9eba0, 0x6ff389de, 0x71046d3c, 0x720c8074, 0x730baeec, 0x7401e4bf,
46 0x74ef0ebb, 0x75d31a5f, 0x76adf5e5, 0x777f903b, 0x7847d908, 0x7906c0af,
47 0x79bc384c, 0x7a6831b8, 0x7b0a9f8c, 0x7ba3751c, 0x7c32a67c, 0x7cb82884,
48 0x7d33f0c8, 0x7da5f5a3, 0x7e0e2e31, 0x7e6c924f, 0x7ec11aa3, 0x7f0bc095,
49 0x7f4c7e52, 0x7f834ecf, 0x7fb02dc4, 0x7fd317b3, 0x7fec09e1, 0x7ffb025e,
50 0x7fffffff
51};
34 52
35#define FRAC_N 8 53/**
36#define FRAC_MASK ((1<<FRAC_N)-1) 54 * __fixp_sin32() returns the sin of an angle in degrees
55 *
56 * @degrees: angle, in degrees, from 0 to 360.
57 *
58 * The returned value ranges from -0x7fffffff to +0x7fffffff.
59 */
60static inline s32 __fixp_sin32(int degrees)
61{
62 s32 ret;
63 bool negative = false;
37 64
38/* Not to be used directly. Use fixp_{cos,sin} */ 65 if (degrees > 180) {
39static const fixp_t cos_table[46] = { 66 negative = true;
40 0x0100, 0x00FF, 0x00FF, 0x00FE, 0x00FD, 0x00FC, 0x00FA, 0x00F8, 67 degrees -= 180;
41 0x00F6, 0x00F3, 0x00F0, 0x00ED, 0x00E9, 0x00E6, 0x00E2, 0x00DD, 68 }
42 0x00D9, 0x00D4, 0x00CF, 0x00C9, 0x00C4, 0x00BE, 0x00B8, 0x00B1, 69 if (degrees > 90)
43 0x00AB, 0x00A4, 0x009D, 0x0096, 0x008F, 0x0087, 0x0080, 0x0078, 70 degrees = 180 - degrees;
44 0x0070, 0x0068, 0x005F, 0x0057, 0x004F, 0x0046, 0x003D, 0x0035,
45 0x002C, 0x0023, 0x001A, 0x0011, 0x0008, 0x0000
46};
47 71
72 ret = sin_table[degrees];
48 73
49/* a: 123 -> 123.0 */ 74 return negative ? -ret : ret;
50static inline fixp_t fixp_new(s16 a)
51{
52 return a<<FRAC_N;
53} 75}
54 76
55/* a: 0xFFFF -> -1.0 77/**
56 0x8000 -> 1.0 78 * fixp_sin32() returns the sin of an angle in degrees
57 0x0000 -> 0.0 79 *
58*/ 80 * @degrees: angle, in degrees. The angle can be positive or negative
59static inline fixp_t fixp_new16(s16 a) 81 *
82 * The returned value ranges from -0x7fffffff to +0x7fffffff.
83 */
84static inline s32 fixp_sin32(int degrees)
60{ 85{
61 return ((s32)a)>>(16-FRAC_N); 86 degrees = (degrees % 360 + 360) % 360;
87
88 return __fixp_sin32(degrees);
62} 89}
63 90
64static inline fixp_t fixp_cos(unsigned int degrees) 91/* cos(x) = sin(x + 90 degrees) */
92#define fixp_cos32(v) fixp_sin32((v) + 90)
93
94/*
95 * 16 bits variants
96 *
97 * The returned value ranges from -0x7fff to 0x7fff
98 */
99
100#define fixp_sin16(v) (fixp_sin32(v) >> 16)
101#define fixp_cos16(v) (fixp_cos32(v) >> 16)
102
103/**
104 * fixp_sin32_rad() - calculates the sin of an angle in radians
105 *
106 * @radians: angle, in radians
107 * @twopi: value to be used for 2*pi
108 *
109 * Provides a variant for the cases where just 360
110 * values is not enough. This function uses linear
111 * interpolation to a wider range of values given by
112 * twopi var.
113 *
114 * Experimental tests gave a maximum difference of
115 * 0.000038 between the value calculated by sin() and
116 * the one produced by this function, when twopi is
117 * equal to 360000. That seems to be enough precision
118 * for practical purposes.
119 *
120 * Please notice that two high numbers for twopi could cause
121 * overflows, so the routine will not allow values of twopi
122 * bigger than 1^18.
123 */
124static inline s32 fixp_sin32_rad(u32 radians, u32 twopi)
65{ 125{
66 int quadrant = (degrees / 90) & 3; 126 int degrees;
67 unsigned int i = degrees % 90; 127 s32 v1, v2, dx, dy;
128 s64 tmp;
68 129
69 if (quadrant == 1 || quadrant == 3) 130 /*
70 i = 90 - i; 131 * Avoid too large values for twopi, as we don't want overflows.
132 */
133 BUG_ON(twopi > 1 << 18);
71 134
72 i >>= 1; 135 degrees = (radians * 360) / twopi;
136 tmp = radians - (degrees * twopi) / 360;
73 137
74 return (quadrant == 1 || quadrant == 2)? -cos_table[i] : cos_table[i]; 138 degrees = (degrees % 360 + 360) % 360;
75} 139 v1 = __fixp_sin32(degrees);
76 140
77static inline fixp_t fixp_sin(unsigned int degrees) 141 v2 = fixp_sin32(degrees + 1);
78{
79 return -fixp_cos(degrees + 90);
80}
81 142
82static inline fixp_t fixp_mult(fixp_t a, fixp_t b) 143 dx = twopi / 360;
83{ 144 dy = v2 - v1;
84 return ((s32)(a*b))>>FRAC_N; 145
146 tmp *= dy;
147
148 return v1 + div_s64(tmp, dx);
85} 149}
86 150
151/* cos(x) = sin(x + pi/2 radians) */
152
153#define fixp_cos32_rad(rad, twopi) \
154 fixp_sin32_rad(rad + twopi / 4, twopi)
155
87#endif 156#endif
diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
index be342b94c640..16cfb3448568 100644
--- a/include/linux/kconfig.h
+++ b/include/linux/kconfig.h
@@ -43,4 +43,13 @@
43 */ 43 */
44#define IS_MODULE(option) config_enabled(option##_MODULE) 44#define IS_MODULE(option) config_enabled(option##_MODULE)
45 45
46/*
47 * IS_REACHABLE(CONFIG_FOO) evaluates to 1 if the currently compiled
48 * code can call a function defined in code compiled based on CONFIG_FOO.
49 * This is similar to IS_ENABLED(), but returns false when invoked from
50 * built-in code when CONFIG_FOO is set to 'm'.
51 */
52#define IS_REACHABLE(option) (config_enabled(option) || \
53 (config_enabled(option##_MODULE) && config_enabled(MODULE)))
54
46#endif /* __LINUX_KCONFIG_H */ 55#endif /* __LINUX_KCONFIG_H */
diff --git a/include/media/adv7604.h b/include/media/adv7604.h
index aa1c4477722d..9ecf353160c1 100644
--- a/include/media/adv7604.h
+++ b/include/media/adv7604.h
@@ -47,16 +47,16 @@ enum adv7604_bus_order {
47}; 47};
48 48
49/* Input Color Space (IO register 0x02, [7:4]) */ 49/* Input Color Space (IO register 0x02, [7:4]) */
50enum adv7604_inp_color_space { 50enum adv76xx_inp_color_space {
51 ADV7604_INP_COLOR_SPACE_LIM_RGB = 0, 51 ADV76XX_INP_COLOR_SPACE_LIM_RGB = 0,
52 ADV7604_INP_COLOR_SPACE_FULL_RGB = 1, 52 ADV76XX_INP_COLOR_SPACE_FULL_RGB = 1,
53 ADV7604_INP_COLOR_SPACE_LIM_YCbCr_601 = 2, 53 ADV76XX_INP_COLOR_SPACE_LIM_YCbCr_601 = 2,
54 ADV7604_INP_COLOR_SPACE_LIM_YCbCr_709 = 3, 54 ADV76XX_INP_COLOR_SPACE_LIM_YCbCr_709 = 3,
55 ADV7604_INP_COLOR_SPACE_XVYCC_601 = 4, 55 ADV76XX_INP_COLOR_SPACE_XVYCC_601 = 4,
56 ADV7604_INP_COLOR_SPACE_XVYCC_709 = 5, 56 ADV76XX_INP_COLOR_SPACE_XVYCC_709 = 5,
57 ADV7604_INP_COLOR_SPACE_FULL_YCbCr_601 = 6, 57 ADV76XX_INP_COLOR_SPACE_FULL_YCbCr_601 = 6,
58 ADV7604_INP_COLOR_SPACE_FULL_YCbCr_709 = 7, 58 ADV76XX_INP_COLOR_SPACE_FULL_YCbCr_709 = 7,
59 ADV7604_INP_COLOR_SPACE_AUTO = 0xf, 59 ADV76XX_INP_COLOR_SPACE_AUTO = 0xf,
60}; 60};
61 61
62/* Select output format (IO register 0x03, [4:2]) */ 62/* Select output format (IO register 0x03, [4:2]) */
@@ -66,38 +66,39 @@ enum adv7604_op_format_mode_sel {
66 ADV7604_OP_FORMAT_MODE2 = 0x08, 66 ADV7604_OP_FORMAT_MODE2 = 0x08,
67}; 67};
68 68
69enum adv7604_drive_strength { 69enum adv76xx_drive_strength {
70 ADV7604_DR_STR_MEDIUM_LOW = 1, 70 ADV76XX_DR_STR_MEDIUM_LOW = 1,
71 ADV7604_DR_STR_MEDIUM_HIGH = 2, 71 ADV76XX_DR_STR_MEDIUM_HIGH = 2,
72 ADV7604_DR_STR_HIGH = 3, 72 ADV76XX_DR_STR_HIGH = 3,
73}; 73};
74 74
75enum adv7604_int1_config { 75/* INT1 Configuration (IO register 0x40, [1:0]) */
76 ADV7604_INT1_CONFIG_OPEN_DRAIN, 76enum adv76xx_int1_config {
77 ADV7604_INT1_CONFIG_ACTIVE_LOW, 77 ADV76XX_INT1_CONFIG_OPEN_DRAIN,
78 ADV7604_INT1_CONFIG_ACTIVE_HIGH, 78 ADV76XX_INT1_CONFIG_ACTIVE_LOW,
79 ADV7604_INT1_CONFIG_DISABLED, 79 ADV76XX_INT1_CONFIG_ACTIVE_HIGH,
80 ADV76XX_INT1_CONFIG_DISABLED,
80}; 81};
81 82
82enum adv7604_page { 83enum adv76xx_page {
83 ADV7604_PAGE_IO, 84 ADV76XX_PAGE_IO,
84 ADV7604_PAGE_AVLINK, 85 ADV7604_PAGE_AVLINK,
85 ADV7604_PAGE_CEC, 86 ADV76XX_PAGE_CEC,
86 ADV7604_PAGE_INFOFRAME, 87 ADV76XX_PAGE_INFOFRAME,
87 ADV7604_PAGE_ESDP, 88 ADV7604_PAGE_ESDP,
88 ADV7604_PAGE_DPP, 89 ADV7604_PAGE_DPP,
89 ADV7604_PAGE_AFE, 90 ADV76XX_PAGE_AFE,
90 ADV7604_PAGE_REP, 91 ADV76XX_PAGE_REP,
91 ADV7604_PAGE_EDID, 92 ADV76XX_PAGE_EDID,
92 ADV7604_PAGE_HDMI, 93 ADV76XX_PAGE_HDMI,
93 ADV7604_PAGE_TEST, 94 ADV76XX_PAGE_TEST,
94 ADV7604_PAGE_CP, 95 ADV76XX_PAGE_CP,
95 ADV7604_PAGE_VDP, 96 ADV7604_PAGE_VDP,
96 ADV7604_PAGE_MAX, 97 ADV76XX_PAGE_MAX,
97}; 98};
98 99
99/* Platform dependent definition */ 100/* Platform dependent definition */
100struct adv7604_platform_data { 101struct adv76xx_platform_data {
101 /* DIS_PWRDNB: 1 if the PWRDNB pin is unused and unconnected */ 102 /* DIS_PWRDNB: 1 if the PWRDNB pin is unused and unconnected */
102 unsigned disable_pwrdnb:1; 103 unsigned disable_pwrdnb:1;
103 104
@@ -116,7 +117,7 @@ struct adv7604_platform_data {
116 enum adv7604_op_format_mode_sel op_format_mode_sel; 117 enum adv7604_op_format_mode_sel op_format_mode_sel;
117 118
118 /* Configuration of the INT1 pin */ 119 /* Configuration of the INT1 pin */
119 enum adv7604_int1_config int1_config; 120 enum adv76xx_int1_config int1_config;
120 121
121 /* IO register 0x02 */ 122 /* IO register 0x02 */
122 unsigned alt_gamma:1; 123 unsigned alt_gamma:1;
@@ -134,9 +135,9 @@ struct adv7604_platform_data {
134 unsigned inv_llc_pol:1; 135 unsigned inv_llc_pol:1;
135 136
136 /* IO register 0x14 */ 137 /* IO register 0x14 */
137 enum adv7604_drive_strength dr_str_data; 138 enum adv76xx_drive_strength dr_str_data;
138 enum adv7604_drive_strength dr_str_clk; 139 enum adv76xx_drive_strength dr_str_clk;
139 enum adv7604_drive_strength dr_str_sync; 140 enum adv76xx_drive_strength dr_str_sync;
140 141
141 /* IO register 0x30 */ 142 /* IO register 0x30 */
142 unsigned output_bus_lsb_to_msb:1; 143 unsigned output_bus_lsb_to_msb:1;
@@ -145,11 +146,11 @@ struct adv7604_platform_data {
145 unsigned hdmi_free_run_mode; 146 unsigned hdmi_free_run_mode;
146 147
147 /* i2c addresses: 0 == use default */ 148 /* i2c addresses: 0 == use default */
148 u8 i2c_addresses[ADV7604_PAGE_MAX]; 149 u8 i2c_addresses[ADV76XX_PAGE_MAX];
149}; 150};
150 151
151enum adv7604_pad { 152enum adv76xx_pad {
152 ADV7604_PAD_HDMI_PORT_A = 0, 153 ADV76XX_PAD_HDMI_PORT_A = 0,
153 ADV7604_PAD_HDMI_PORT_B = 1, 154 ADV7604_PAD_HDMI_PORT_B = 1,
154 ADV7604_PAD_HDMI_PORT_C = 2, 155 ADV7604_PAD_HDMI_PORT_C = 2,
155 ADV7604_PAD_HDMI_PORT_D = 3, 156 ADV7604_PAD_HDMI_PORT_D = 3,
@@ -158,7 +159,7 @@ enum adv7604_pad {
158 /* The source pad is either 1 (ADV7611) or 6 (ADV7604) */ 159 /* The source pad is either 1 (ADV7611) or 6 (ADV7604) */
159 ADV7604_PAD_SOURCE = 6, 160 ADV7604_PAD_SOURCE = 6,
160 ADV7611_PAD_SOURCE = 1, 161 ADV7611_PAD_SOURCE = 1,
161 ADV7604_PAD_MAX = 7, 162 ADV76XX_PAD_MAX = 7,
162}; 163};
163 164
164#define V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE (V4L2_CID_DV_CLASS_BASE + 0x1000) 165#define V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE (V4L2_CID_DV_CLASS_BASE + 0x1000)
@@ -166,7 +167,7 @@ enum adv7604_pad {
166#define V4L2_CID_ADV_RX_FREE_RUN_COLOR (V4L2_CID_DV_CLASS_BASE + 0x1002) 167#define V4L2_CID_ADV_RX_FREE_RUN_COLOR (V4L2_CID_DV_CLASS_BASE + 0x1002)
167 168
168/* notify events */ 169/* notify events */
169#define ADV7604_HOTPLUG 1 170#define ADV76XX_HOTPLUG 1
170#define ADV7604_FMT_CHANGE 2 171#define ADV76XX_FMT_CHANGE 2
171 172
172#endif 173#endif
diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h
index 288772e6900a..28bcd71cdd26 100644
--- a/include/media/davinci/vpfe_capture.h
+++ b/include/media/davinci/vpfe_capture.h
@@ -102,7 +102,7 @@ struct vpfe_config {
102struct vpfe_device { 102struct vpfe_device {
103 /* V4l2 specific parameters */ 103 /* V4l2 specific parameters */
104 /* Identifies video device for this channel */ 104 /* Identifies video device for this channel */
105 struct video_device *video_dev; 105 struct video_device video_dev;
106 /* sub devices */ 106 /* sub devices */
107 struct v4l2_subdev **sd; 107 struct v4l2_subdev **sd;
108 /* vpfe cfg */ 108 /* vpfe cfg */
diff --git a/include/media/media-entity.h b/include/media/media-entity.h
index e00459185d20..0c003d817493 100644
--- a/include/media/media-entity.h
+++ b/include/media/media-entity.h
@@ -44,6 +44,15 @@ struct media_pad {
44 unsigned long flags; /* Pad flags (MEDIA_PAD_FL_*) */ 44 unsigned long flags; /* Pad flags (MEDIA_PAD_FL_*) */
45}; 45};
46 46
47/**
48 * struct media_entity_operations - Media entity operations
49 * @link_setup: Notify the entity of link changes. The operation can
50 * return an error, in which case link setup will be
51 * cancelled. Optional.
52 * @link_validate: Return whether a link is valid from the entity point of
53 * view. The media_entity_pipeline_start() function
54 * validates all links by calling this operation. Optional.
55 */
47struct media_entity_operations { 56struct media_entity_operations {
48 int (*link_setup)(struct media_entity *entity, 57 int (*link_setup)(struct media_entity *entity,
49 const struct media_pad *local, 58 const struct media_pad *local,
@@ -87,17 +96,7 @@ struct media_entity {
87 struct { 96 struct {
88 u32 major; 97 u32 major;
89 u32 minor; 98 u32 minor;
90 } v4l; 99 } dev;
91 struct {
92 u32 major;
93 u32 minor;
94 } fb;
95 struct {
96 u32 card;
97 u32 device;
98 u32 subdevice;
99 } alsa;
100 int dvb;
101 100
102 /* Sub-device specifications */ 101 /* Sub-device specifications */
103 /* Nothing needed yet */ 102 /* Nothing needed yet */
diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h
index b1e63f2b72bd..1ba361205af1 100644
--- a/include/media/mt9p031.h
+++ b/include/media/mt9p031.h
@@ -5,12 +5,10 @@ struct v4l2_subdev;
5 5
6/* 6/*
7 * struct mt9p031_platform_data - MT9P031 platform data 7 * struct mt9p031_platform_data - MT9P031 platform data
8 * @reset: Chip reset GPIO (set to -1 if not used)
9 * @ext_freq: Input clock frequency 8 * @ext_freq: Input clock frequency
10 * @target_freq: Pixel clock frequency 9 * @target_freq: Pixel clock frequency
11 */ 10 */
12struct mt9p031_platform_data { 11struct mt9p031_platform_data {
13 int reset;
14 int ext_freq; 12 int ext_freq;
15 int target_freq; 13 int target_freq;
16}; 14};
diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h
index 398279dd1922..048f8f9117ef 100644
--- a/include/media/omap3isp.h
+++ b/include/media/omap3isp.h
@@ -45,7 +45,7 @@ enum {
45}; 45};
46 46
47/** 47/**
48 * struct isp_parallel_platform_data - Parallel interface platform data 48 * struct isp_parallel_cfg - Parallel interface configuration
49 * @data_lane_shift: Data lane shifter 49 * @data_lane_shift: Data lane shifter
50 * ISP_LANE_SHIFT_0 - CAMEXT[13:0] -> CAM[13:0] 50 * ISP_LANE_SHIFT_0 - CAMEXT[13:0] -> CAM[13:0]
51 * ISP_LANE_SHIFT_2 - CAMEXT[13:2] -> CAM[11:0] 51 * ISP_LANE_SHIFT_2 - CAMEXT[13:2] -> CAM[11:0]
@@ -62,7 +62,7 @@ enum {
62 * @data_pol: Data polarity 62 * @data_pol: Data polarity
63 * 0 - Normal, 1 - One's complement 63 * 0 - Normal, 1 - One's complement
64 */ 64 */
65struct isp_parallel_platform_data { 65struct isp_parallel_cfg {
66 unsigned int data_lane_shift:2; 66 unsigned int data_lane_shift:2;
67 unsigned int clk_pol:1; 67 unsigned int clk_pol:1;
68 unsigned int hs_pol:1; 68 unsigned int hs_pol:1;
@@ -105,7 +105,7 @@ struct isp_csiphy_lanes_cfg {
105}; 105};
106 106
107/** 107/**
108 * struct isp_ccp2_platform_data - CCP2 interface platform data 108 * struct isp_ccp2_cfg - CCP2 interface configuration
109 * @strobe_clk_pol: Strobe/clock polarity 109 * @strobe_clk_pol: Strobe/clock polarity
110 * 0 - Non Inverted, 1 - Inverted 110 * 0 - Non Inverted, 1 - Inverted
111 * @crc: Enable the cyclic redundancy check 111 * @crc: Enable the cyclic redundancy check
@@ -117,7 +117,7 @@ struct isp_csiphy_lanes_cfg {
117 * ISP_CCP2_PHY_DATA_STROBE - Data/strobe physical layer 117 * ISP_CCP2_PHY_DATA_STROBE - Data/strobe physical layer
118 * @vpclk_div: Video port output clock control 118 * @vpclk_div: Video port output clock control
119 */ 119 */
120struct isp_ccp2_platform_data { 120struct isp_ccp2_cfg {
121 unsigned int strobe_clk_pol:1; 121 unsigned int strobe_clk_pol:1;
122 unsigned int crc:1; 122 unsigned int crc:1;
123 unsigned int ccp2_mode:1; 123 unsigned int ccp2_mode:1;
@@ -127,39 +127,31 @@ struct isp_ccp2_platform_data {
127}; 127};
128 128
129/** 129/**
130 * struct isp_csi2_platform_data - CSI2 interface platform data 130 * struct isp_csi2_cfg - CSI2 interface configuration
131 * @crc: Enable the cyclic redundancy check 131 * @crc: Enable the cyclic redundancy check
132 * @vpclk_div: Video port output clock control
133 */ 132 */
134struct isp_csi2_platform_data { 133struct isp_csi2_cfg {
135 unsigned crc:1; 134 unsigned crc:1;
136 unsigned vpclk_div:2;
137 struct isp_csiphy_lanes_cfg lanecfg; 135 struct isp_csiphy_lanes_cfg lanecfg;
138}; 136};
139 137
140struct isp_subdev_i2c_board_info { 138struct isp_bus_cfg {
141 struct i2c_board_info *board_info;
142 int i2c_adapter_id;
143};
144
145struct isp_v4l2_subdevs_group {
146 struct isp_subdev_i2c_board_info *subdevs;
147 enum isp_interface_type interface; 139 enum isp_interface_type interface;
148 union { 140 union {
149 struct isp_parallel_platform_data parallel; 141 struct isp_parallel_cfg parallel;
150 struct isp_ccp2_platform_data ccp2; 142 struct isp_ccp2_cfg ccp2;
151 struct isp_csi2_platform_data csi2; 143 struct isp_csi2_cfg csi2;
152 } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */ 144 } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */
153}; 145};
154 146
155struct isp_platform_xclk { 147struct isp_platform_subdev {
156 const char *dev_id; 148 struct i2c_board_info *board_info;
157 const char *con_id; 149 int i2c_adapter_id;
150 struct isp_bus_cfg *bus;
158}; 151};
159 152
160struct isp_platform_data { 153struct isp_platform_data {
161 struct isp_platform_xclk xclks[2]; 154 struct isp_platform_subdev *subdevs;
162 struct isp_v4l2_subdevs_group *subdevs;
163 void (*set_constraints)(struct isp_device *isp, bool enable); 155 void (*set_constraints)(struct isp_device *isp, bool enable);
164}; 156};
165 157
diff --git a/include/media/ov2659.h b/include/media/ov2659.h
new file mode 100644
index 000000000000..4216adc1ede2
--- /dev/null
+++ b/include/media/ov2659.h
@@ -0,0 +1,34 @@
1/*
2 * Omnivision OV2659 CMOS Image Sensor driver
3 *
4 * Copyright (C) 2015 Texas Instruments, Inc.
5 *
6 * Benoit Parrot <bparrot@ti.com>
7 * Lad, Prabhakar <prabhakar.csengg@gmail.com>
8 *
9 * This program is free software; you may redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; version 2 of the License.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
17 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 */
22
23#ifndef OV2659_H
24#define OV2659_H
25
26/**
27 * struct ov2659_platform_data - ov2659 driver platform data
28 * @link_frequency: target pixel clock frequency
29 */
30struct ov2659_platform_data {
31 s64 link_frequency;
32};
33
34#endif /* OV2659_H */
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h
index 944ecdf3530f..92766f77a5de 100644
--- a/include/media/saa7146_vv.h
+++ b/include/media/saa7146_vv.h
@@ -178,8 +178,8 @@ struct saa7146_use_ops {
178}; 178};
179 179
180/* from saa7146_fops.c */ 180/* from saa7146_fops.c */
181int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev, char *name, int type); 181int saa7146_register_device(struct video_device *vid, struct saa7146_dev *dev, char *name, int type);
182int saa7146_unregister_device(struct video_device **vid, struct saa7146_dev* dev); 182int saa7146_unregister_device(struct video_device *vid, struct saa7146_dev *dev);
183void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state); 183void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state);
184void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); 184void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi);
185int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf); 185int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf);
diff --git a/include/media/v4l2-clk.h b/include/media/v4l2-clk.h
index 0b36cc138304..3ef6e3d5ed6c 100644
--- a/include/media/v4l2-clk.h
+++ b/include/media/v4l2-clk.h
@@ -22,14 +22,15 @@
22struct module; 22struct module;
23struct device; 23struct device;
24 24
25struct clk;
25struct v4l2_clk { 26struct v4l2_clk {
26 struct list_head list; 27 struct list_head list;
27 const struct v4l2_clk_ops *ops; 28 const struct v4l2_clk_ops *ops;
28 const char *dev_id; 29 const char *dev_id;
29 const char *id;
30 int enable; 30 int enable;
31 struct mutex lock; /* Protect the enable count */ 31 struct mutex lock; /* Protect the enable count */
32 atomic_t use_count; 32 atomic_t use_count;
33 struct clk *clk;
33 void *priv; 34 void *priv;
34}; 35};
35 36
@@ -43,7 +44,7 @@ struct v4l2_clk_ops {
43 44
44struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops, 45struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
45 const char *dev_name, 46 const char *dev_name,
46 const char *name, void *priv); 47 void *priv);
47void v4l2_clk_unregister(struct v4l2_clk *clk); 48void v4l2_clk_unregister(struct v4l2_clk *clk);
48struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id); 49struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id);
49void v4l2_clk_put(struct v4l2_clk *clk); 50void v4l2_clk_put(struct v4l2_clk *clk);
@@ -55,14 +56,13 @@ int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate);
55struct module; 56struct module;
56 57
57struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id, 58struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
58 const char *id, unsigned long rate, struct module *owner); 59 unsigned long rate, struct module *owner);
59void v4l2_clk_unregister_fixed(struct v4l2_clk *clk); 60void v4l2_clk_unregister_fixed(struct v4l2_clk *clk);
60 61
61static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id, 62static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id,
62 const char *id,
63 unsigned long rate) 63 unsigned long rate)
64{ 64{
65 return __v4l2_clk_register_fixed(dev_id, id, rate, THIS_MODULE); 65 return __v4l2_clk_register_fixed(dev_id, rate, THIS_MODULE);
66} 66}
67 67
68#define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \ 68#define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index 3e4fddfc840c..acbcd2f5fe7f 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -65,7 +65,6 @@ struct v4l2_file_operations {
65 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 65 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
66 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 66 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
67 unsigned int (*poll) (struct file *, struct poll_table_struct *); 67 unsigned int (*poll) (struct file *, struct poll_table_struct *);
68 long (*ioctl) (struct file *, unsigned int, unsigned long);
69 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); 68 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
70#ifdef CONFIG_COMPAT 69#ifdef CONFIG_COMPAT
71 long (*compat_ioctl32) (struct file *, unsigned int, unsigned long); 70 long (*compat_ioctl32) (struct file *, unsigned int, unsigned long);
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h
index ffb69da3ce9e..9c581578783f 100644
--- a/include/media/v4l2-device.h
+++ b/include/media/v4l2-device.h
@@ -58,8 +58,6 @@ struct v4l2_device {
58 struct v4l2_ctrl_handler *ctrl_handler; 58 struct v4l2_ctrl_handler *ctrl_handler;
59 /* Device's priority state */ 59 /* Device's priority state */
60 struct v4l2_prio_state prio; 60 struct v4l2_prio_state prio;
61 /* BKL replacement mutex. Temporary solution only. */
62 struct mutex ioctl_lock;
63 /* Keep track of the references to this struct. */ 61 /* Keep track of the references to this struct. */
64 struct kref ref; 62 struct kref ref;
65 /* Release function that is called when the ref count goes to 0. */ 63 /* Release function that is called when the ref count goes to 0. */
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
index 8537983b9b22..8fbbd76d78e8 100644
--- a/include/media/v4l2-ioctl.h
+++ b/include/media/v4l2-ioctl.h
@@ -23,12 +23,6 @@ struct v4l2_ioctl_ops {
23 /* VIDIOC_QUERYCAP handler */ 23 /* VIDIOC_QUERYCAP handler */
24 int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap); 24 int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap);
25 25
26 /* Priority handling */
27 int (*vidioc_g_priority) (struct file *file, void *fh,
28 enum v4l2_priority *p);
29 int (*vidioc_s_priority) (struct file *file, void *fh,
30 enum v4l2_priority p);
31
32 /* VIDIOC_ENUM_FMT handlers */ 26 /* VIDIOC_ENUM_FMT handlers */
33 int (*vidioc_enum_fmt_vid_cap) (struct file *file, void *fh, 27 int (*vidioc_enum_fmt_vid_cap) (struct file *file, void *fh,
34 struct v4l2_fmtdesc *f); 28 struct v4l2_fmtdesc *f);
diff --git a/include/media/v4l2-of.h b/include/media/v4l2-of.h
index 70fa7b7b0487..f831c9c225b6 100644
--- a/include/media/v4l2-of.h
+++ b/include/media/v4l2-of.h
@@ -29,12 +29,15 @@ struct device_node;
29 * @data_lanes: an array of physical data lane indexes 29 * @data_lanes: an array of physical data lane indexes
30 * @clock_lane: physical lane index of the clock lane 30 * @clock_lane: physical lane index of the clock lane
31 * @num_data_lanes: number of data lanes 31 * @num_data_lanes: number of data lanes
32 * @lane_polarities: polarity of the lanes. The order is the same of
33 * the physical lanes.
32 */ 34 */
33struct v4l2_of_bus_mipi_csi2 { 35struct v4l2_of_bus_mipi_csi2 {
34 unsigned int flags; 36 unsigned int flags;
35 unsigned char data_lanes[4]; 37 unsigned char data_lanes[4];
36 unsigned char clock_lane; 38 unsigned char clock_lane;
37 unsigned short num_data_lanes; 39 unsigned short num_data_lanes;
40 bool lane_polarities[5];
38}; 41};
39 42
40/** 43/**
@@ -66,9 +69,26 @@ struct v4l2_of_endpoint {
66 struct list_head head; 69 struct list_head head;
67}; 70};
68 71
72/**
73 * struct v4l2_of_link - a link between two endpoints
74 * @local_node: pointer to device_node of this endpoint
75 * @local_port: identifier of the port this endpoint belongs to
76 * @remote_node: pointer to device_node of the remote endpoint
77 * @remote_port: identifier of the port the remote endpoint belongs to
78 */
79struct v4l2_of_link {
80 struct device_node *local_node;
81 unsigned int local_port;
82 struct device_node *remote_node;
83 unsigned int remote_port;
84};
85
69#ifdef CONFIG_OF 86#ifdef CONFIG_OF
70int v4l2_of_parse_endpoint(const struct device_node *node, 87int v4l2_of_parse_endpoint(const struct device_node *node,
71 struct v4l2_of_endpoint *endpoint); 88 struct v4l2_of_endpoint *endpoint);
89int v4l2_of_parse_link(const struct device_node *node,
90 struct v4l2_of_link *link);
91void v4l2_of_put_link(struct v4l2_of_link *link);
72#else /* CONFIG_OF */ 92#else /* CONFIG_OF */
73 93
74static inline int v4l2_of_parse_endpoint(const struct device_node *node, 94static inline int v4l2_of_parse_endpoint(const struct device_node *node,
@@ -77,6 +97,16 @@ static inline int v4l2_of_parse_endpoint(const struct device_node *node,
77 return -ENOSYS; 97 return -ENOSYS;
78} 98}
79 99
100static inline int v4l2_of_parse_link(const struct device_node *node,
101 struct v4l2_of_link *link)
102{
103 return -ENOSYS;
104}
105
106static inline void v4l2_of_put_link(struct v4l2_of_link *link)
107{
108}
109
80#endif /* CONFIG_OF */ 110#endif /* CONFIG_OF */
81 111
82#endif /* _V4L2_OF_H */ 112#endif /* _V4L2_OF_H */
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 5beeb8744fd1..2f0a345a7fed 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -332,8 +332,6 @@ struct v4l2_subdev_video_ops {
332 struct v4l2_subdev_frame_interval *interval); 332 struct v4l2_subdev_frame_interval *interval);
333 int (*s_frame_interval)(struct v4l2_subdev *sd, 333 int (*s_frame_interval)(struct v4l2_subdev *sd,
334 struct v4l2_subdev_frame_interval *interval); 334 struct v4l2_subdev_frame_interval *interval);
335 int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize);
336 int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival);
337 int (*s_dv_timings)(struct v4l2_subdev *sd, 335 int (*s_dv_timings)(struct v4l2_subdev *sd,
338 struct v4l2_dv_timings *timings); 336 struct v4l2_dv_timings *timings);
339 int (*g_dv_timings)(struct v4l2_subdev *sd, 337 int (*g_dv_timings)(struct v4l2_subdev *sd,
@@ -482,6 +480,18 @@ struct v4l2_subdev_ir_ops {
482 struct v4l2_subdev_ir_parameters *params); 480 struct v4l2_subdev_ir_parameters *params);
483}; 481};
484 482
483/*
484 * Used for storing subdev pad information. This structure only needs
485 * to be passed to the pad op if the 'which' field of the main argument
486 * is set to V4L2_SUBDEV_FORMAT_TRY. For V4L2_SUBDEV_FORMAT_ACTIVE it is
487 * safe to pass NULL.
488 */
489struct v4l2_subdev_pad_config {
490 struct v4l2_mbus_framefmt try_fmt;
491 struct v4l2_rect try_crop;
492 struct v4l2_rect try_compose;
493};
494
485/** 495/**
486 * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations 496 * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations
487 * @get_frame_desc: get the current low level media bus frame parameters. 497 * @get_frame_desc: get the current low level media bus frame parameters.
@@ -489,21 +499,26 @@ struct v4l2_subdev_ir_ops {
489 * may be adjusted by the subdev driver to device capabilities. 499 * may be adjusted by the subdev driver to device capabilities.
490 */ 500 */
491struct v4l2_subdev_pad_ops { 501struct v4l2_subdev_pad_ops {
492 int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, 502 int (*enum_mbus_code)(struct v4l2_subdev *sd,
503 struct v4l2_subdev_pad_config *cfg,
493 struct v4l2_subdev_mbus_code_enum *code); 504 struct v4l2_subdev_mbus_code_enum *code);
494 int (*enum_frame_size)(struct v4l2_subdev *sd, 505 int (*enum_frame_size)(struct v4l2_subdev *sd,
495 struct v4l2_subdev_fh *fh, 506 struct v4l2_subdev_pad_config *cfg,
496 struct v4l2_subdev_frame_size_enum *fse); 507 struct v4l2_subdev_frame_size_enum *fse);
497 int (*enum_frame_interval)(struct v4l2_subdev *sd, 508 int (*enum_frame_interval)(struct v4l2_subdev *sd,
498 struct v4l2_subdev_fh *fh, 509 struct v4l2_subdev_pad_config *cfg,
499 struct v4l2_subdev_frame_interval_enum *fie); 510 struct v4l2_subdev_frame_interval_enum *fie);
500 int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, 511 int (*get_fmt)(struct v4l2_subdev *sd,
512 struct v4l2_subdev_pad_config *cfg,
501 struct v4l2_subdev_format *format); 513 struct v4l2_subdev_format *format);
502 int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, 514 int (*set_fmt)(struct v4l2_subdev *sd,
515 struct v4l2_subdev_pad_config *cfg,
503 struct v4l2_subdev_format *format); 516 struct v4l2_subdev_format *format);
504 int (*get_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, 517 int (*get_selection)(struct v4l2_subdev *sd,
518 struct v4l2_subdev_pad_config *cfg,
505 struct v4l2_subdev_selection *sel); 519 struct v4l2_subdev_selection *sel);
506 int (*set_selection)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, 520 int (*set_selection)(struct v4l2_subdev *sd,
521 struct v4l2_subdev_pad_config *cfg,
507 struct v4l2_subdev_selection *sel); 522 struct v4l2_subdev_selection *sel);
508 int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); 523 int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
509 int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid); 524 int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
@@ -625,11 +640,7 @@ struct v4l2_subdev {
625struct v4l2_subdev_fh { 640struct v4l2_subdev_fh {
626 struct v4l2_fh vfh; 641 struct v4l2_fh vfh;
627#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) 642#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
628 struct { 643 struct v4l2_subdev_pad_config *pad;
629 struct v4l2_mbus_framefmt try_fmt;
630 struct v4l2_rect try_crop;
631 struct v4l2_rect try_compose;
632 } *pad;
633#endif 644#endif
634}; 645};
635 646
@@ -639,17 +650,17 @@ struct v4l2_subdev_fh {
639#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) 650#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
640#define __V4L2_SUBDEV_MK_GET_TRY(rtype, fun_name, field_name) \ 651#define __V4L2_SUBDEV_MK_GET_TRY(rtype, fun_name, field_name) \
641 static inline struct rtype * \ 652 static inline struct rtype * \
642 v4l2_subdev_get_try_##fun_name(struct v4l2_subdev_fh *fh, \ 653 fun_name(struct v4l2_subdev *sd, \
643 unsigned int pad) \ 654 struct v4l2_subdev_pad_config *cfg, \
655 unsigned int pad) \
644 { \ 656 { \
645 BUG_ON(pad >= vdev_to_v4l2_subdev( \ 657 BUG_ON(pad >= sd->entity.num_pads); \
646 fh->vfh.vdev)->entity.num_pads); \ 658 return &cfg[pad].field_name; \
647 return &fh->pad[pad].field_name; \
648 } 659 }
649 660
650__V4L2_SUBDEV_MK_GET_TRY(v4l2_mbus_framefmt, format, try_fmt) 661__V4L2_SUBDEV_MK_GET_TRY(v4l2_mbus_framefmt, v4l2_subdev_get_try_format, try_fmt)
651__V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, crop, try_crop) 662__V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, v4l2_subdev_get_try_crop, try_crop)
652__V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, compose, try_compose) 663__V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, v4l2_subdev_get_try_compose, try_compose)
653#endif 664#endif
654 665
655extern const struct v4l2_file_operations v4l2_subdev_fops; 666extern const struct v4l2_file_operations v4l2_subdev_fops;
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
index bd2cec2d6c3d..a5790fd5d125 100644
--- a/include/media/videobuf2-core.h
+++ b/include/media/videobuf2-core.h
@@ -134,17 +134,6 @@ enum vb2_io_modes {
134}; 134};
135 135
136/** 136/**
137 * enum vb2_fileio_flags - flags for selecting a mode of the file io emulator,
138 * by default the 'streaming' style is used by the file io emulator
139 * @VB2_FILEIO_READ_ONCE: report EOF after reading the first buffer
140 * @VB2_FILEIO_WRITE_IMMEDIATELY: queue buffer after each write() call
141 */
142enum vb2_fileio_flags {
143 VB2_FILEIO_READ_ONCE = (1 << 0),
144 VB2_FILEIO_WRITE_IMMEDIATELY = (1 << 1),
145};
146
147/**
148 * enum vb2_buffer_state - current video buffer state 137 * enum vb2_buffer_state - current video buffer state
149 * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control 138 * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control
150 * @VB2_BUF_STATE_PREPARING: buffer is being prepared in videobuf 139 * @VB2_BUF_STATE_PREPARING: buffer is being prepared in videobuf
@@ -346,7 +335,9 @@ struct v4l2_fh;
346 * 335 *
347 * @type: queue type (see V4L2_BUF_TYPE_* in linux/videodev2.h 336 * @type: queue type (see V4L2_BUF_TYPE_* in linux/videodev2.h
348 * @io_modes: supported io methods (see vb2_io_modes enum) 337 * @io_modes: supported io methods (see vb2_io_modes enum)
349 * @io_flags: additional io flags (see vb2_fileio_flags enum) 338 * @fileio_read_once: report EOF after reading the first buffer
339 * @fileio_write_immediately: queue buffer after each write() call
340 * @allow_zero_bytesused: allow bytesused == 0 to be passed to the driver
350 * @lock: pointer to a mutex that protects the vb2_queue struct. The 341 * @lock: pointer to a mutex that protects the vb2_queue struct. The
351 * driver can set this to a mutex to let the v4l2 core serialize 342 * driver can set this to a mutex to let the v4l2 core serialize
352 * the queuing ioctls. If the driver wants to handle locking 343 * the queuing ioctls. If the driver wants to handle locking
@@ -396,7 +387,10 @@ struct v4l2_fh;
396struct vb2_queue { 387struct vb2_queue {
397 enum v4l2_buf_type type; 388 enum v4l2_buf_type type;
398 unsigned int io_modes; 389 unsigned int io_modes;
399 unsigned int io_flags; 390 unsigned fileio_read_once:1;
391 unsigned fileio_write_immediately:1;
392 unsigned allow_zero_bytesused:1;
393
400 struct mutex *lock; 394 struct mutex *lock;
401 struct v4l2_fh *owner; 395 struct v4l2_fh *owner;
402 396
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
index 68ceb97c458c..d4cfc17cc414 100644
--- a/include/uapi/linux/Kbuild
+++ b/include/uapi/linux/Kbuild
@@ -446,5 +446,6 @@ header-y += wireless.h
446header-y += x25.h 446header-y += x25.h
447header-y += xattr.h 447header-y += xattr.h
448header-y += xfrm.h 448header-y += xfrm.h
449header-y += xilinx-v4l2-controls.h
449header-y += zorro.h 450header-y += zorro.h
450header-y += zorro_ids.h 451header-y += zorro_ids.h
diff --git a/include/uapi/linux/am437x-vpfe.h b/include/uapi/linux/am437x-vpfe.h
index 9b03033f9cd6..d75774317b9b 100644
--- a/include/uapi/linux/am437x-vpfe.h
+++ b/include/uapi/linux/am437x-vpfe.h
@@ -21,6 +21,8 @@
21#ifndef AM437X_VPFE_USER_H 21#ifndef AM437X_VPFE_USER_H
22#define AM437X_VPFE_USER_H 22#define AM437X_VPFE_USER_H
23 23
24#include <linux/videodev2.h>
25
24enum vpfe_ccdc_data_size { 26enum vpfe_ccdc_data_size {
25 VPFE_CCDC_DATA_16BITS = 0, 27 VPFE_CCDC_DATA_16BITS = 0,
26 VPFE_CCDC_DATA_15BITS, 28 VPFE_CCDC_DATA_15BITS,
diff --git a/include/uapi/linux/media-bus-format.h b/include/uapi/linux/media-bus-format.h
index 23b40908be30..d391893064a0 100644
--- a/include/uapi/linux/media-bus-format.h
+++ b/include/uapi/linux/media-bus-format.h
@@ -33,7 +33,7 @@
33 33
34#define MEDIA_BUS_FMT_FIXED 0x0001 34#define MEDIA_BUS_FMT_FIXED 0x0001
35 35
36/* RGB - next is 0x100e */ 36/* RGB - next is 0x1010 */
37#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE 0x1001 37#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE 0x1001
38#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE 0x1002 38#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE 0x1002
39#define MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE 0x1003 39#define MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE 0x1003
@@ -43,12 +43,14 @@
43#define MEDIA_BUS_FMT_RGB565_2X8_BE 0x1007 43#define MEDIA_BUS_FMT_RGB565_2X8_BE 0x1007
44#define MEDIA_BUS_FMT_RGB565_2X8_LE 0x1008 44#define MEDIA_BUS_FMT_RGB565_2X8_LE 0x1008
45#define MEDIA_BUS_FMT_RGB666_1X18 0x1009 45#define MEDIA_BUS_FMT_RGB666_1X18 0x1009
46#define MEDIA_BUS_FMT_RBG888_1X24 0x100e
46#define MEDIA_BUS_FMT_RGB888_1X24 0x100a 47#define MEDIA_BUS_FMT_RGB888_1X24 0x100a
47#define MEDIA_BUS_FMT_RGB888_2X12_BE 0x100b 48#define MEDIA_BUS_FMT_RGB888_2X12_BE 0x100b
48#define MEDIA_BUS_FMT_RGB888_2X12_LE 0x100c 49#define MEDIA_BUS_FMT_RGB888_2X12_LE 0x100c
49#define MEDIA_BUS_FMT_ARGB8888_1X32 0x100d 50#define MEDIA_BUS_FMT_ARGB8888_1X32 0x100d
51#define MEDIA_BUS_FMT_RGB888_1X32_PADHI 0x100f
50 52
51/* YUV (including grey) - next is 0x2024 */ 53/* YUV (including grey) - next is 0x2025 */
52#define MEDIA_BUS_FMT_Y8_1X8 0x2001 54#define MEDIA_BUS_FMT_Y8_1X8 0x2001
53#define MEDIA_BUS_FMT_UV8_1X8 0x2015 55#define MEDIA_BUS_FMT_UV8_1X8 0x2015
54#define MEDIA_BUS_FMT_UYVY8_1_5X8 0x2002 56#define MEDIA_BUS_FMT_UYVY8_1_5X8 0x2002
@@ -65,6 +67,10 @@
65#define MEDIA_BUS_FMT_YUYV10_2X10 0x200b 67#define MEDIA_BUS_FMT_YUYV10_2X10 0x200b
66#define MEDIA_BUS_FMT_YVYU10_2X10 0x200c 68#define MEDIA_BUS_FMT_YVYU10_2X10 0x200c
67#define MEDIA_BUS_FMT_Y12_1X12 0x2013 69#define MEDIA_BUS_FMT_Y12_1X12 0x2013
70#define MEDIA_BUS_FMT_UYVY12_2X12 0x201c
71#define MEDIA_BUS_FMT_VYUY12_2X12 0x201d
72#define MEDIA_BUS_FMT_YUYV12_2X12 0x201e
73#define MEDIA_BUS_FMT_YVYU12_2X12 0x201f
68#define MEDIA_BUS_FMT_UYVY8_1X16 0x200f 74#define MEDIA_BUS_FMT_UYVY8_1X16 0x200f
69#define MEDIA_BUS_FMT_VYUY8_1X16 0x2010 75#define MEDIA_BUS_FMT_VYUY8_1X16 0x2010
70#define MEDIA_BUS_FMT_YUYV8_1X16 0x2011 76#define MEDIA_BUS_FMT_YUYV8_1X16 0x2011
@@ -74,16 +80,13 @@
74#define MEDIA_BUS_FMT_VYUY10_1X20 0x201b 80#define MEDIA_BUS_FMT_VYUY10_1X20 0x201b
75#define MEDIA_BUS_FMT_YUYV10_1X20 0x200d 81#define MEDIA_BUS_FMT_YUYV10_1X20 0x200d
76#define MEDIA_BUS_FMT_YVYU10_1X20 0x200e 82#define MEDIA_BUS_FMT_YVYU10_1X20 0x200e
77#define MEDIA_BUS_FMT_YUV10_1X30 0x2016 83#define MEDIA_BUS_FMT_VUY8_1X24 0x2024
78#define MEDIA_BUS_FMT_AYUV8_1X32 0x2017
79#define MEDIA_BUS_FMT_UYVY12_2X12 0x201c
80#define MEDIA_BUS_FMT_VYUY12_2X12 0x201d
81#define MEDIA_BUS_FMT_YUYV12_2X12 0x201e
82#define MEDIA_BUS_FMT_YVYU12_2X12 0x201f
83#define MEDIA_BUS_FMT_UYVY12_1X24 0x2020 84#define MEDIA_BUS_FMT_UYVY12_1X24 0x2020
84#define MEDIA_BUS_FMT_VYUY12_1X24 0x2021 85#define MEDIA_BUS_FMT_VYUY12_1X24 0x2021
85#define MEDIA_BUS_FMT_YUYV12_1X24 0x2022 86#define MEDIA_BUS_FMT_YUYV12_1X24 0x2022
86#define MEDIA_BUS_FMT_YVYU12_1X24 0x2023 87#define MEDIA_BUS_FMT_YVYU12_1X24 0x2023
88#define MEDIA_BUS_FMT_YUV10_1X30 0x2016
89#define MEDIA_BUS_FMT_AYUV8_1X32 0x2017
87 90
88/* Bayer - next is 0x3019 */ 91/* Bayer - next is 0x3019 */
89#define MEDIA_BUS_FMT_SBGGR8_1X8 0x3001 92#define MEDIA_BUS_FMT_SBGGR8_1X8 0x3001
diff --git a/include/uapi/linux/media.h b/include/uapi/linux/media.h
index d847c760e8f0..4e816be3de39 100644
--- a/include/uapi/linux/media.h
+++ b/include/uapi/linux/media.h
@@ -50,7 +50,14 @@ struct media_device_info {
50#define MEDIA_ENT_T_DEVNODE_V4L (MEDIA_ENT_T_DEVNODE + 1) 50#define MEDIA_ENT_T_DEVNODE_V4L (MEDIA_ENT_T_DEVNODE + 1)
51#define MEDIA_ENT_T_DEVNODE_FB (MEDIA_ENT_T_DEVNODE + 2) 51#define MEDIA_ENT_T_DEVNODE_FB (MEDIA_ENT_T_DEVNODE + 2)
52#define MEDIA_ENT_T_DEVNODE_ALSA (MEDIA_ENT_T_DEVNODE + 3) 52#define MEDIA_ENT_T_DEVNODE_ALSA (MEDIA_ENT_T_DEVNODE + 3)
53#define MEDIA_ENT_T_DEVNODE_DVB (MEDIA_ENT_T_DEVNODE + 4) 53#define MEDIA_ENT_T_DEVNODE_DVB_FE (MEDIA_ENT_T_DEVNODE + 4)
54#define MEDIA_ENT_T_DEVNODE_DVB_DEMUX (MEDIA_ENT_T_DEVNODE + 5)
55#define MEDIA_ENT_T_DEVNODE_DVB_DVR (MEDIA_ENT_T_DEVNODE + 6)
56#define MEDIA_ENT_T_DEVNODE_DVB_CA (MEDIA_ENT_T_DEVNODE + 7)
57#define MEDIA_ENT_T_DEVNODE_DVB_NET (MEDIA_ENT_T_DEVNODE + 8)
58
59/* Legacy symbol. Use it to avoid userspace compilation breakages */
60#define MEDIA_ENT_T_DEVNODE_DVB MEDIA_ENT_T_DEVNODE_DVB_FE
54 61
55#define MEDIA_ENT_T_V4L2_SUBDEV (2 << MEDIA_ENT_TYPE_SHIFT) 62#define MEDIA_ENT_T_V4L2_SUBDEV (2 << MEDIA_ENT_TYPE_SHIFT)
56#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR (MEDIA_ENT_T_V4L2_SUBDEV + 1) 63#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR (MEDIA_ENT_T_V4L2_SUBDEV + 1)
@@ -59,6 +66,8 @@ struct media_device_info {
59/* A converter of analogue video to its digital representation. */ 66/* A converter of analogue video to its digital representation. */
60#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER (MEDIA_ENT_T_V4L2_SUBDEV + 4) 67#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER (MEDIA_ENT_T_V4L2_SUBDEV + 4)
61 68
69#define MEDIA_ENT_T_V4L2_SUBDEV_TUNER (MEDIA_ENT_T_V4L2_SUBDEV + 5)
70
62#define MEDIA_ENT_FL_DEFAULT (1 << 0) 71#define MEDIA_ENT_FL_DEFAULT (1 << 0)
63 72
64struct media_entity_desc { 73struct media_entity_desc {
@@ -78,17 +87,48 @@ struct media_entity_desc {
78 struct { 87 struct {
79 __u32 major; 88 __u32 major;
80 __u32 minor; 89 __u32 minor;
81 } v4l; 90 } dev;
82 struct { 91
83 __u32 major; 92#if 1
84 __u32 minor; 93 /*
85 } fb; 94 * TODO: this shouldn't have been added without
95 * actual drivers that use this. When the first real driver
96 * appears that sets this information, special attention
97 * should be given whether this information is 1) enough, and
98 * 2) can deal with udev rules that rename devices. The struct
99 * dev would not be sufficient for this since that does not
100 * contain the subdevice information. In addition, struct dev
101 * can only refer to a single device, and not to multiple (e.g.
102 * pcm and mixer devices).
103 *
104 * So for now mark this as a to do.
105 */
86 struct { 106 struct {
87 __u32 card; 107 __u32 card;
88 __u32 device; 108 __u32 device;
89 __u32 subdevice; 109 __u32 subdevice;
90 } alsa; 110 } alsa;
111#endif
112
113#if 1
114 /*
115 * DEPRECATED: previous node specifications. Kept just to
116 * avoid breaking compilation, but media_entity_desc.dev
117 * should be used instead. In particular, alsa and dvb
118 * fields below are wrong: for all devnodes, there should
119 * be just major/minor inside the struct, as this is enough
120 * to represent any devnode, no matter what type.
121 */
122 struct {
123 __u32 major;
124 __u32 minor;
125 } v4l;
126 struct {
127 __u32 major;
128 __u32 minor;
129 } fb;
91 int dvb; 130 int dvb;
131#endif
92 132
93 /* Sub-device specifications */ 133 /* Sub-device specifications */
94 /* Nothing needed yet */ 134 /* Nothing needed yet */
diff --git a/include/uapi/linux/v4l2-dv-timings.h b/include/uapi/linux/v4l2-dv-timings.h
index 6c8f159e416e..c039f1d68a09 100644
--- a/include/uapi/linux/v4l2-dv-timings.h
+++ b/include/uapi/linux/v4l2-dv-timings.h
@@ -48,14 +48,15 @@
48 .type = V4L2_DV_BT_656_1120, \ 48 .type = V4L2_DV_BT_656_1120, \
49 V4L2_INIT_BT_TIMINGS(720, 480, 1, 0, \ 49 V4L2_INIT_BT_TIMINGS(720, 480, 1, 0, \
50 13500000, 19, 62, 57, 4, 3, 15, 4, 3, 16, \ 50 13500000, 19, 62, 57, 4, 3, 15, 4, 3, 16, \
51 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_HALF_LINE) \ 51 V4L2_DV_BT_STD_CEA861, \
52 V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
52} 53}
53 54
54#define V4L2_DV_BT_CEA_720X480P59_94 { \ 55#define V4L2_DV_BT_CEA_720X480P59_94 { \
55 .type = V4L2_DV_BT_656_1120, \ 56 .type = V4L2_DV_BT_656_1120, \
56 V4L2_INIT_BT_TIMINGS(720, 480, 0, 0, \ 57 V4L2_INIT_BT_TIMINGS(720, 480, 0, 0, \
57 27000000, 16, 62, 60, 9, 6, 30, 0, 0, 0, \ 58 27000000, 16, 62, 60, 9, 6, 30, 0, 0, 0, \
58 V4L2_DV_BT_STD_CEA861, 0) \ 59 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
59} 60}
60 61
61/* Note: these are the nominal timings, for HDMI links this format is typically 62/* Note: these are the nominal timings, for HDMI links this format is typically
@@ -64,14 +65,15 @@
64 .type = V4L2_DV_BT_656_1120, \ 65 .type = V4L2_DV_BT_656_1120, \
65 V4L2_INIT_BT_TIMINGS(720, 576, 1, 0, \ 66 V4L2_INIT_BT_TIMINGS(720, 576, 1, 0, \
66 13500000, 12, 63, 69, 2, 3, 19, 2, 3, 20, \ 67 13500000, 12, 63, 69, 2, 3, 19, 2, 3, 20, \
67 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_HALF_LINE) \ 68 V4L2_DV_BT_STD_CEA861, \
69 V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
68} 70}
69 71
70#define V4L2_DV_BT_CEA_720X576P50 { \ 72#define V4L2_DV_BT_CEA_720X576P50 { \
71 .type = V4L2_DV_BT_656_1120, \ 73 .type = V4L2_DV_BT_656_1120, \
72 V4L2_INIT_BT_TIMINGS(720, 576, 0, 0, \ 74 V4L2_INIT_BT_TIMINGS(720, 576, 0, 0, \
73 27000000, 12, 64, 68, 5, 5, 39, 0, 0, 0, \ 75 27000000, 12, 64, 68, 5, 5, 39, 0, 0, 0, \
74 V4L2_DV_BT_STD_CEA861, 0) \ 76 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
75} 77}
76 78
77#define V4L2_DV_BT_CEA_1280X720P24 { \ 79#define V4L2_DV_BT_CEA_1280X720P24 { \
@@ -88,7 +90,7 @@
88 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ 90 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
89 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 91 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
90 74250000, 2420, 40, 220, 5, 5, 20, 0, 0, 0, \ 92 74250000, 2420, 40, 220, 5, 5, 20, 0, 0, 0, \
91 V4L2_DV_BT_STD_CEA861, 0) \ 93 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
92} 94}
93 95
94#define V4L2_DV_BT_CEA_1280X720P30 { \ 96#define V4L2_DV_BT_CEA_1280X720P30 { \
@@ -96,7 +98,8 @@
96 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ 98 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
97 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 99 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
98 74250000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \ 100 74250000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \
99 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 101 V4L2_DV_BT_STD_CEA861, \
102 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
100} 103}
101 104
102#define V4L2_DV_BT_CEA_1280X720P50 { \ 105#define V4L2_DV_BT_CEA_1280X720P50 { \
@@ -104,7 +107,7 @@
104 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ 107 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
105 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 108 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
106 74250000, 440, 40, 220, 5, 5, 20, 0, 0, 0, \ 109 74250000, 440, 40, 220, 5, 5, 20, 0, 0, 0, \
107 V4L2_DV_BT_STD_CEA861, 0) \ 110 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
108} 111}
109 112
110#define V4L2_DV_BT_CEA_1280X720P60 { \ 113#define V4L2_DV_BT_CEA_1280X720P60 { \
@@ -112,7 +115,8 @@
112 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ 115 V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
113 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 116 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
114 74250000, 110, 40, 220, 5, 5, 20, 0, 0, 0, \ 117 74250000, 110, 40, 220, 5, 5, 20, 0, 0, 0, \
115 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 118 V4L2_DV_BT_STD_CEA861, \
119 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
116} 120}
117 121
118#define V4L2_DV_BT_CEA_1920X1080P24 { \ 122#define V4L2_DV_BT_CEA_1920X1080P24 { \
@@ -120,7 +124,8 @@
120 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ 124 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
121 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 125 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
122 74250000, 638, 44, 148, 4, 5, 36, 0, 0, 0, \ 126 74250000, 638, 44, 148, 4, 5, 36, 0, 0, 0, \
123 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 127 V4L2_DV_BT_STD_CEA861, \
128 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
124} 129}
125 130
126#define V4L2_DV_BT_CEA_1920X1080P25 { \ 131#define V4L2_DV_BT_CEA_1920X1080P25 { \
@@ -128,7 +133,7 @@
128 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ 133 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
129 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 134 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
130 74250000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \ 135 74250000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \
131 V4L2_DV_BT_STD_CEA861, 0) \ 136 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
132} 137}
133 138
134#define V4L2_DV_BT_CEA_1920X1080P30 { \ 139#define V4L2_DV_BT_CEA_1920X1080P30 { \
@@ -136,7 +141,8 @@
136 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ 141 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
137 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 142 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
138 74250000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \ 143 74250000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \
139 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 144 V4L2_DV_BT_STD_CEA861, \
145 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
140} 146}
141 147
142#define V4L2_DV_BT_CEA_1920X1080I50 { \ 148#define V4L2_DV_BT_CEA_1920X1080I50 { \
@@ -144,7 +150,8 @@
144 V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \ 150 V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \
145 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 151 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
146 74250000, 528, 44, 148, 2, 5, 15, 2, 5, 16, \ 152 74250000, 528, 44, 148, 2, 5, 15, 2, 5, 16, \
147 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_HALF_LINE) \ 153 V4L2_DV_BT_STD_CEA861, \
154 V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
148} 155}
149 156
150#define V4L2_DV_BT_CEA_1920X1080P50 { \ 157#define V4L2_DV_BT_CEA_1920X1080P50 { \
@@ -152,7 +159,7 @@
152 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ 159 V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
153 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 160 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
154 148500000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \ 161 148500000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \
155 V4L2_DV_BT_STD_CEA861, 0) \ 162 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
156} 163}
157 164
158#define V4L2_DV_BT_CEA_1920X1080I60 { \ 165#define V4L2_DV_BT_CEA_1920X1080I60 { \
@@ -161,7 +168,8 @@
161 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 168 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
162 74250000, 88, 44, 148, 2, 5, 15, 2, 5, 16, \ 169 74250000, 88, 44, 148, 2, 5, 15, 2, 5, 16, \
163 V4L2_DV_BT_STD_CEA861, \ 170 V4L2_DV_BT_STD_CEA861, \
164 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_HALF_LINE) \ 171 V4L2_DV_FL_CAN_REDUCE_FPS | \
172 V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
165} 173}
166 174
167#define V4L2_DV_BT_CEA_1920X1080P60 { \ 175#define V4L2_DV_BT_CEA_1920X1080P60 { \
@@ -170,77 +178,83 @@
170 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ 178 V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
171 148500000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \ 179 148500000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \
172 V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \ 180 V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \
173 V4L2_DV_FL_CAN_REDUCE_FPS) \ 181 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
174} 182}
175 183
176#define V4L2_DV_BT_CEA_3840X2160P24 { \ 184#define V4L2_DV_BT_CEA_3840X2160P24 { \
177 .type = V4L2_DV_BT_656_1120, \ 185 .type = V4L2_DV_BT_656_1120, \
178 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 186 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
179 297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \ 187 297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \
180 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 188 V4L2_DV_BT_STD_CEA861, \
189 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
181} 190}
182 191
183#define V4L2_DV_BT_CEA_3840X2160P25 { \ 192#define V4L2_DV_BT_CEA_3840X2160P25 { \
184 .type = V4L2_DV_BT_656_1120, \ 193 .type = V4L2_DV_BT_656_1120, \
185 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 194 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
186 297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \ 195 297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
187 V4L2_DV_BT_STD_CEA861, 0) \ 196 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
188} 197}
189 198
190#define V4L2_DV_BT_CEA_3840X2160P30 { \ 199#define V4L2_DV_BT_CEA_3840X2160P30 { \
191 .type = V4L2_DV_BT_656_1120, \ 200 .type = V4L2_DV_BT_656_1120, \
192 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 201 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
193 297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \ 202 297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
194 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 203 V4L2_DV_BT_STD_CEA861, \
204 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
195} 205}
196 206
197#define V4L2_DV_BT_CEA_3840X2160P50 { \ 207#define V4L2_DV_BT_CEA_3840X2160P50 { \
198 .type = V4L2_DV_BT_656_1120, \ 208 .type = V4L2_DV_BT_656_1120, \
199 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 209 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
200 594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \ 210 594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
201 V4L2_DV_BT_STD_CEA861, 0) \ 211 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
202} 212}
203 213
204#define V4L2_DV_BT_CEA_3840X2160P60 { \ 214#define V4L2_DV_BT_CEA_3840X2160P60 { \
205 .type = V4L2_DV_BT_656_1120, \ 215 .type = V4L2_DV_BT_656_1120, \
206 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 216 V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
207 594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \ 217 594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
208 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 218 V4L2_DV_BT_STD_CEA861, \
219 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
209} 220}
210 221
211#define V4L2_DV_BT_CEA_4096X2160P24 { \ 222#define V4L2_DV_BT_CEA_4096X2160P24 { \
212 .type = V4L2_DV_BT_656_1120, \ 223 .type = V4L2_DV_BT_656_1120, \
213 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 224 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
214 297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \ 225 297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \
215 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 226 V4L2_DV_BT_STD_CEA861, \
227 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
216} 228}
217 229
218#define V4L2_DV_BT_CEA_4096X2160P25 { \ 230#define V4L2_DV_BT_CEA_4096X2160P25 { \
219 .type = V4L2_DV_BT_656_1120, \ 231 .type = V4L2_DV_BT_656_1120, \
220 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 232 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
221 297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \ 233 297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
222 V4L2_DV_BT_STD_CEA861, 0) \ 234 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
223} 235}
224 236
225#define V4L2_DV_BT_CEA_4096X2160P30 { \ 237#define V4L2_DV_BT_CEA_4096X2160P30 { \
226 .type = V4L2_DV_BT_656_1120, \ 238 .type = V4L2_DV_BT_656_1120, \
227 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 239 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
228 297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \ 240 297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
229 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 241 V4L2_DV_BT_STD_CEA861, \
242 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
230} 243}
231 244
232#define V4L2_DV_BT_CEA_4096X2160P50 { \ 245#define V4L2_DV_BT_CEA_4096X2160P50 { \
233 .type = V4L2_DV_BT_656_1120, \ 246 .type = V4L2_DV_BT_656_1120, \
234 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 247 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
235 594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \ 248 594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
236 V4L2_DV_BT_STD_CEA861, 0) \ 249 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
237} 250}
238 251
239#define V4L2_DV_BT_CEA_4096X2160P60 { \ 252#define V4L2_DV_BT_CEA_4096X2160P60 { \
240 .type = V4L2_DV_BT_656_1120, \ 253 .type = V4L2_DV_BT_656_1120, \
241 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \ 254 V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
242 594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \ 255 594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
243 V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ 256 V4L2_DV_BT_STD_CEA861, \
257 V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
244} 258}
245 259
246 260
diff --git a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h
index e0a7e3da498a..dbce2b554e02 100644
--- a/include/uapi/linux/v4l2-subdev.h
+++ b/include/uapi/linux/v4l2-subdev.h
@@ -69,12 +69,14 @@ struct v4l2_subdev_crop {
69 * @pad: pad number, as reported by the media API 69 * @pad: pad number, as reported by the media API
70 * @index: format index during enumeration 70 * @index: format index during enumeration
71 * @code: format code (MEDIA_BUS_FMT_ definitions) 71 * @code: format code (MEDIA_BUS_FMT_ definitions)
72 * @which: format type (from enum v4l2_subdev_format_whence)
72 */ 73 */
73struct v4l2_subdev_mbus_code_enum { 74struct v4l2_subdev_mbus_code_enum {
74 __u32 pad; 75 __u32 pad;
75 __u32 index; 76 __u32 index;
76 __u32 code; 77 __u32 code;
77 __u32 reserved[9]; 78 __u32 which;
79 __u32 reserved[8];
78}; 80};
79 81
80/** 82/**
@@ -82,6 +84,7 @@ struct v4l2_subdev_mbus_code_enum {
82 * @pad: pad number, as reported by the media API 84 * @pad: pad number, as reported by the media API
83 * @index: format index during enumeration 85 * @index: format index during enumeration
84 * @code: format code (MEDIA_BUS_FMT_ definitions) 86 * @code: format code (MEDIA_BUS_FMT_ definitions)
87 * @which: format type (from enum v4l2_subdev_format_whence)
85 */ 88 */
86struct v4l2_subdev_frame_size_enum { 89struct v4l2_subdev_frame_size_enum {
87 __u32 index; 90 __u32 index;
@@ -91,7 +94,8 @@ struct v4l2_subdev_frame_size_enum {
91 __u32 max_width; 94 __u32 max_width;
92 __u32 min_height; 95 __u32 min_height;
93 __u32 max_height; 96 __u32 max_height;
94 __u32 reserved[9]; 97 __u32 which;
98 __u32 reserved[8];
95}; 99};
96 100
97/** 101/**
@@ -113,6 +117,7 @@ struct v4l2_subdev_frame_interval {
113 * @width: frame width in pixels 117 * @width: frame width in pixels
114 * @height: frame height in pixels 118 * @height: frame height in pixels
115 * @interval: frame interval in seconds 119 * @interval: frame interval in seconds
120 * @which: format type (from enum v4l2_subdev_format_whence)
116 */ 121 */
117struct v4l2_subdev_frame_interval_enum { 122struct v4l2_subdev_frame_interval_enum {
118 __u32 index; 123 __u32 index;
@@ -121,7 +126,8 @@ struct v4l2_subdev_frame_interval_enum {
121 __u32 width; 126 __u32 width;
122 __u32 height; 127 __u32 height;
123 struct v4l2_fract interval; 128 struct v4l2_fract interval;
124 __u32 reserved[9]; 129 __u32 which;
130 __u32 reserved[8];
125}; 131};
126 132
127/** 133/**
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index fbdc3602ee27..fa376f7666ba 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -268,9 +268,10 @@ enum v4l2_ycbcr_encoding {
268 268
269enum v4l2_quantization { 269enum v4l2_quantization {
270 /* 270 /*
271 * The default for R'G'B' quantization is always full range. For 271 * The default for R'G'B' quantization is always full range, except
272 * Y'CbCr the quantization is always limited range, except for 272 * for the BT2020 colorspace. For Y'CbCr the quantization is always
273 * SYCC, XV601, XV709 or JPEG: those are full range. 273 * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709:
274 * those are full range.
274 */ 275 */
275 V4L2_QUANTIZATION_DEFAULT = 0, 276 V4L2_QUANTIZATION_DEFAULT = 0,
276 V4L2_QUANTIZATION_FULL_RANGE = 1, 277 V4L2_QUANTIZATION_FULL_RANGE = 1,
@@ -1187,6 +1188,12 @@ struct v4l2_bt_timings {
1187 exactly the same number of half-lines. Whether half-lines can be detected 1188 exactly the same number of half-lines. Whether half-lines can be detected
1188 or used depends on the hardware. */ 1189 or used depends on the hardware. */
1189#define V4L2_DV_FL_HALF_LINE (1 << 3) 1190#define V4L2_DV_FL_HALF_LINE (1 << 3)
1191/* If set, then this is a Consumer Electronics (CE) video format. Such formats
1192 * differ from other formats (commonly called IT formats) in that if RGB
1193 * encoding is used then by default the RGB values use limited range (i.e.
1194 * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
1195 * except for the 640x480 format are CE formats. */
1196#define V4L2_DV_FL_IS_CE_VIDEO (1 << 4)
1190 1197
1191/* A few useful defines to calculate the total blanking and frame sizes */ 1198/* A few useful defines to calculate the total blanking and frame sizes */
1192#define V4L2_DV_BT_BLANKING_WIDTH(bt) \ 1199#define V4L2_DV_BT_BLANKING_WIDTH(bt) \
@@ -1456,6 +1463,7 @@ struct v4l2_querymenu {
1456#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 1463#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040
1457#define V4L2_CTRL_FLAG_VOLATILE 0x0080 1464#define V4L2_CTRL_FLAG_VOLATILE 0x0080
1458#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100 1465#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100
1466#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
1459 1467
1460/* Query flags, to be ORed with the control ID */ 1468/* Query flags, to be ORed with the control ID */
1461#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 1469#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
@@ -1841,8 +1849,8 @@ struct v4l2_mpeg_vbi_fmt_ivtv {
1841 */ 1849 */
1842struct v4l2_plane_pix_format { 1850struct v4l2_plane_pix_format {
1843 __u32 sizeimage; 1851 __u32 sizeimage;
1844 __u16 bytesperline; 1852 __u32 bytesperline;
1845 __u16 reserved[7]; 1853 __u16 reserved[6];
1846} __attribute__ ((packed)); 1854} __attribute__ ((packed));
1847 1855
1848/** 1856/**
diff --git a/include/uapi/linux/xilinx-v4l2-controls.h b/include/uapi/linux/xilinx-v4l2-controls.h
new file mode 100644
index 000000000000..fb495b91e800
--- /dev/null
+++ b/include/uapi/linux/xilinx-v4l2-controls.h
@@ -0,0 +1,73 @@
1/*
2 * Xilinx Controls Header
3 *
4 * Copyright (C) 2013-2015 Ideas on Board
5 * Copyright (C) 2013-2015 Xilinx, Inc.
6 *
7 * Contacts: Hyun Kwon <hyun.kwon@xilinx.com>
8 * Laurent Pinchart <laurent.pinchart@ideasonboard.com>
9 *
10 * This software is licensed under the terms of the GNU General Public
11 * License version 2, as published by the Free Software Foundation, and
12 * may be copied, distributed, and modified under those terms.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 */
19
20#ifndef __UAPI_XILINX_V4L2_CONTROLS_H__
21#define __UAPI_XILINX_V4L2_CONTROLS_H__
22
23#include <linux/v4l2-controls.h>
24
25#define V4L2_CID_XILINX_OFFSET 0xc000
26#define V4L2_CID_XILINX_BASE (V4L2_CID_USER_BASE + V4L2_CID_XILINX_OFFSET)
27
28/*
29 * Private Controls for Xilinx Video IPs
30 */
31
32/*
33 * Xilinx TPG Video IP
34 */
35
36#define V4L2_CID_XILINX_TPG (V4L2_CID_USER_BASE + 0xc000)
37
38/* Draw cross hairs */
39#define V4L2_CID_XILINX_TPG_CROSS_HAIRS (V4L2_CID_XILINX_TPG + 1)
40/* Enable a moving box */
41#define V4L2_CID_XILINX_TPG_MOVING_BOX (V4L2_CID_XILINX_TPG + 2)
42/* Mask out a color component */
43#define V4L2_CID_XILINX_TPG_COLOR_MASK (V4L2_CID_XILINX_TPG + 3)
44/* Enable a stuck pixel feature */
45#define V4L2_CID_XILINX_TPG_STUCK_PIXEL (V4L2_CID_XILINX_TPG + 4)
46/* Enable a noisy output */
47#define V4L2_CID_XILINX_TPG_NOISE (V4L2_CID_XILINX_TPG + 5)
48/* Enable the motion feature */
49#define V4L2_CID_XILINX_TPG_MOTION (V4L2_CID_XILINX_TPG + 6)
50/* Configure the motion speed of moving patterns */
51#define V4L2_CID_XILINX_TPG_MOTION_SPEED (V4L2_CID_XILINX_TPG + 7)
52/* The row of horizontal cross hair location */
53#define V4L2_CID_XILINX_TPG_CROSS_HAIR_ROW (V4L2_CID_XILINX_TPG + 8)
54/* The colum of vertical cross hair location */
55#define V4L2_CID_XILINX_TPG_CROSS_HAIR_COLUMN (V4L2_CID_XILINX_TPG + 9)
56/* Set starting point of sine wave for horizontal component */
57#define V4L2_CID_XILINX_TPG_ZPLATE_HOR_START (V4L2_CID_XILINX_TPG + 10)
58/* Set speed of the horizontal component */
59#define V4L2_CID_XILINX_TPG_ZPLATE_HOR_SPEED (V4L2_CID_XILINX_TPG + 11)
60/* Set starting point of sine wave for vertical component */
61#define V4L2_CID_XILINX_TPG_ZPLATE_VER_START (V4L2_CID_XILINX_TPG + 12)
62/* Set speed of the vertical component */
63#define V4L2_CID_XILINX_TPG_ZPLATE_VER_SPEED (V4L2_CID_XILINX_TPG + 13)
64/* Moving box size */
65#define V4L2_CID_XILINX_TPG_BOX_SIZE (V4L2_CID_XILINX_TPG + 14)
66/* Moving box color */
67#define V4L2_CID_XILINX_TPG_BOX_COLOR (V4L2_CID_XILINX_TPG + 15)
68/* Upper limit count of generated stuck pixels */
69#define V4L2_CID_XILINX_TPG_STUCK_PIXEL_THRESH (V4L2_CID_XILINX_TPG + 16)
70/* Noise level */
71#define V4L2_CID_XILINX_TPG_NOISE_GAIN (V4L2_CID_XILINX_TPG + 17)
72
73#endif /* __UAPI_XILINX_V4L2_CONTROLS_H__ */