diff options
| author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-04-21 05:12:35 -0400 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-04-21 05:12:35 -0400 |
| commit | 676ee36be04985062522804c2de04f0764212be6 (patch) | |
| tree | 781df135c5a91a04decad1b7d53b5a925dc11522 /include | |
| parent | b18042a673e88c9457a6d1716219c2367ca447b0 (diff) | |
| parent | e183201b9e917daf2530b637b2f34f1d5afb934d (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')
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 */ | 34 | static const s32 sin_table[] = { |
| 33 | typedef 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 | */ | ||
| 60 | static 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) { |
| 39 | static 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; |
| 50 | static 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 |
| 59 | static inline fixp_t fixp_new16(s16 a) | 81 | * |
| 82 | * The returned value ranges from -0x7fffffff to +0x7fffffff. | ||
| 83 | */ | ||
| 84 | static 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 | ||
| 64 | static 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 | */ | ||
| 124 | static 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 | ||
| 77 | static inline fixp_t fixp_sin(unsigned int degrees) | 141 | v2 = fixp_sin32(degrees + 1); |
| 78 | { | ||
| 79 | return -fixp_cos(degrees + 90); | ||
| 80 | } | ||
| 81 | 142 | ||
| 82 | static 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]) */ |
| 50 | enum adv7604_inp_color_space { | 50 | enum 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 | ||
| 69 | enum adv7604_drive_strength { | 69 | enum 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 | ||
| 75 | enum adv7604_int1_config { | 75 | /* INT1 Configuration (IO register 0x40, [1:0]) */ |
| 76 | ADV7604_INT1_CONFIG_OPEN_DRAIN, | 76 | enum 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 | ||
| 82 | enum adv7604_page { | 83 | enum 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 */ |
| 100 | struct adv7604_platform_data { | 101 | struct 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 | ||
| 151 | enum adv7604_pad { | 152 | enum 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 { | |||
| 102 | struct vpfe_device { | 102 | struct 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 | */ | ||
| 47 | struct media_entity_operations { | 56 | struct 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 | */ |
| 12 | struct mt9p031_platform_data { | 11 | struct 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 | */ |
| 65 | struct isp_parallel_platform_data { | 65 | struct 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 | */ |
| 120 | struct isp_ccp2_platform_data { | 120 | struct 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 | */ |
| 134 | struct isp_csi2_platform_data { | 133 | struct 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 | ||
| 140 | struct isp_subdev_i2c_board_info { | 138 | struct isp_bus_cfg { |
| 141 | struct i2c_board_info *board_info; | ||
| 142 | int i2c_adapter_id; | ||
| 143 | }; | ||
| 144 | |||
| 145 | struct 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 | ||
| 155 | struct isp_platform_xclk { | 147 | struct 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 | ||
| 160 | struct isp_platform_data { | 153 | struct 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 | */ | ||
| 30 | struct 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 */ |
| 181 | int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev, char *name, int type); | 181 | int saa7146_register_device(struct video_device *vid, struct saa7146_dev *dev, char *name, int type); |
| 182 | int saa7146_unregister_device(struct video_device **vid, struct saa7146_dev* dev); | 182 | int saa7146_unregister_device(struct video_device *vid, struct saa7146_dev *dev); |
| 183 | void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state); | 183 | void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state); |
| 184 | void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); | 184 | void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); |
| 185 | int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf); | 185 | int 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 @@ | |||
| 22 | struct module; | 22 | struct module; |
| 23 | struct device; | 23 | struct device; |
| 24 | 24 | ||
| 25 | struct clk; | ||
| 25 | struct v4l2_clk { | 26 | struct 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 | ||
| 44 | struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops, | 45 | struct 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); |
| 47 | void v4l2_clk_unregister(struct v4l2_clk *clk); | 48 | void v4l2_clk_unregister(struct v4l2_clk *clk); |
| 48 | struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id); | 49 | struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id); |
| 49 | void v4l2_clk_put(struct v4l2_clk *clk); | 50 | void v4l2_clk_put(struct v4l2_clk *clk); |
| @@ -55,14 +56,13 @@ int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate); | |||
| 55 | struct module; | 56 | struct module; |
| 56 | 57 | ||
| 57 | struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id, | 58 | struct 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); |
| 59 | void v4l2_clk_unregister_fixed(struct v4l2_clk *clk); | 60 | void v4l2_clk_unregister_fixed(struct v4l2_clk *clk); |
| 60 | 61 | ||
| 61 | static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id, | 62 | static 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 | */ |
| 33 | struct v4l2_of_bus_mipi_csi2 { | 35 | struct 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 | */ | ||
| 79 | struct 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 |
| 70 | int v4l2_of_parse_endpoint(const struct device_node *node, | 87 | int v4l2_of_parse_endpoint(const struct device_node *node, |
| 71 | struct v4l2_of_endpoint *endpoint); | 88 | struct v4l2_of_endpoint *endpoint); |
| 89 | int v4l2_of_parse_link(const struct device_node *node, | ||
| 90 | struct v4l2_of_link *link); | ||
| 91 | void v4l2_of_put_link(struct v4l2_of_link *link); | ||
| 72 | #else /* CONFIG_OF */ | 92 | #else /* CONFIG_OF */ |
| 73 | 93 | ||
| 74 | static inline int v4l2_of_parse_endpoint(const struct device_node *node, | 94 | static 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 | ||
| 100 | static inline int v4l2_of_parse_link(const struct device_node *node, | ||
| 101 | struct v4l2_of_link *link) | ||
| 102 | { | ||
| 103 | return -ENOSYS; | ||
| 104 | } | ||
| 105 | |||
| 106 | static 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 | */ | ||
| 489 | struct 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 | */ |
| 491 | struct v4l2_subdev_pad_ops { | 501 | struct 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 { | |||
| 625 | struct v4l2_subdev_fh { | 640 | struct 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 | ||
| 655 | extern const struct v4l2_file_operations v4l2_subdev_fops; | 666 | extern 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 | */ | ||
| 142 | enum 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; | |||
| 396 | struct vb2_queue { | 387 | struct 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 | |||
| 446 | header-y += x25.h | 446 | header-y += x25.h |
| 447 | header-y += xattr.h | 447 | header-y += xattr.h |
| 448 | header-y += xfrm.h | 448 | header-y += xfrm.h |
| 449 | header-y += xilinx-v4l2-controls.h | ||
| 449 | header-y += zorro.h | 450 | header-y += zorro.h |
| 450 | header-y += zorro_ids.h | 451 | header-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 | |||
| 24 | enum vpfe_ccdc_data_size { | 26 | enum 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 | ||
| 64 | struct media_entity_desc { | 73 | struct 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 | */ |
| 73 | struct v4l2_subdev_mbus_code_enum { | 74 | struct 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 | */ |
| 86 | struct v4l2_subdev_frame_size_enum { | 89 | struct 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 | */ |
| 117 | struct v4l2_subdev_frame_interval_enum { | 122 | struct 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 | ||
| 269 | enum v4l2_quantization { | 269 | enum 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 | */ |
| 1842 | struct v4l2_plane_pix_format { | 1850 | struct 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__ */ | ||
