aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-31 12:31:14 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-31 12:31:14 -0500
commitb399c46ea0070671f3abbe1915d26076101a42f2 (patch)
tree8945606976fc46c3446c09f8a9e0d4f45f6c408e /include
parentb890eb4ecc718907223a3b7b7b069b59b33f28ef (diff)
parent6c3df5da67f1f53df78c7e20cd53a481dc28eade (diff)
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: - a new jpeg codec driver for Samsung Exynos (jpeg-hw-exynos4) - a new dvb frontend for ds2103 chipset (m88ds2103) - a new sensor driver for Samsung S5K5BAF UXGA (s5k5baf) - new drivers for R-Car VSP1 - a new radio driver: radio-raremono - a new tuner driver for ts2022 chipset (m88ts2022) - the analog part of em28xx is now a separate module that only load/runs if the device is not a pure digital TV device - added a staging driver for bcm2048 radio devices - the omap 2 video driver (omap24xx) was moved to staging. This driver is for an old hardware and uses a deprecated Kernel internal API. If nobody cares enough to fix it, it would be removed on a couple Kernel releases - the sn9c102 driver was moved to staging. This driver was replaced by gspca, and disabled on some distros, as almost all devices are known to work properly with gspca. It should be removed from kernel on a couple Kernel releases - lots of driver fixes, improvements and cleanups * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (421 commits) [media] media: v4l2-dev: fix video device index assignment [media] rc-core: reuse device numbers [media] em28xx-cards: properly initialize the device bitmap [media] Staging: media: Fix line length exceeding 80 characters in as102_drv.c [media] Staging: media: Fix line length exceeding 80 characters in as102_fe.c [media] Staging: media: Fix quoted string split across line in as102_fe.c [media] media: st-rc: Add reset support [media] m2m-deinterlace: fix allocated struct type [media] radio-usb-si4713: fix sparse non static symbol warnings [media] em28xx-audio: remove needless check before usb_free_coherent() [media] au0828: Fix sparse non static symbol warning Revert "[media] go7007-usb: only use go->dev after allocated" [media] em28xx-audio: provide an error code when URB submit fails [media] em28xx: fix check for audio only usb interfaces when changing the usb alternate setting [media] em28xx: fix usb alternate setting for analog and digital video endpoints > 0 [media] em28xx: make 'em28xx_ctrl_ops' static em28xx-alsa: Fix error patch for init/fini [media] em28xx-audio: flush work at .fini [media] drxk: remove the option to load firmware asynchronously [media] em28xx: adjust period size at runtime ...
Diffstat (limited to 'include')
-rw-r--r--include/linux/platform_data/vsp1.h2
-rw-r--r--include/media/adv7604.h38
-rw-r--r--include/media/adv7842.h59
-rw-r--r--include/media/atmel-isi.h2
-rw-r--r--include/media/media-entity.h1
-rw-r--r--include/media/omap4iss.h65
-rw-r--r--include/media/rc-map.h1
-rw-r--r--include/media/saa6588.h2
-rw-r--r--include/media/saa6752hs.h26
-rw-r--r--include/media/si4713.h2
-rw-r--r--include/media/v4l2-fh.h4
-rw-r--r--include/media/v4l2-int-device.h305
-rw-r--r--include/media/v4l2-mem2mem.h24
-rw-r--r--include/media/v4l2-of.h6
-rw-r--r--include/media/videobuf2-core.h18
-rw-r--r--include/trace/events/v4l2.h157
-rw-r--r--include/uapi/linux/media.h1
-rw-r--r--include/uapi/linux/v4l2-controls.h9
-rw-r--r--include/uapi/linux/v4l2-mediabus.h3
-rw-r--r--include/uapi/linux/videodev2.h4
-rw-r--r--include/uapi/linux/vsp1.h34
21 files changed, 396 insertions, 367 deletions
diff --git a/include/linux/platform_data/vsp1.h b/include/linux/platform_data/vsp1.h
index a73a456d7f11..63170e2614b3 100644
--- a/include/linux/platform_data/vsp1.h
+++ b/include/linux/platform_data/vsp1.h
@@ -14,6 +14,8 @@
14#define __PLATFORM_VSP1_H__ 14#define __PLATFORM_VSP1_H__
15 15
16#define VSP1_HAS_LIF (1 << 0) 16#define VSP1_HAS_LIF (1 << 0)
17#define VSP1_HAS_LUT (1 << 1)
18#define VSP1_HAS_SRU (1 << 2)
17 19
18struct vsp1_platform_data { 20struct vsp1_platform_data {
19 unsigned int features; 21 unsigned int features;
diff --git a/include/media/adv7604.h b/include/media/adv7604.h
index dc004bc926c9..d262a3a922bd 100644
--- a/include/media/adv7604.h
+++ b/include/media/adv7604.h
@@ -78,11 +78,14 @@ enum adv7604_op_format_sel {
78 ADV7604_OP_FORMAT_SEL_SDR_ITU656_24_MODE2 = 0x8a, 78 ADV7604_OP_FORMAT_SEL_SDR_ITU656_24_MODE2 = 0x8a,
79}; 79};
80 80
81enum adv7604_drive_strength {
82 ADV7604_DR_STR_MEDIUM_LOW = 1,
83 ADV7604_DR_STR_MEDIUM_HIGH = 2,
84 ADV7604_DR_STR_HIGH = 3,
85};
86
81/* Platform dependent definition */ 87/* Platform dependent definition */
82struct adv7604_platform_data { 88struct adv7604_platform_data {
83 /* connector - HDMI or DVI? */
84 unsigned connector_hdmi:1;
85
86 /* DIS_PWRDNB: 1 if the PWRDNB pin is unused and unconnected */ 89 /* DIS_PWRDNB: 1 if the PWRDNB pin is unused and unconnected */
87 unsigned disable_pwrdnb:1; 90 unsigned disable_pwrdnb:1;
88 91
@@ -110,6 +113,15 @@ struct adv7604_platform_data {
110 unsigned replicate_av_codes:1; 113 unsigned replicate_av_codes:1;
111 unsigned invert_cbcr:1; 114 unsigned invert_cbcr:1;
112 115
116 /* IO register 0x06 */
117 unsigned inv_vs_pol:1;
118 unsigned inv_hs_pol:1;
119
120 /* IO register 0x14 */
121 enum adv7604_drive_strength dr_str_data;
122 enum adv7604_drive_strength dr_str_clk;
123 enum adv7604_drive_strength dr_str_sync;
124
113 /* IO register 0x30 */ 125 /* IO register 0x30 */
114 unsigned output_bus_lsb_to_msb:1; 126 unsigned output_bus_lsb_to_msb:1;
115 127
@@ -131,16 +143,20 @@ struct adv7604_platform_data {
131 u8 i2c_vdp; 143 u8 i2c_vdp;
132}; 144};
133 145
134/* 146enum adv7604_input_port {
135 * Mode of operation. 147 ADV7604_INPUT_HDMI_PORT_A,
136 * This is used as the input argument of the s_routing video op. 148 ADV7604_INPUT_HDMI_PORT_B,
137 */ 149 ADV7604_INPUT_HDMI_PORT_C,
138enum adv7604_mode { 150 ADV7604_INPUT_HDMI_PORT_D,
139 ADV7604_MODE_COMP, 151 ADV7604_INPUT_VGA_RGB,
140 ADV7604_MODE_GR, 152 ADV7604_INPUT_VGA_COMP,
141 ADV7604_MODE_HDMI,
142}; 153};
143 154
155#define ADV7604_EDID_PORT_A 0
156#define ADV7604_EDID_PORT_B 1
157#define ADV7604_EDID_PORT_C 2
158#define ADV7604_EDID_PORT_D 3
159
144#define V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE (V4L2_CID_DV_CLASS_BASE + 0x1000) 160#define V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE (V4L2_CID_DV_CLASS_BASE + 0x1000)
145#define V4L2_CID_ADV_RX_FREE_RUN_COLOR_MANUAL (V4L2_CID_DV_CLASS_BASE + 0x1001) 161#define V4L2_CID_ADV_RX_FREE_RUN_COLOR_MANUAL (V4L2_CID_DV_CLASS_BASE + 0x1001)
146#define V4L2_CID_ADV_RX_FREE_RUN_COLOR (V4L2_CID_DV_CLASS_BASE + 0x1002) 162#define V4L2_CID_ADV_RX_FREE_RUN_COLOR (V4L2_CID_DV_CLASS_BASE + 0x1002)
diff --git a/include/media/adv7842.h b/include/media/adv7842.h
index c02201d1c092..39322091e8b0 100644
--- a/include/media/adv7842.h
+++ b/include/media/adv7842.h
@@ -108,6 +108,13 @@ enum adv7842_select_input {
108 ADV7842_SELECT_SDP_YC, 108 ADV7842_SELECT_SDP_YC,
109}; 109};
110 110
111enum adv7842_drive_strength {
112 ADV7842_DR_STR_LOW = 0,
113 ADV7842_DR_STR_MEDIUM_LOW = 1,
114 ADV7842_DR_STR_MEDIUM_HIGH = 2,
115 ADV7842_DR_STR_HIGH = 3,
116};
117
111struct adv7842_sdp_csc_coeff { 118struct adv7842_sdp_csc_coeff {
112 bool manual; 119 bool manual;
113 uint16_t scaling; 120 uint16_t scaling;
@@ -131,13 +138,18 @@ struct adv7842_sdp_io_sync_adjustment {
131 uint16_t hs_width; 138 uint16_t hs_width;
132 uint16_t de_beg; 139 uint16_t de_beg;
133 uint16_t de_end; 140 uint16_t de_end;
141 uint8_t vs_beg_o;
142 uint8_t vs_beg_e;
143 uint8_t vs_end_o;
144 uint8_t vs_end_e;
145 uint8_t de_v_beg_o;
146 uint8_t de_v_beg_e;
147 uint8_t de_v_end_o;
148 uint8_t de_v_end_e;
134}; 149};
135 150
136/* Platform dependent definition */ 151/* Platform dependent definition */
137struct adv7842_platform_data { 152struct adv7842_platform_data {
138 /* connector - HDMI or DVI? */
139 unsigned connector_hdmi:1;
140
141 /* chip reset during probe */ 153 /* chip reset during probe */
142 unsigned chip_reset:1; 154 unsigned chip_reset:1;
143 155
@@ -156,12 +168,12 @@ struct adv7842_platform_data {
156 /* Default mode */ 168 /* Default mode */
157 enum adv7842_mode mode; 169 enum adv7842_mode mode;
158 170
171 /* Default input */
172 unsigned input;
173
159 /* Video standard */ 174 /* Video standard */
160 enum adv7842_vid_std_select vid_std_select; 175 enum adv7842_vid_std_select vid_std_select;
161 176
162 /* Input Color Space */
163 enum adv7842_inp_color_space inp_color_space;
164
165 /* Select output format */ 177 /* Select output format */
166 enum adv7842_op_format_sel op_format_sel; 178 enum adv7842_op_format_sel op_format_sel;
167 179
@@ -181,22 +193,37 @@ struct adv7842_platform_data {
181 unsigned output_bus_lsb_to_msb:1; 193 unsigned output_bus_lsb_to_msb:1;
182 194
183 /* IO register 0x14 */ 195 /* IO register 0x14 */
184 struct { 196 enum adv7842_drive_strength dr_str_data;
185 unsigned data:2; 197 enum adv7842_drive_strength dr_str_clk;
186 unsigned clock:2; 198 enum adv7842_drive_strength dr_str_sync;
187 unsigned sync:2; 199
188 } drive_strength; 200 /*
201 * IO register 0x19: Adjustment to the LLC DLL phase in
202 * increments of 1/32 of a clock period.
203 */
204 unsigned llc_dll_phase:5;
189 205
190 /* External RAM for 3-D comb or frame synchronizer */ 206 /* External RAM for 3-D comb or frame synchronizer */
191 unsigned sd_ram_size; /* ram size in MB */ 207 unsigned sd_ram_size; /* ram size in MB */
192 unsigned sd_ram_ddr:1; /* ddr or sdr sdram */ 208 unsigned sd_ram_ddr:1; /* ddr or sdr sdram */
193 209
194 /* Free run */ 210 /* HDMI free run, CP-reg 0xBA */
195 unsigned hdmi_free_run_mode; 211 unsigned hdmi_free_run_enable:1;
212 /* 0 = Mode 0: run when there is no TMDS clock
213 1 = Mode 1: run when there is no TMDS clock or the
214 video resolution does not match programmed one. */
215 unsigned hdmi_free_run_mode:1;
216
217 /* SDP free run, CP-reg 0xDD */
218 unsigned sdp_free_run_auto:1;
219 unsigned sdp_free_run_man_col_en:1;
220 unsigned sdp_free_run_cbar_en:1;
221 unsigned sdp_free_run_force:1;
196 222
197 struct adv7842_sdp_csc_coeff sdp_csc_coeff; 223 struct adv7842_sdp_csc_coeff sdp_csc_coeff;
198 224
199 struct adv7842_sdp_io_sync_adjustment sdp_io_sync; 225 struct adv7842_sdp_io_sync_adjustment sdp_io_sync_625;
226 struct adv7842_sdp_io_sync_adjustment sdp_io_sync_525;
200 227
201 /* i2c addresses */ 228 /* i2c addresses */
202 u8 i2c_sdp_io; 229 u8 i2c_sdp_io;
@@ -223,4 +250,8 @@ struct adv7842_platform_data {
223 * deinterlacer. */ 250 * deinterlacer. */
224#define ADV7842_CMD_RAM_TEST _IO('V', BASE_VIDIOC_PRIVATE) 251#define ADV7842_CMD_RAM_TEST _IO('V', BASE_VIDIOC_PRIVATE)
225 252
253#define ADV7842_EDID_PORT_A 0
254#define ADV7842_EDID_PORT_B 1
255#define ADV7842_EDID_PORT_VGA 2
256
226#endif 257#endif
diff --git a/include/media/atmel-isi.h b/include/media/atmel-isi.h
index 656823075709..2b023471ac89 100644
--- a/include/media/atmel-isi.h
+++ b/include/media/atmel-isi.h
@@ -56,6 +56,7 @@
56#define ISI_CFG1_FRATE_DIV_6 (5 << 8) 56#define ISI_CFG1_FRATE_DIV_6 (5 << 8)
57#define ISI_CFG1_FRATE_DIV_7 (6 << 8) 57#define ISI_CFG1_FRATE_DIV_7 (6 << 8)
58#define ISI_CFG1_FRATE_DIV_8 (7 << 8) 58#define ISI_CFG1_FRATE_DIV_8 (7 << 8)
59#define ISI_CFG1_FRATE_DIV_MASK (7 << 8)
59#define ISI_CFG1_DISCR (1 << 11) 60#define ISI_CFG1_DISCR (1 << 11)
60#define ISI_CFG1_FULL_MODE (1 << 12) 61#define ISI_CFG1_FULL_MODE (1 << 12)
61 62
@@ -66,6 +67,7 @@
66#define ISI_CFG2_YCC_SWAP_MODE_1 (1 << 28) 67#define ISI_CFG2_YCC_SWAP_MODE_1 (1 << 28)
67#define ISI_CFG2_YCC_SWAP_MODE_2 (2 << 28) 68#define ISI_CFG2_YCC_SWAP_MODE_2 (2 << 28)
68#define ISI_CFG2_YCC_SWAP_MODE_3 (3 << 28) 69#define ISI_CFG2_YCC_SWAP_MODE_3 (3 << 28)
70#define ISI_CFG2_YCC_SWAP_MODE_MASK (3 << 28)
69#define ISI_CFG2_IM_VSIZE_OFFSET 0 71#define ISI_CFG2_IM_VSIZE_OFFSET 0
70#define ISI_CFG2_IM_HSIZE_OFFSET 16 72#define ISI_CFG2_IM_HSIZE_OFFSET 16
71#define ISI_CFG2_IM_VSIZE_MASK (0x7FF << ISI_CFG2_IM_VSIZE_OFFSET) 73#define ISI_CFG2_IM_VSIZE_MASK (0x7FF << ISI_CFG2_IM_VSIZE_OFFSET)
diff --git a/include/media/media-entity.h b/include/media/media-entity.h
index 10df55187981..e00459185d20 100644
--- a/include/media/media-entity.h
+++ b/include/media/media-entity.h
@@ -24,6 +24,7 @@
24#define _MEDIA_ENTITY_H 24#define _MEDIA_ENTITY_H
25 25
26#include <linux/bitops.h> 26#include <linux/bitops.h>
27#include <linux/kernel.h>
27#include <linux/list.h> 28#include <linux/list.h>
28#include <linux/media.h> 29#include <linux/media.h>
29 30
diff --git a/include/media/omap4iss.h b/include/media/omap4iss.h
new file mode 100644
index 000000000000..0d7620db5e32
--- /dev/null
+++ b/include/media/omap4iss.h
@@ -0,0 +1,65 @@
1#ifndef ARCH_ARM_PLAT_OMAP4_ISS_H
2#define ARCH_ARM_PLAT_OMAP4_ISS_H
3
4#include <linux/i2c.h>
5
6struct iss_device;
7
8enum iss_interface_type {
9 ISS_INTERFACE_CSI2A_PHY1,
10 ISS_INTERFACE_CSI2B_PHY2,
11};
12
13/**
14 * struct iss_csiphy_lane: CSI2 lane position and polarity
15 * @pos: position of the lane
16 * @pol: polarity of the lane
17 */
18struct iss_csiphy_lane {
19 u8 pos;
20 u8 pol;
21};
22
23#define ISS_CSIPHY1_NUM_DATA_LANES 4
24#define ISS_CSIPHY2_NUM_DATA_LANES 1
25
26/**
27 * struct iss_csiphy_lanes_cfg - CSI2 lane configuration
28 * @data: Configuration of one or two data lanes
29 * @clk: Clock lane configuration
30 */
31struct iss_csiphy_lanes_cfg {
32 struct iss_csiphy_lane data[ISS_CSIPHY1_NUM_DATA_LANES];
33 struct iss_csiphy_lane clk;
34};
35
36/**
37 * struct iss_csi2_platform_data - CSI2 interface platform data
38 * @crc: Enable the cyclic redundancy check
39 * @vpclk_div: Video port output clock control
40 */
41struct iss_csi2_platform_data {
42 unsigned crc:1;
43 unsigned vpclk_div:2;
44 struct iss_csiphy_lanes_cfg lanecfg;
45};
46
47struct iss_subdev_i2c_board_info {
48 struct i2c_board_info *board_info;
49 int i2c_adapter_id;
50};
51
52struct iss_v4l2_subdevs_group {
53 struct iss_subdev_i2c_board_info *subdevs;
54 enum iss_interface_type interface;
55 union {
56 struct iss_csi2_platform_data csi2;
57 } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */
58};
59
60struct iss_platform_data {
61 struct iss_v4l2_subdevs_group *subdevs;
62 void (*set_constraints)(struct iss_device *iss, bool enable);
63};
64
65#endif
diff --git a/include/media/rc-map.h b/include/media/rc-map.h
index 6628f5d01f52..a20ed97d7d8a 100644
--- a/include/media/rc-map.h
+++ b/include/media/rc-map.h
@@ -193,6 +193,7 @@ void rc_map_init(void);
193#define RC_MAP_VIDEOMATE_TV_PVR "rc-videomate-tv-pvr" 193#define RC_MAP_VIDEOMATE_TV_PVR "rc-videomate-tv-pvr"
194#define RC_MAP_WINFAST "rc-winfast" 194#define RC_MAP_WINFAST "rc-winfast"
195#define RC_MAP_WINFAST_USBII_DELUXE "rc-winfast-usbii-deluxe" 195#define RC_MAP_WINFAST_USBII_DELUXE "rc-winfast-usbii-deluxe"
196#define RC_MAP_SU3000 "rc-su3000"
196 197
197/* 198/*
198 * Please, do not just append newer Remote Controller names at the end. 199 * Please, do not just append newer Remote Controller names at the end.
diff --git a/include/media/saa6588.h b/include/media/saa6588.h
index 2c3c4420a4eb..b5ec1aa60ed5 100644
--- a/include/media/saa6588.h
+++ b/include/media/saa6588.h
@@ -27,6 +27,7 @@
27 27
28struct saa6588_command { 28struct saa6588_command {
29 unsigned int block_count; 29 unsigned int block_count;
30 bool nonblocking;
30 int result; 31 int result;
31 unsigned char __user *buffer; 32 unsigned char __user *buffer;
32 struct file *instance; 33 struct file *instance;
@@ -34,7 +35,6 @@ struct saa6588_command {
34}; 35};
35 36
36/* These ioctls are internal to the kernel */ 37/* These ioctls are internal to the kernel */
37#define SAA6588_CMD_OPEN _IOW('R', 1, int)
38#define SAA6588_CMD_CLOSE _IOW('R', 2, int) 38#define SAA6588_CMD_CLOSE _IOW('R', 2, int)
39#define SAA6588_CMD_READ _IOR('R', 3, int) 39#define SAA6588_CMD_READ _IOR('R', 3, int)
40#define SAA6588_CMD_POLL _IOR('R', 4, int) 40#define SAA6588_CMD_POLL _IOR('R', 4, int)
diff --git a/include/media/saa6752hs.h b/include/media/saa6752hs.h
deleted file mode 100644
index 3b8686ead80d..000000000000
--- a/include/media/saa6752hs.h
+++ /dev/null
@@ -1,26 +0,0 @@
1/*
2 saa6752hs.h - definition for saa6752hs MPEG encoder
3
4 Copyright (C) 2003 Andrew de Quincey <adq@lidskialf.net>
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 as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19*/
20
21
22/*
23 * Local variables:
24 * c-basic-offset: 8
25 * End:
26 */
diff --git a/include/media/si4713.h b/include/media/si4713.h
index ed7353e8a982..f98a0a7af61c 100644
--- a/include/media/si4713.h
+++ b/include/media/si4713.h
@@ -23,6 +23,8 @@
23 * Platform dependent definition 23 * Platform dependent definition
24 */ 24 */
25struct si4713_platform_data { 25struct si4713_platform_data {
26 const char * const *supply_names;
27 unsigned supplies;
26 int gpio_reset; /* < 0 if not used */ 28 int gpio_reset; /* < 0 if not used */
27}; 29};
28 30
diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.h
index 528cdaf622e1..803516775162 100644
--- a/include/media/v4l2-fh.h
+++ b/include/media/v4l2-fh.h
@@ -45,6 +45,10 @@ struct v4l2_fh {
45 struct list_head available; /* Dequeueable event */ 45 struct list_head available; /* Dequeueable event */
46 unsigned int navailable; 46 unsigned int navailable;
47 u32 sequence; 47 u32 sequence;
48
49#if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV)
50 struct v4l2_m2m_ctx *m2m_ctx;
51#endif
48}; 52};
49 53
50/* 54/*
diff --git a/include/media/v4l2-int-device.h b/include/media/v4l2-int-device.h
deleted file mode 100644
index 0286c95814ff..000000000000
--- a/include/media/v4l2-int-device.h
+++ /dev/null
@@ -1,305 +0,0 @@
1/*
2 * include/media/v4l2-int-device.h
3 *
4 * V4L2 internal ioctl interface.
5 *
6 * Copyright (C) 2007 Nokia Corporation.
7 *
8 * Contact: Sakari Ailus <sakari.ailus@nokia.com>
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * version 2 as published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 * 02110-1301 USA
23 */
24
25#ifndef V4L2_INT_DEVICE_H
26#define V4L2_INT_DEVICE_H
27
28#include <media/v4l2-common.h>
29
30#define V4L2NAMESIZE 32
31
32/*
33 *
34 * The internal V4L2 device interface core.
35 *
36 */
37
38enum v4l2_int_type {
39 v4l2_int_type_master = 1,
40 v4l2_int_type_slave
41};
42
43struct module;
44
45struct v4l2_int_device;
46
47struct v4l2_int_master {
48 int (*attach)(struct v4l2_int_device *slave);
49 void (*detach)(struct v4l2_int_device *slave);
50};
51
52typedef int (v4l2_int_ioctl_func)(struct v4l2_int_device *);
53typedef int (v4l2_int_ioctl_func_0)(struct v4l2_int_device *);
54typedef int (v4l2_int_ioctl_func_1)(struct v4l2_int_device *, void *);
55
56struct v4l2_int_ioctl_desc {
57 int num;
58 v4l2_int_ioctl_func *func;
59};
60
61struct v4l2_int_slave {
62 /* Don't touch master. */
63 struct v4l2_int_device *master;
64
65 char attach_to[V4L2NAMESIZE];
66
67 int num_ioctls;
68 struct v4l2_int_ioctl_desc *ioctls;
69};
70
71struct v4l2_int_device {
72 /* Don't touch head. */
73 struct list_head head;
74
75 struct module *module;
76
77 char name[V4L2NAMESIZE];
78
79 enum v4l2_int_type type;
80 union {
81 struct v4l2_int_master *master;
82 struct v4l2_int_slave *slave;
83 } u;
84
85 void *priv;
86};
87
88void v4l2_int_device_try_attach_all(void);
89
90int v4l2_int_device_register(struct v4l2_int_device *d);
91void v4l2_int_device_unregister(struct v4l2_int_device *d);
92
93int v4l2_int_ioctl_0(struct v4l2_int_device *d, int cmd);
94int v4l2_int_ioctl_1(struct v4l2_int_device *d, int cmd, void *arg);
95
96/*
97 *
98 * Types and definitions for IOCTL commands.
99 *
100 */
101
102enum v4l2_power {
103 V4L2_POWER_OFF = 0,
104 V4L2_POWER_ON,
105 V4L2_POWER_STANDBY,
106};
107
108/* Slave interface type. */
109enum v4l2_if_type {
110 /*
111 * Parallel 8-, 10- or 12-bit interface, used by for example
112 * on certain image sensors.
113 */
114 V4L2_IF_TYPE_BT656,
115};
116
117enum v4l2_if_type_bt656_mode {
118 /*
119 * Modes without Bt synchronisation codes. Separate
120 * synchronisation signal lines are used.
121 */
122 V4L2_IF_TYPE_BT656_MODE_NOBT_8BIT,
123 V4L2_IF_TYPE_BT656_MODE_NOBT_10BIT,
124 V4L2_IF_TYPE_BT656_MODE_NOBT_12BIT,
125 /*
126 * Use Bt synchronisation codes. The vertical and horizontal
127 * synchronisation is done based on synchronisation codes.
128 */
129 V4L2_IF_TYPE_BT656_MODE_BT_8BIT,
130 V4L2_IF_TYPE_BT656_MODE_BT_10BIT,
131};
132
133struct v4l2_if_type_bt656 {
134 /*
135 * 0: Frame begins when vsync is high.
136 * 1: Frame begins when vsync changes from low to high.
137 */
138 unsigned frame_start_on_rising_vs:1;
139 /* Use Bt synchronisation codes for sync correction. */
140 unsigned bt_sync_correct:1;
141 /* Swap every two adjacent image data elements. */
142 unsigned swap:1;
143 /* Inverted latch clock polarity from slave. */
144 unsigned latch_clk_inv:1;
145 /* Hs polarity. 0 is active high, 1 active low. */
146 unsigned nobt_hs_inv:1;
147 /* Vs polarity. 0 is active high, 1 active low. */
148 unsigned nobt_vs_inv:1;
149 enum v4l2_if_type_bt656_mode mode;
150 /* Minimum accepted bus clock for slave (in Hz). */
151 u32 clock_min;
152 /* Maximum accepted bus clock for slave. */
153 u32 clock_max;
154 /*
155 * Current wish of the slave. May only change in response to
156 * ioctls that affect image capture.
157 */
158 u32 clock_curr;
159};
160
161struct v4l2_ifparm {
162 enum v4l2_if_type if_type;
163 union {
164 struct v4l2_if_type_bt656 bt656;
165 } u;
166};
167
168/* IOCTL command numbers. */
169enum v4l2_int_ioctl_num {
170 /*
171 *
172 * "Proper" V4L ioctls, as in struct video_device.
173 *
174 */
175 vidioc_int_enum_fmt_cap_num = 1,
176 vidioc_int_g_fmt_cap_num,
177 vidioc_int_s_fmt_cap_num,
178 vidioc_int_try_fmt_cap_num,
179 vidioc_int_queryctrl_num,
180 vidioc_int_g_ctrl_num,
181 vidioc_int_s_ctrl_num,
182 vidioc_int_cropcap_num,
183 vidioc_int_g_crop_num,
184 vidioc_int_s_crop_num,
185 vidioc_int_g_parm_num,
186 vidioc_int_s_parm_num,
187 vidioc_int_querystd_num,
188 vidioc_int_s_std_num,
189 vidioc_int_s_video_routing_num,
190
191 /*
192 *
193 * Strictly internal ioctls.
194 *
195 */
196 /* Initialise the device when slave attaches to the master. */
197 vidioc_int_dev_init_num = 1000,
198 /* Delinitialise the device at slave detach. */
199 vidioc_int_dev_exit_num,
200 /* Set device power state. */
201 vidioc_int_s_power_num,
202 /*
203 * Get slave private data, e.g. platform-specific slave
204 * configuration used by the master.
205 */
206 vidioc_int_g_priv_num,
207 /* Get slave interface parameters. */
208 vidioc_int_g_ifparm_num,
209 /* Does the slave need to be reset after VIDIOC_DQBUF? */
210 vidioc_int_g_needs_reset_num,
211 vidioc_int_enum_framesizes_num,
212 vidioc_int_enum_frameintervals_num,
213
214 /*
215 *
216 * VIDIOC_INT_* ioctls.
217 *
218 */
219 /* VIDIOC_INT_RESET */
220 vidioc_int_reset_num,
221 /* VIDIOC_INT_INIT */
222 vidioc_int_init_num,
223
224 /*
225 *
226 * Start of private ioctls.
227 *
228 */
229 vidioc_int_priv_start_num = 2000,
230};
231
232/*
233 *
234 * IOCTL wrapper functions for better type checking.
235 *
236 */
237
238#define V4L2_INT_WRAPPER_0(name) \
239 static inline int vidioc_int_##name(struct v4l2_int_device *d) \
240 { \
241 return v4l2_int_ioctl_0(d, vidioc_int_##name##_num); \
242 } \
243 \
244 static inline struct v4l2_int_ioctl_desc \
245 vidioc_int_##name##_cb(int (*func) \
246 (struct v4l2_int_device *)) \
247 { \
248 struct v4l2_int_ioctl_desc desc; \
249 \
250 desc.num = vidioc_int_##name##_num; \
251 desc.func = (v4l2_int_ioctl_func *)func; \
252 \
253 return desc; \
254 }
255
256#define V4L2_INT_WRAPPER_1(name, arg_type, asterisk) \
257 static inline int vidioc_int_##name(struct v4l2_int_device *d, \
258 arg_type asterisk arg) \
259 { \
260 return v4l2_int_ioctl_1(d, vidioc_int_##name##_num, \
261 (void *)(unsigned long)arg); \
262 } \
263 \
264 static inline struct v4l2_int_ioctl_desc \
265 vidioc_int_##name##_cb(int (*func) \
266 (struct v4l2_int_device *, \
267 arg_type asterisk)) \
268 { \
269 struct v4l2_int_ioctl_desc desc; \
270 \
271 desc.num = vidioc_int_##name##_num; \
272 desc.func = (v4l2_int_ioctl_func *)func; \
273 \
274 return desc; \
275 }
276
277V4L2_INT_WRAPPER_1(enum_fmt_cap, struct v4l2_fmtdesc, *);
278V4L2_INT_WRAPPER_1(g_fmt_cap, struct v4l2_format, *);
279V4L2_INT_WRAPPER_1(s_fmt_cap, struct v4l2_format, *);
280V4L2_INT_WRAPPER_1(try_fmt_cap, struct v4l2_format, *);
281V4L2_INT_WRAPPER_1(queryctrl, struct v4l2_queryctrl, *);
282V4L2_INT_WRAPPER_1(g_ctrl, struct v4l2_control, *);
283V4L2_INT_WRAPPER_1(s_ctrl, struct v4l2_control, *);
284V4L2_INT_WRAPPER_1(cropcap, struct v4l2_cropcap, *);
285V4L2_INT_WRAPPER_1(g_crop, struct v4l2_crop, *);
286V4L2_INT_WRAPPER_1(s_crop, struct v4l2_crop, *);
287V4L2_INT_WRAPPER_1(g_parm, struct v4l2_streamparm, *);
288V4L2_INT_WRAPPER_1(s_parm, struct v4l2_streamparm, *);
289V4L2_INT_WRAPPER_1(querystd, v4l2_std_id, *);
290V4L2_INT_WRAPPER_1(s_std, v4l2_std_id, *);
291V4L2_INT_WRAPPER_1(s_video_routing, struct v4l2_routing, *);
292
293V4L2_INT_WRAPPER_0(dev_init);
294V4L2_INT_WRAPPER_0(dev_exit);
295V4L2_INT_WRAPPER_1(s_power, enum v4l2_power, );
296V4L2_INT_WRAPPER_1(g_priv, void, *);
297V4L2_INT_WRAPPER_1(g_ifparm, struct v4l2_ifparm, *);
298V4L2_INT_WRAPPER_1(g_needs_reset, void, *);
299V4L2_INT_WRAPPER_1(enum_framesizes, struct v4l2_frmsizeenum, *);
300V4L2_INT_WRAPPER_1(enum_frameintervals, struct v4l2_frmivalenum, *);
301
302V4L2_INT_WRAPPER_0(reset);
303V4L2_INT_WRAPPER_0(init);
304
305#endif
diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h
index 44542a20ab81..12ea5a6a4331 100644
--- a/include/media/v4l2-mem2mem.h
+++ b/include/media/v4l2-mem2mem.h
@@ -64,6 +64,9 @@ struct v4l2_m2m_queue_ctx {
64}; 64};
65 65
66struct v4l2_m2m_ctx { 66struct v4l2_m2m_ctx {
67 /* optional cap/out vb2 queues lock */
68 struct mutex *q_lock;
69
67/* private: internal use only */ 70/* private: internal use only */
68 struct v4l2_m2m_dev *m2m_dev; 71 struct v4l2_m2m_dev *m2m_dev;
69 72
@@ -229,5 +232,26 @@ static inline void *v4l2_m2m_dst_buf_remove(struct v4l2_m2m_ctx *m2m_ctx)
229 return v4l2_m2m_buf_remove(&m2m_ctx->cap_q_ctx); 232 return v4l2_m2m_buf_remove(&m2m_ctx->cap_q_ctx);
230} 233}
231 234
235/* v4l2 ioctl helpers */
236
237int v4l2_m2m_ioctl_reqbufs(struct file *file, void *priv,
238 struct v4l2_requestbuffers *rb);
239int v4l2_m2m_ioctl_create_bufs(struct file *file, void *fh,
240 struct v4l2_create_buffers *create);
241int v4l2_m2m_ioctl_querybuf(struct file *file, void *fh,
242 struct v4l2_buffer *buf);
243int v4l2_m2m_ioctl_expbuf(struct file *file, void *fh,
244 struct v4l2_exportbuffer *eb);
245int v4l2_m2m_ioctl_qbuf(struct file *file, void *fh,
246 struct v4l2_buffer *buf);
247int v4l2_m2m_ioctl_dqbuf(struct file *file, void *fh,
248 struct v4l2_buffer *buf);
249int v4l2_m2m_ioctl_streamon(struct file *file, void *fh,
250 enum v4l2_buf_type type);
251int v4l2_m2m_ioctl_streamoff(struct file *file, void *fh,
252 enum v4l2_buf_type type);
253int v4l2_m2m_fop_mmap(struct file *file, struct vm_area_struct *vma);
254unsigned int v4l2_m2m_fop_poll(struct file *file, poll_table *wait);
255
232#endif /* _MEDIA_V4L2_MEM2MEM_H */ 256#endif /* _MEDIA_V4L2_MEM2MEM_H */
233 257
diff --git a/include/media/v4l2-of.h b/include/media/v4l2-of.h
index 3a8a84124b44..541cea4122e9 100644
--- a/include/media/v4l2-of.h
+++ b/include/media/v4l2-of.h
@@ -53,7 +53,6 @@ struct v4l2_of_bus_parallel {
53 * @port: identifier (value of reg property) of a port this endpoint belongs to 53 * @port: identifier (value of reg property) of a port this endpoint belongs to
54 * @id: identifier (value of reg property) of this endpoint 54 * @id: identifier (value of reg property) of this endpoint
55 * @local_node: pointer to device_node of this endpoint 55 * @local_node: pointer to device_node of this endpoint
56 * @remote: phandle to remote endpoint node
57 * @bus_type: bus type 56 * @bus_type: bus type
58 * @bus: bus configuration data structure 57 * @bus: bus configuration data structure
59 * @head: list head for this structure 58 * @head: list head for this structure
@@ -62,7 +61,6 @@ struct v4l2_of_endpoint {
62 unsigned int port; 61 unsigned int port;
63 unsigned int id; 62 unsigned int id;
64 const struct device_node *local_node; 63 const struct device_node *local_node;
65 const __be32 *remote;
66 enum v4l2_mbus_type bus_type; 64 enum v4l2_mbus_type bus_type;
67 union { 65 union {
68 struct v4l2_of_bus_parallel parallel; 66 struct v4l2_of_bus_parallel parallel;
@@ -72,8 +70,8 @@ struct v4l2_of_endpoint {
72}; 70};
73 71
74#ifdef CONFIG_OF 72#ifdef CONFIG_OF
75void v4l2_of_parse_endpoint(const struct device_node *node, 73int v4l2_of_parse_endpoint(const struct device_node *node,
76 struct v4l2_of_endpoint *link); 74 struct v4l2_of_endpoint *endpoint);
77struct device_node *v4l2_of_get_next_endpoint(const struct device_node *parent, 75struct device_node *v4l2_of_get_next_endpoint(const struct device_node *parent,
78 struct device_node *previous); 76 struct device_node *previous);
79struct device_node *v4l2_of_get_remote_port_parent( 77struct device_node *v4l2_of_get_remote_port_parent(
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
index 941055e9d125..bef53ce555d2 100644
--- a/include/media/videobuf2-core.h
+++ b/include/media/videobuf2-core.h
@@ -142,6 +142,7 @@ enum vb2_fileio_flags {
142/** 142/**
143 * enum vb2_buffer_state - current video buffer state 143 * enum vb2_buffer_state - current video buffer state
144 * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control 144 * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control
145 * @VB2_BUF_STATE_PREPARING: buffer is being prepared in videobuf
145 * @VB2_BUF_STATE_PREPARED: buffer prepared in videobuf and by the driver 146 * @VB2_BUF_STATE_PREPARED: buffer prepared in videobuf and by the driver
146 * @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver 147 * @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver
147 * @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used 148 * @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used
@@ -154,6 +155,7 @@ enum vb2_fileio_flags {
154 */ 155 */
155enum vb2_buffer_state { 156enum vb2_buffer_state {
156 VB2_BUF_STATE_DEQUEUED, 157 VB2_BUF_STATE_DEQUEUED,
158 VB2_BUF_STATE_PREPARING,
157 VB2_BUF_STATE_PREPARED, 159 VB2_BUF_STATE_PREPARED,
158 VB2_BUF_STATE_QUEUED, 160 VB2_BUF_STATE_QUEUED,
159 VB2_BUF_STATE_ACTIVE, 161 VB2_BUF_STATE_ACTIVE,
@@ -250,10 +252,13 @@ struct vb2_buffer {
250 * receive buffers with @buf_queue callback before 252 * receive buffers with @buf_queue callback before
251 * @start_streaming is called; the driver gets the number 253 * @start_streaming is called; the driver gets the number
252 * of already queued buffers in count parameter; driver 254 * of already queued buffers in count parameter; driver
253 * can return an error if hardware fails or not enough 255 * can return an error if hardware fails, in that case all
254 * buffers has been queued, in such case all buffers that 256 * buffers that have been already given by the @buf_queue
255 * have been already given by the @buf_queue callback are 257 * callback are invalidated.
256 * invalidated. 258 * If there were not enough queued buffers to start
259 * streaming, then this callback returns -ENOBUFS, and the
260 * vb2 core will retry calling @start_streaming when a new
261 * buffer is queued.
257 * @stop_streaming: called when 'streaming' state must be disabled; driver 262 * @stop_streaming: called when 'streaming' state must be disabled; driver
258 * should stop any DMA transactions or wait until they 263 * should stop any DMA transactions or wait until they
259 * finish and give back all buffers it got from buf_queue() 264 * finish and give back all buffers it got from buf_queue()
@@ -321,6 +326,9 @@ struct v4l2_fh;
321 * @done_wq: waitqueue for processes waiting for buffers ready to be dequeued 326 * @done_wq: waitqueue for processes waiting for buffers ready to be dequeued
322 * @alloc_ctx: memory type/allocator-specific contexts for each plane 327 * @alloc_ctx: memory type/allocator-specific contexts for each plane
323 * @streaming: current streaming state 328 * @streaming: current streaming state
329 * @retry_start_streaming: start_streaming() was called, but there were not enough
330 * buffers queued. If set, then retry calling start_streaming when
331 * queuing a new buffer.
324 * @fileio: file io emulator internal data, used only if emulator is active 332 * @fileio: file io emulator internal data, used only if emulator is active
325 */ 333 */
326struct vb2_queue { 334struct vb2_queue {
@@ -353,6 +361,7 @@ struct vb2_queue {
353 unsigned int plane_sizes[VIDEO_MAX_PLANES]; 361 unsigned int plane_sizes[VIDEO_MAX_PLANES];
354 362
355 unsigned int streaming:1; 363 unsigned int streaming:1;
364 unsigned int retry_start_streaming:1;
356 365
357 struct vb2_fileio_data *fileio; 366 struct vb2_fileio_data *fileio;
358}; 367};
@@ -491,6 +500,7 @@ int vb2_ioctl_expbuf(struct file *file, void *priv,
491 500
492int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma); 501int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma);
493int vb2_fop_release(struct file *file); 502int vb2_fop_release(struct file *file);
503int _vb2_fop_release(struct file *file, struct mutex *lock);
494ssize_t vb2_fop_write(struct file *file, const char __user *buf, 504ssize_t vb2_fop_write(struct file *file, const char __user *buf,
495 size_t count, loff_t *ppos); 505 size_t count, loff_t *ppos);
496ssize_t vb2_fop_read(struct file *file, char __user *buf, 506ssize_t vb2_fop_read(struct file *file, char __user *buf,
diff --git a/include/trace/events/v4l2.h b/include/trace/events/v4l2.h
new file mode 100644
index 000000000000..ef94ecad1c94
--- /dev/null
+++ b/include/trace/events/v4l2.h
@@ -0,0 +1,157 @@
1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM v4l2
3
4#if !defined(_TRACE_V4L2_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_V4L2_H
6
7#include <linux/tracepoint.h>
8
9#define show_type(type) \
10 __print_symbolic(type, \
11 { V4L2_BUF_TYPE_VIDEO_CAPTURE, "VIDEO_CAPTURE" }, \
12 { V4L2_BUF_TYPE_VIDEO_OUTPUT, "VIDEO_OUTPUT" }, \
13 { V4L2_BUF_TYPE_VIDEO_OVERLAY, "VIDEO_OVERLAY" }, \
14 { V4L2_BUF_TYPE_VBI_CAPTURE, "VBI_CAPTURE" }, \
15 { V4L2_BUF_TYPE_VBI_OUTPUT, "VBI_OUTPUT" }, \
16 { V4L2_BUF_TYPE_SLICED_VBI_CAPTURE, "SLICED_VBI_CAPTURE" }, \
17 { V4L2_BUF_TYPE_SLICED_VBI_OUTPUT, "SLICED_VBI_OUTPUT" }, \
18 { V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY, "VIDEO_OUTPUT_OVERLAY" },\
19 { V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, "VIDEO_CAPTURE_MPLANE" },\
20 { V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, "VIDEO_OUTPUT_MPLANE" }, \
21 { V4L2_BUF_TYPE_PRIVATE, "PRIVATE" })
22
23#define show_field(field) \
24 __print_symbolic(field, \
25 { V4L2_FIELD_ANY, "ANY" }, \
26 { V4L2_FIELD_NONE, "NONE" }, \
27 { V4L2_FIELD_TOP, "TOP" }, \
28 { V4L2_FIELD_BOTTOM, "BOTTOM" }, \
29 { V4L2_FIELD_INTERLACED, "INTERLACED" }, \
30 { V4L2_FIELD_SEQ_TB, "SEQ_TB" }, \
31 { V4L2_FIELD_SEQ_BT, "SEQ_BT" }, \
32 { V4L2_FIELD_ALTERNATE, "ALTERNATE" }, \
33 { V4L2_FIELD_INTERLACED_TB, "INTERLACED_TB" }, \
34 { V4L2_FIELD_INTERLACED_BT, "INTERLACED_BT" })
35
36#define show_timecode_type(type) \
37 __print_symbolic(type, \
38 { V4L2_TC_TYPE_24FPS, "24FPS" }, \
39 { V4L2_TC_TYPE_25FPS, "25FPS" }, \
40 { V4L2_TC_TYPE_30FPS, "30FPS" }, \
41 { V4L2_TC_TYPE_50FPS, "50FPS" }, \
42 { V4L2_TC_TYPE_60FPS, "60FPS" })
43
44#define show_flags(flags) \
45 __print_flags(flags, "|", \
46 { V4L2_BUF_FLAG_MAPPED, "MAPPED" }, \
47 { V4L2_BUF_FLAG_QUEUED, "QUEUED" }, \
48 { V4L2_BUF_FLAG_DONE, "DONE" }, \
49 { V4L2_BUF_FLAG_KEYFRAME, "KEYFRAME" }, \
50 { V4L2_BUF_FLAG_PFRAME, "PFRAME" }, \
51 { V4L2_BUF_FLAG_BFRAME, "BFRAME" }, \
52 { V4L2_BUF_FLAG_ERROR, "ERROR" }, \
53 { V4L2_BUF_FLAG_TIMECODE, "TIMECODE" }, \
54 { V4L2_BUF_FLAG_PREPARED, "PREPARED" }, \
55 { V4L2_BUF_FLAG_NO_CACHE_INVALIDATE, "NO_CACHE_INVALIDATE" }, \
56 { V4L2_BUF_FLAG_NO_CACHE_CLEAN, "NO_CACHE_CLEAN" }, \
57 { V4L2_BUF_FLAG_TIMESTAMP_MASK, "TIMESTAMP_MASK" }, \
58 { V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN, "TIMESTAMP_UNKNOWN" }, \
59 { V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC, "TIMESTAMP_MONOTONIC" }, \
60 { V4L2_BUF_FLAG_TIMESTAMP_COPY, "TIMESTAMP_COPY" })
61
62#define show_timecode_flags(flags) \
63 __print_flags(flags, "|", \
64 { V4L2_TC_FLAG_DROPFRAME, "DROPFRAME" }, \
65 { V4L2_TC_FLAG_COLORFRAME, "COLORFRAME" }, \
66 { V4L2_TC_USERBITS_USERDEFINED, "USERBITS_USERDEFINED" }, \
67 { V4L2_TC_USERBITS_8BITCHARS, "USERBITS_8BITCHARS" })
68
69#define V4L2_TRACE_EVENT(event_name) \
70 TRACE_EVENT(event_name, \
71 TP_PROTO(int minor, struct v4l2_buffer *buf), \
72 \
73 TP_ARGS(minor, buf), \
74 \
75 TP_STRUCT__entry( \
76 __field(int, minor) \
77 __field(u32, index) \
78 __field(u32, type) \
79 __field(u32, bytesused) \
80 __field(u32, flags) \
81 __field(u32, field) \
82 __field(s64, timestamp) \
83 __field(u32, timecode_type) \
84 __field(u32, timecode_flags) \
85 __field(u8, timecode_frames) \
86 __field(u8, timecode_seconds) \
87 __field(u8, timecode_minutes) \
88 __field(u8, timecode_hours) \
89 __field(u8, timecode_userbits0) \
90 __field(u8, timecode_userbits1) \
91 __field(u8, timecode_userbits2) \
92 __field(u8, timecode_userbits3) \
93 __field(u32, sequence) \
94 ), \
95 \
96 TP_fast_assign( \
97 __entry->minor = minor; \
98 __entry->index = buf->index; \
99 __entry->type = buf->type; \
100 __entry->bytesused = buf->bytesused; \
101 __entry->flags = buf->flags; \
102 __entry->field = buf->field; \
103 __entry->timestamp = \
104 timeval_to_ns(&buf->timestamp); \
105 __entry->timecode_type = buf->timecode.type; \
106 __entry->timecode_flags = buf->timecode.flags; \
107 __entry->timecode_frames = \
108 buf->timecode.frames; \
109 __entry->timecode_seconds = \
110 buf->timecode.seconds; \
111 __entry->timecode_minutes = \
112 buf->timecode.minutes; \
113 __entry->timecode_hours = buf->timecode.hours; \
114 __entry->timecode_userbits0 = \
115 buf->timecode.userbits[0]; \
116 __entry->timecode_userbits1 = \
117 buf->timecode.userbits[1]; \
118 __entry->timecode_userbits2 = \
119 buf->timecode.userbits[2]; \
120 __entry->timecode_userbits3 = \
121 buf->timecode.userbits[3]; \
122 __entry->sequence = buf->sequence; \
123 ), \
124 \
125 TP_printk("minor = %d, index = %u, type = %s, " \
126 "bytesused = %u, flags = %s, " \
127 "field = %s, timestamp = %llu, timecode = { " \
128 "type = %s, flags = %s, frames = %u, " \
129 "seconds = %u, minutes = %u, hours = %u, " \
130 "userbits = { %u %u %u %u } }, " \
131 "sequence = %u", __entry->minor, \
132 __entry->index, show_type(__entry->type), \
133 __entry->bytesused, \
134 show_flags(__entry->flags), \
135 show_field(__entry->field), \
136 __entry->timestamp, \
137 show_timecode_type(__entry->timecode_type), \
138 show_timecode_flags(__entry->timecode_flags), \
139 __entry->timecode_frames, \
140 __entry->timecode_seconds, \
141 __entry->timecode_minutes, \
142 __entry->timecode_hours, \
143 __entry->timecode_userbits0, \
144 __entry->timecode_userbits1, \
145 __entry->timecode_userbits2, \
146 __entry->timecode_userbits3, \
147 __entry->sequence \
148 ) \
149 )
150
151V4L2_TRACE_EVENT(v4l2_dqbuf);
152V4L2_TRACE_EVENT(v4l2_qbuf);
153
154#endif /* if !defined(_TRACE_V4L2_H) || defined(TRACE_HEADER_MULTI_READ) */
155
156/* This part must be outside protection */
157#include <trace/define_trace.h>
diff --git a/include/uapi/linux/media.h b/include/uapi/linux/media.h
index ed49574ad757..d847c760e8f0 100644
--- a/include/uapi/linux/media.h
+++ b/include/uapi/linux/media.h
@@ -98,6 +98,7 @@ struct media_entity_desc {
98 98
99#define MEDIA_PAD_FL_SINK (1 << 0) 99#define MEDIA_PAD_FL_SINK (1 << 0)
100#define MEDIA_PAD_FL_SOURCE (1 << 1) 100#define MEDIA_PAD_FL_SOURCE (1 << 1)
101#define MEDIA_PAD_FL_MUST_CONNECT (1 << 2)
101 102
102struct media_pad_desc { 103struct media_pad_desc {
103 __u32 entity; /* entity ID */ 104 __u32 entity; /* entity ID */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 1666aabbbb86..2cbe605bbe04 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -164,6 +164,10 @@ enum v4l2_colorfx {
164 * this driver */ 164 * this driver */
165#define V4L2_CID_USER_TI_VPE_BASE (V4L2_CID_USER_BASE + 0x1050) 165#define V4L2_CID_USER_TI_VPE_BASE (V4L2_CID_USER_BASE + 0x1050)
166 166
167/* The base for the saa7134 driver controls.
168 * We reserve 16 controls for this driver. */
169#define V4L2_CID_USER_SAA7134_BASE (V4L2_CID_USER_BASE + 0x1060)
170
167/* MPEG-class control IDs */ 171/* MPEG-class control IDs */
168/* The MPEG controls are applicable to all codec controls 172/* The MPEG controls are applicable to all codec controls
169 * and the 'MPEG' part of the define is historical */ 173 * and the 'MPEG' part of the define is historical */
@@ -554,6 +558,11 @@ enum v4l2_vp8_golden_frame_sel {
554 V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV = 0, 558 V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV = 0,
555 V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD = 1, 559 V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD = 1,
556}; 560};
561#define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP (V4L2_CID_MPEG_BASE+507)
562#define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP (V4L2_CID_MPEG_BASE+508)
563#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE+509)
564#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE+510)
565#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE+511)
557 566
558/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ 567/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
559#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) 568#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
diff --git a/include/uapi/linux/v4l2-mediabus.h b/include/uapi/linux/v4l2-mediabus.h
index a9601257bb43..b5c3aab6e82c 100644
--- a/include/uapi/linux/v4l2-mediabus.h
+++ b/include/uapi/linux/v4l2-mediabus.h
@@ -110,6 +110,9 @@ enum v4l2_mbus_pixelcode {
110 110
111 /* S5C73M3 sensor specific interleaved UYVY and JPEG */ 111 /* S5C73M3 sensor specific interleaved UYVY and JPEG */
112 V4L2_MBUS_FMT_S5C_UYVY_JPEG_1X8 = 0x5001, 112 V4L2_MBUS_FMT_S5C_UYVY_JPEG_1X8 = 0x5001,
113
114 /* HSV - next is 0x6002 */
115 V4L2_MBUS_FMT_AHSV8888_1X32 = 0x6001,
113}; 116};
114 117
115/** 118/**
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 437f1b0f8937..6ae7bbe988cc 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -207,8 +207,8 @@ enum v4l2_priority {
207struct v4l2_rect { 207struct v4l2_rect {
208 __s32 left; 208 __s32 left;
209 __s32 top; 209 __s32 top;
210 __s32 width; 210 __u32 width;
211 __s32 height; 211 __u32 height;
212}; 212};
213 213
214struct v4l2_fract { 214struct v4l2_fract {
diff --git a/include/uapi/linux/vsp1.h b/include/uapi/linux/vsp1.h
new file mode 100644
index 000000000000..e18858f6e865
--- /dev/null
+++ b/include/uapi/linux/vsp1.h
@@ -0,0 +1,34 @@
1/*
2 * vsp1.h
3 *
4 * Renesas R-Car VSP1 - User-space API
5 *
6 * Copyright (C) 2013 Renesas Corporation
7 *
8 * Contacts: 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 __VSP1_USER_H__
16#define __VSP1_USER_H__
17
18#include <linux/types.h>
19#include <linux/videodev2.h>
20
21/*
22 * Private IOCTLs
23 *
24 * VIDIOC_VSP1_LUT_CONFIG - Configure the lookup table
25 */
26
27#define VIDIOC_VSP1_LUT_CONFIG \
28 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct vsp1_lut_config)
29
30struct vsp1_lut_config {
31 u32 lut[256];
32};
33
34#endif /* __VSP1_USER_H__ */