diff options
Diffstat (limited to 'include/media/v4l2-subdev.h')
-rw-r--r-- | include/media/v4l2-subdev.h | 576 |
1 files changed, 385 insertions, 191 deletions
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index c672efc4f87b..2a2240c99b30 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
@@ -1,21 +1,17 @@ | |||
1 | /* | 1 | /* |
2 | V4L2 sub-device support header. | 2 | * V4L2 sub-device support header. |
3 | 3 | * | |
4 | Copyright (C) 2008 Hans Verkuil <hverkuil@xs4all.nl> | 4 | * Copyright (C) 2008 Hans Verkuil <hverkuil@xs4all.nl> |
5 | 5 | * | |
6 | This program is free software; you can redistribute it and/or modify | 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 | 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 | 8 | * the Free Software Foundation; either version 2 of the License, or |
9 | (at your option) any later version. | 9 | * (at your option) any later version. |
10 | 10 | * | |
11 | This program is distributed in the hope that it will be useful, | 11 | * This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | 15 | */ |
20 | 16 | ||
21 | #ifndef _V4L2_SUBDEV_H | 17 | #ifndef _V4L2_SUBDEV_H |
@@ -52,55 +48,64 @@ struct v4l2_subdev_fh; | |||
52 | struct tuner_setup; | 48 | struct tuner_setup; |
53 | struct v4l2_mbus_frame_desc; | 49 | struct v4l2_mbus_frame_desc; |
54 | 50 | ||
55 | /* decode_vbi_line */ | 51 | /** |
52 | * struct v4l2_decode_vbi_line - used to decode_vbi_line | ||
53 | * | ||
54 | * @is_second_field: Set to 0 for the first (odd) field; | ||
55 | * set to 1 for the second (even) field. | ||
56 | * @p: Pointer to the sliced VBI data from the decoder. On exit, points to | ||
57 | * the start of the payload. | ||
58 | * @line: Line number of the sliced VBI data (1-23) | ||
59 | * @type: VBI service type (V4L2_SLICED_*). 0 if no service found | ||
60 | */ | ||
56 | struct v4l2_decode_vbi_line { | 61 | struct v4l2_decode_vbi_line { |
57 | u32 is_second_field; /* Set to 0 for the first (odd) field, | 62 | u32 is_second_field; |
58 | set to 1 for the second (even) field. */ | 63 | u8 *p; |
59 | u8 *p; /* Pointer to the sliced VBI data from the decoder. | 64 | u32 line; |
60 | On exit points to the start of the payload. */ | 65 | u32 type; |
61 | u32 line; /* Line number of the sliced VBI data (1-23) */ | ||
62 | u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ | ||
63 | }; | 66 | }; |
64 | 67 | ||
65 | /* Sub-devices are devices that are connected somehow to the main bridge | 68 | /* |
66 | device. These devices are usually audio/video muxers/encoders/decoders or | 69 | * Sub-devices are devices that are connected somehow to the main bridge |
67 | sensors and webcam controllers. | 70 | * device. These devices are usually audio/video muxers/encoders/decoders or |
68 | 71 | * sensors and webcam controllers. | |
69 | Usually these devices are controlled through an i2c bus, but other busses | 72 | * |
70 | may also be used. | 73 | * Usually these devices are controlled through an i2c bus, but other busses |
71 | 74 | * may also be used. | |
72 | The v4l2_subdev struct provides a way of accessing these devices in a | 75 | * |
73 | generic manner. Most operations that these sub-devices support fall in | 76 | * The v4l2_subdev struct provides a way of accessing these devices in a |
74 | a few categories: core ops, audio ops, video ops and tuner ops. | 77 | * generic manner. Most operations that these sub-devices support fall in |
75 | 78 | * a few categories: core ops, audio ops, video ops and tuner ops. | |
76 | More categories can be added if needed, although this should remain a | 79 | * |
77 | limited set (no more than approx. 8 categories). | 80 | * More categories can be added if needed, although this should remain a |
78 | 81 | * limited set (no more than approx. 8 categories). | |
79 | Each category has its own set of ops that subdev drivers can implement. | 82 | * |
80 | 83 | * Each category has its own set of ops that subdev drivers can implement. | |
81 | A subdev driver can leave the pointer to the category ops NULL if | 84 | * |
82 | it does not implement them (e.g. an audio subdev will generally not | 85 | * A subdev driver can leave the pointer to the category ops NULL if |
83 | implement the video category ops). The exception is the core category: | 86 | * it does not implement them (e.g. an audio subdev will generally not |
84 | this must always be present. | 87 | * implement the video category ops). The exception is the core category: |
85 | 88 | * this must always be present. | |
86 | These ops are all used internally so it is no problem to change, remove | 89 | * |
87 | or add ops or move ops from one to another category. Currently these | 90 | * These ops are all used internally so it is no problem to change, remove |
88 | ops are based on the original ioctls, but since ops are not limited to | 91 | * or add ops or move ops from one to another category. Currently these |
89 | one argument there is room for improvement here once all i2c subdev | 92 | * ops are based on the original ioctls, but since ops are not limited to |
90 | drivers are converted to use these ops. | 93 | * one argument there is room for improvement here once all i2c subdev |
94 | * drivers are converted to use these ops. | ||
91 | */ | 95 | */ |
92 | 96 | ||
93 | /* Core ops: it is highly recommended to implement at least these ops: | 97 | /* |
94 | 98 | * Core ops: it is highly recommended to implement at least these ops: | |
95 | log_status | 99 | * |
96 | g_register | 100 | * log_status |
97 | s_register | 101 | * g_register |
98 | 102 | * s_register | |
99 | This provides basic debugging support. | 103 | * |
100 | 104 | * This provides basic debugging support. | |
101 | The ioctl ops is meant for generic ioctl-like commands. Depending on | 105 | * |
102 | the use-case it might be better to use subdev-specific ops (currently | 106 | * The ioctl ops is meant for generic ioctl-like commands. Depending on |
103 | not yet implemented) since ops provide proper type-checking. | 107 | * the use-case it might be better to use subdev-specific ops (currently |
108 | * not yet implemented) since ops provide proper type-checking. | ||
104 | */ | 109 | */ |
105 | 110 | ||
106 | /* Subdevice external IO pin configuration */ | 111 | /* Subdevice external IO pin configuration */ |
@@ -110,18 +115,32 @@ struct v4l2_decode_vbi_line { | |||
110 | #define V4L2_SUBDEV_IO_PIN_SET_VALUE (1 << 3) /* Set output value */ | 115 | #define V4L2_SUBDEV_IO_PIN_SET_VALUE (1 << 3) /* Set output value */ |
111 | #define V4L2_SUBDEV_IO_PIN_ACTIVE_LOW (1 << 4) /* ACTIVE HIGH assumed */ | 116 | #define V4L2_SUBDEV_IO_PIN_ACTIVE_LOW (1 << 4) /* ACTIVE HIGH assumed */ |
112 | 117 | ||
118 | /** | ||
119 | * struct v4l2_subdev_io_pin_config - Subdevice external IO pin configuration | ||
120 | * | ||
121 | * @flags: bitmask with flags for this pin's config: | ||
122 | * %V4L2_SUBDEV_IO_PIN_DISABLE - disables a pin config, | ||
123 | * %V4L2_SUBDEV_IO_PIN_OUTPUT - if pin is an output, | ||
124 | * %V4L2_SUBDEV_IO_PIN_INPUT - if pin is an input, | ||
125 | * %V4L2_SUBDEV_IO_PIN_SET_VALUE - to set the output value via @value | ||
126 | * and %V4L2_SUBDEV_IO_PIN_ACTIVE_LOW - if active is 0. | ||
127 | * @pin: Chip external IO pin to configure | ||
128 | * @function: Internal signal pad/function to route to IO pin | ||
129 | * @value: Initial value for pin - e.g. GPIO output value | ||
130 | * @strength: Pin drive strength | ||
131 | */ | ||
113 | struct v4l2_subdev_io_pin_config { | 132 | struct v4l2_subdev_io_pin_config { |
114 | u32 flags; /* V4L2_SUBDEV_IO_PIN_* flags for this pin's config */ | 133 | u32 flags; |
115 | u8 pin; /* Chip external IO pin to configure */ | 134 | u8 pin; |
116 | u8 function; /* Internal signal pad/function to route to IO pin */ | 135 | u8 function; |
117 | u8 value; /* Initial value for pin - e.g. GPIO output value */ | 136 | u8 value; |
118 | u8 strength; /* Pin drive strength */ | 137 | u8 strength; |
119 | }; | 138 | }; |
120 | 139 | ||
121 | /** | 140 | /** |
122 | * struct v4l2_subdev_core_ops - Define core ops callbacks for subdevs | 141 | * struct v4l2_subdev_core_ops - Define core ops callbacks for subdevs |
123 | * | 142 | * |
124 | * @log_status: callback for VIDIOC_LOG_STATUS ioctl handler code. | 143 | * @log_status: callback for %VIDIOC_LOG_STATUS ioctl handler code. |
125 | * | 144 | * |
126 | * @s_io_pin_config: configure one or more chip I/O pins for chips that | 145 | * @s_io_pin_config: configure one or more chip I/O pins for chips that |
127 | * multiplex different internal signal pads out to IO pins. This function | 146 | * multiplex different internal signal pads out to IO pins. This function |
@@ -149,9 +168,9 @@ struct v4l2_subdev_io_pin_config { | |||
149 | * @compat_ioctl32: called when a 32 bits application uses a 64 bits Kernel, | 168 | * @compat_ioctl32: called when a 32 bits application uses a 64 bits Kernel, |
150 | * in order to fix data passed from/to userspace. | 169 | * in order to fix data passed from/to userspace. |
151 | * | 170 | * |
152 | * @g_register: callback for VIDIOC_G_REGISTER ioctl handler code. | 171 | * @g_register: callback for %VIDIOC_G_REGISTER ioctl handler code. |
153 | * | 172 | * |
154 | * @s_register: callback for VIDIOC_G_REGISTER ioctl handler code. | 173 | * @s_register: callback for %VIDIOC_G_REGISTER ioctl handler code. |
155 | * | 174 | * |
156 | * @s_power: puts subdevice in power saving mode (on == 0) or normal operation | 175 | * @s_power: puts subdevice in power saving mode (on == 0) or normal operation |
157 | * mode (on == 1). | 176 | * mode (on == 1). |
@@ -159,7 +178,7 @@ struct v4l2_subdev_io_pin_config { | |||
159 | * @interrupt_service_routine: Called by the bridge chip's interrupt service | 178 | * @interrupt_service_routine: Called by the bridge chip's interrupt service |
160 | * handler, when an interrupt status has be raised due to this subdev, | 179 | * handler, when an interrupt status has be raised due to this subdev, |
161 | * so that this subdev can handle the details. It may schedule work to be | 180 | * so that this subdev can handle the details. It may schedule work to be |
162 | * performed later. It must not sleep. *Called from an IRQ context*. | 181 | * performed later. It must not sleep. **Called from an IRQ context**. |
163 | * | 182 | * |
164 | * @subscribe_event: used by the drivers to request the control framework that | 183 | * @subscribe_event: used by the drivers to request the control framework that |
165 | * for it to be warned when the value of a control changes. | 184 | * for it to be warned when the value of a control changes. |
@@ -198,25 +217,25 @@ struct v4l2_subdev_core_ops { | |||
198 | /** | 217 | /** |
199 | * struct s_radio - Callbacks used when v4l device was opened in radio mode. | 218 | * struct s_radio - Callbacks used when v4l device was opened in radio mode. |
200 | * | 219 | * |
201 | * @s_radio: callback for VIDIOC_S_RADIO ioctl handler code. | 220 | * @s_radio: callback for %VIDIOC_S_RADIO ioctl handler code. |
202 | * | 221 | * |
203 | * @s_frequency: callback for VIDIOC_S_FREQUENCY ioctl handler code. | 222 | * @s_frequency: callback for %VIDIOC_S_FREQUENCY ioctl handler code. |
204 | * | 223 | * |
205 | * @g_frequency: callback for VIDIOC_G_FREQUENCY ioctl handler code. | 224 | * @g_frequency: callback for %VIDIOC_G_FREQUENCY ioctl handler code. |
206 | * freq->type must be filled in. Normally done by video_ioctl2 | 225 | * freq->type must be filled in. Normally done by video_ioctl2() |
207 | * or the bridge driver. | 226 | * or the bridge driver. |
208 | * | 227 | * |
209 | * @enum_freq_bands: callback for VIDIOC_ENUM_FREQ_BANDS ioctl handler code. | 228 | * @enum_freq_bands: callback for %VIDIOC_ENUM_FREQ_BANDS ioctl handler code. |
210 | * | 229 | * |
211 | * @g_tuner: callback for VIDIOC_G_TUNER ioctl handler code. | 230 | * @g_tuner: callback for %VIDIOC_G_TUNER ioctl handler code. |
212 | * | 231 | * |
213 | * @s_tuner: callback for VIDIOC_S_TUNER ioctl handler code. vt->type must be | 232 | * @s_tuner: callback for %VIDIOC_S_TUNER ioctl handler code. &vt->type must be |
214 | * filled in. Normally done by video_ioctl2 or the | 233 | * filled in. Normally done by video_ioctl2 or the |
215 | * bridge driver. | 234 | * bridge driver. |
216 | * | 235 | * |
217 | * @g_modulator: callback for VIDIOC_G_MODULATOR ioctl handler code. | 236 | * @g_modulator: callback for %VIDIOC_G_MODULATOR ioctl handler code. |
218 | * | 237 | * |
219 | * @s_modulator: callback for VIDIOC_S_MODULATOR ioctl handler code. | 238 | * @s_modulator: callback for %VIDIOC_S_MODULATOR ioctl handler code. |
220 | * | 239 | * |
221 | * @s_type_addr: sets tuner type and its I2C addr. | 240 | * @s_type_addr: sets tuner type and its I2C addr. |
222 | * | 241 | * |
@@ -247,7 +266,7 @@ struct v4l2_subdev_tuner_ops { | |||
247 | * @s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard | 266 | * @s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard |
248 | * way to select I2S clock used by driving digital audio streams at some | 267 | * way to select I2S clock used by driving digital audio streams at some |
249 | * board designs. Usual values for the frequency are 1024000 and 2048000. | 268 | * board designs. Usual values for the frequency are 1024000 and 2048000. |
250 | * If the frequency is not supported, then -EINVAL is returned. | 269 | * If the frequency is not supported, then %-EINVAL is returned. |
251 | * | 270 | * |
252 | * @s_routing: used to define the input and/or output pins of an audio chip, | 271 | * @s_routing: used to define the input and/or output pins of an audio chip, |
253 | * and any additional configuration data. | 272 | * and any additional configuration data. |
@@ -279,7 +298,8 @@ struct v4l2_subdev_audio_ops { | |||
279 | /** | 298 | /** |
280 | * struct v4l2_mbus_frame_desc_entry - media bus frame description structure | 299 | * struct v4l2_mbus_frame_desc_entry - media bus frame description structure |
281 | * | 300 | * |
282 | * @flags: V4L2_MBUS_FRAME_DESC_FL_* flags | 301 | * @flags: bitmask flags: %V4L2_MBUS_FRAME_DESC_FL_LEN_MAX and |
302 | * %V4L2_MBUS_FRAME_DESC_FL_BLOB. | ||
283 | * @pixelcode: media bus pixel code, valid if FRAME_DESC_FL_BLOB is not set | 303 | * @pixelcode: media bus pixel code, valid if FRAME_DESC_FL_BLOB is not set |
284 | * @length: number of octets per frame, valid if V4L2_MBUS_FRAME_DESC_FL_BLOB | 304 | * @length: number of octets per frame, valid if V4L2_MBUS_FRAME_DESC_FL_BLOB |
285 | * is set | 305 | * is set |
@@ -304,7 +324,7 @@ struct v4l2_mbus_frame_desc { | |||
304 | 324 | ||
305 | /** | 325 | /** |
306 | * struct v4l2_subdev_video_ops - Callbacks used when v4l device was opened | 326 | * struct v4l2_subdev_video_ops - Callbacks used when v4l device was opened |
307 | * in video mode. | 327 | * in video mode. |
308 | * | 328 | * |
309 | * @s_routing: see s_routing in audio_ops, except this version is for video | 329 | * @s_routing: see s_routing in audio_ops, except this version is for video |
310 | * devices. | 330 | * devices. |
@@ -314,9 +334,9 @@ struct v4l2_mbus_frame_desc { | |||
314 | * regarding clock frequency dividers, etc. If not used, then set flags | 334 | * regarding clock frequency dividers, etc. If not used, then set flags |
315 | * to 0. If the frequency is not supported, then -EINVAL is returned. | 335 | * to 0. If the frequency is not supported, then -EINVAL is returned. |
316 | * | 336 | * |
317 | * @g_std: callback for VIDIOC_G_STD ioctl handler code. | 337 | * @g_std: callback for %VIDIOC_G_STD ioctl handler code. |
318 | * | 338 | * |
319 | * @s_std: callback for VIDIOC_S_STD ioctl handler code. | 339 | * @s_std: callback for %VIDIOC_S_STD ioctl handler code. |
320 | * | 340 | * |
321 | * @s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by | 341 | * @s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by |
322 | * video input devices. | 342 | * video input devices. |
@@ -324,33 +344,33 @@ struct v4l2_mbus_frame_desc { | |||
324 | * @g_std_output: get current standard for video OUTPUT devices. This is ignored | 344 | * @g_std_output: get current standard for video OUTPUT devices. This is ignored |
325 | * by video input devices. | 345 | * by video input devices. |
326 | * | 346 | * |
327 | * @querystd: callback for VIDIOC_QUERYSTD ioctl handler code. | 347 | * @querystd: callback for %VIDIOC_QUERYSTD ioctl handler code. |
328 | * | 348 | * |
329 | * @g_tvnorms: get v4l2_std_id with all standards supported by the video | 349 | * @g_tvnorms: get &v4l2_std_id with all standards supported by the video |
330 | * CAPTURE device. This is ignored by video output devices. | 350 | * CAPTURE device. This is ignored by video output devices. |
331 | * | 351 | * |
332 | * @g_tvnorms_output: get v4l2_std_id with all standards supported by the video | 352 | * @g_tvnorms_output: get v4l2_std_id with all standards supported by the video |
333 | * OUTPUT device. This is ignored by video capture devices. | 353 | * OUTPUT device. This is ignored by video capture devices. |
334 | * | 354 | * |
335 | * @g_input_status: get input status. Same as the status field in the v4l2_input | 355 | * @g_input_status: get input status. Same as the status field in the |
336 | * struct. | 356 | * &struct &v4l2_input |
337 | * | 357 | * |
338 | * @s_stream: used to notify the driver that a video stream will start or has | 358 | * @s_stream: used to notify the driver that a video stream will start or has |
339 | * stopped. | 359 | * stopped. |
340 | * | 360 | * |
341 | * @cropcap: callback for VIDIOC_CROPCAP ioctl handler code. | 361 | * @cropcap: callback for %VIDIOC_CROPCAP ioctl handler code. |
342 | * | 362 | * |
343 | * @g_crop: callback for VIDIOC_G_CROP ioctl handler code. | 363 | * @g_crop: callback for %VIDIOC_G_CROP ioctl handler code. |
344 | * | 364 | * |
345 | * @s_crop: callback for VIDIOC_S_CROP ioctl handler code. | 365 | * @s_crop: callback for %VIDIOC_S_CROP ioctl handler code. |
346 | * | 366 | * |
347 | * @g_parm: callback for VIDIOC_G_PARM ioctl handler code. | 367 | * @g_parm: callback for %VIDIOC_G_PARM ioctl handler code. |
348 | * | 368 | * |
349 | * @s_parm: callback for VIDIOC_S_PARM ioctl handler code. | 369 | * @s_parm: callback for %VIDIOC_S_PARM ioctl handler code. |
350 | * | 370 | * |
351 | * @g_frame_interval: callback for VIDIOC_G_FRAMEINTERVAL ioctl handler code. | 371 | * @g_frame_interval: callback for %VIDIOC_G_FRAMEINTERVAL ioctl handler code. |
352 | * | 372 | * |
353 | * @s_frame_interval: callback for VIDIOC_S_FRAMEINTERVAL ioctl handler code. | 373 | * @s_frame_interval: callback for %VIDIOC_S_FRAMEINTERVAL ioctl handler code. |
354 | * | 374 | * |
355 | * @s_dv_timings: Set custom dv timings in the sub device. This is used | 375 | * @s_dv_timings: Set custom dv timings in the sub device. This is used |
356 | * when sub device is capable of setting detailed timing information | 376 | * when sub device is capable of setting detailed timing information |
@@ -358,7 +378,7 @@ struct v4l2_mbus_frame_desc { | |||
358 | * | 378 | * |
359 | * @g_dv_timings: Get custom dv timings in the sub device. | 379 | * @g_dv_timings: Get custom dv timings in the sub device. |
360 | * | 380 | * |
361 | * @query_dv_timings: callback for VIDIOC_QUERY_DV_TIMINGS ioctl handler code. | 381 | * @query_dv_timings: callback for %VIDIOC_QUERY_DV_TIMINGS ioctl handler code. |
362 | * | 382 | * |
363 | * @g_mbus_config: get supported mediabus configurations | 383 | * @g_mbus_config: get supported mediabus configurations |
364 | * | 384 | * |
@@ -407,31 +427,31 @@ struct v4l2_subdev_video_ops { | |||
407 | 427 | ||
408 | /** | 428 | /** |
409 | * struct v4l2_subdev_vbi_ops - Callbacks used when v4l device was opened | 429 | * struct v4l2_subdev_vbi_ops - Callbacks used when v4l device was opened |
410 | * in video mode via the vbi device node. | 430 | * in video mode via the vbi device node. |
411 | * | 431 | * |
412 | * @decode_vbi_line: video decoders that support sliced VBI need to implement | 432 | * @decode_vbi_line: video decoders that support sliced VBI need to implement |
413 | * this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the | 433 | * this ioctl. Field p of the &struct v4l2_sliced_vbi_line is set to the |
414 | * start of the VBI data that was generated by the decoder. The driver | 434 | * start of the VBI data that was generated by the decoder. The driver |
415 | * then parses the sliced VBI data and sets the other fields in the | 435 | * then parses the sliced VBI data and sets the other fields in the |
416 | * struct accordingly. The pointer p is updated to point to the start of | 436 | * struct accordingly. The pointer p is updated to point to the start of |
417 | * the payload which can be copied verbatim into the data field of the | 437 | * the payload which can be copied verbatim into the data field of the |
418 | * v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the | 438 | * &struct v4l2_sliced_vbi_data. If no valid VBI data was found, then the |
419 | * type field is set to 0 on return. | 439 | * type field is set to 0 on return. |
420 | * | 440 | * |
421 | * @s_vbi_data: used to generate VBI signals on a video signal. | 441 | * @s_vbi_data: used to generate VBI signals on a video signal. |
422 | * v4l2_sliced_vbi_data is filled with the data packets that should be | 442 | * &struct v4l2_sliced_vbi_data is filled with the data packets that |
423 | * output. Note that if you set the line field to 0, then that VBI signal | 443 | * should be output. Note that if you set the line field to 0, then that |
424 | * is disabled. If no valid VBI data was found, then the type field is | 444 | * VBI signal is disabled. If no valid VBI data was found, then the type |
425 | * set to 0 on return. | 445 | * field is set to 0 on return. |
426 | * | 446 | * |
427 | * @g_vbi_data: used to obtain the sliced VBI packet from a readback register. | 447 | * @g_vbi_data: used to obtain the sliced VBI packet from a readback register. |
428 | * Not all video decoders support this. If no data is available because | 448 | * Not all video decoders support this. If no data is available because |
429 | * the readback register contains invalid or erroneous data -EIO is | 449 | * the readback register contains invalid or erroneous data %-EIO is |
430 | * returned. Note that you must fill in the 'id' member and the 'field' | 450 | * returned. Note that you must fill in the 'id' member and the 'field' |
431 | * member (to determine whether CC data from the first or second field | 451 | * member (to determine whether CC data from the first or second field |
432 | * should be obtained). | 452 | * should be obtained). |
433 | * | 453 | * |
434 | * @g_sliced_vbi_cap: callback for VIDIOC_SLICED_VBI_CAP ioctl handler code. | 454 | * @g_sliced_vbi_cap: callback for %VIDIOC_SLICED_VBI_CAP ioctl handler code. |
435 | * | 455 | * |
436 | * @s_raw_fmt: setup the video encoder/decoder for raw VBI. | 456 | * @s_raw_fmt: setup the video encoder/decoder for raw VBI. |
437 | * | 457 | * |
@@ -464,58 +484,99 @@ struct v4l2_subdev_sensor_ops { | |||
464 | int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); | 484 | int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames); |
465 | }; | 485 | }; |
466 | 486 | ||
467 | /* | 487 | /** |
468 | [rt]x_g_parameters: Get the current operating parameters and state of the | 488 | * enum v4l2_subdev_ir_mode- describes the type of IR supported |
469 | the IR receiver or transmitter. | 489 | * |
470 | 490 | * @V4L2_SUBDEV_IR_MODE_PULSE_WIDTH: IR uses struct ir_raw_event records | |
471 | [rt]x_s_parameters: Set the current operating parameters and state of the | ||
472 | the IR receiver or transmitter. It is recommended to call | ||
473 | [rt]x_g_parameters first to fill out the current state, and only change | ||
474 | the fields that need to be changed. Upon return, the actual device | ||
475 | operating parameters and state will be returned. Note that hardware | ||
476 | limitations may prevent the actual settings from matching the requested | ||
477 | settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz | ||
478 | was requested. An exception is when the shutdown parameter is true. | ||
479 | The last used operational parameters will be returned, but the actual | ||
480 | state of the hardware be different to minimize power consumption and | ||
481 | processing when shutdown is true. | ||
482 | |||
483 | rx_read: Reads received codes or pulse width data. | ||
484 | The semantics are similar to a non-blocking read() call. | ||
485 | |||
486 | tx_write: Writes codes or pulse width data for transmission. | ||
487 | The semantics are similar to a non-blocking write() call. | ||
488 | */ | 491 | */ |
489 | |||
490 | enum v4l2_subdev_ir_mode { | 492 | enum v4l2_subdev_ir_mode { |
491 | V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, /* uses struct ir_raw_event records */ | 493 | V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, |
492 | }; | 494 | }; |
493 | 495 | ||
496 | /** | ||
497 | * struct v4l2_subdev_ir_parameters - Parameters for IR TX or TX | ||
498 | * | ||
499 | * @bytes_per_data_element: bytes per data element of data in read or | ||
500 | * write call. | ||
501 | * @mode: IR mode as defined by &enum v4l2_subdev_ir_mode. | ||
502 | * @enable: device is active if true | ||
503 | * @interrupt_enable: IR interrupts are enabled if true | ||
504 | * @shutdown: if true: set hardware to low/no power, false: normal mode | ||
505 | * | ||
506 | * @modulation: if true, it uses carrier, if false: baseband | ||
507 | * @max_pulse_width: maximum pulse width in ns, valid only for baseband signal | ||
508 | * @carrier_freq: carrier frequency in Hz, valid only for modulated signal | ||
509 | * @duty_cycle: duty cycle percentage, valid only for modulated signal | ||
510 | * @invert_level: invert signal level | ||
511 | * | ||
512 | * @invert_carrier_sense: Send 0/space as a carrier burst. used only in TX. | ||
513 | * | ||
514 | * @noise_filter_min_width: min time of a valid pulse, in ns. Used only for RX. | ||
515 | * @carrier_range_lower: Lower carrier range, in Hz, valid only for modulated | ||
516 | * signal. Used only for RX. | ||
517 | * @carrier_range_upper: Upper carrier range, in Hz, valid only for modulated | ||
518 | * signal. Used only for RX. | ||
519 | * @resolution: The receive resolution, in ns . Used only for RX. | ||
520 | */ | ||
494 | struct v4l2_subdev_ir_parameters { | 521 | struct v4l2_subdev_ir_parameters { |
495 | /* Either Rx or Tx */ | 522 | unsigned int bytes_per_data_element; |
496 | unsigned int bytes_per_data_element; /* of data in read or write call */ | ||
497 | enum v4l2_subdev_ir_mode mode; | 523 | enum v4l2_subdev_ir_mode mode; |
498 | 524 | ||
499 | bool enable; | 525 | bool enable; |
500 | bool interrupt_enable; | 526 | bool interrupt_enable; |
501 | bool shutdown; /* true: set hardware to low/no power, false: normal */ | 527 | bool shutdown; |
502 | 528 | ||
503 | bool modulation; /* true: uses carrier, false: baseband */ | 529 | bool modulation; |
504 | u32 max_pulse_width; /* ns, valid only for baseband signal */ | 530 | u32 max_pulse_width; |
505 | unsigned int carrier_freq; /* Hz, valid only for modulated signal*/ | 531 | unsigned int carrier_freq; |
506 | unsigned int duty_cycle; /* percent, valid only for modulated signal*/ | 532 | unsigned int duty_cycle; |
507 | bool invert_level; /* invert signal level */ | 533 | bool invert_level; |
508 | 534 | ||
509 | /* Tx only */ | 535 | /* Tx only */ |
510 | bool invert_carrier_sense; /* Send 0/space as a carrier burst */ | 536 | bool invert_carrier_sense; |
511 | 537 | ||
512 | /* Rx only */ | 538 | /* Rx only */ |
513 | u32 noise_filter_min_width; /* ns, min time of a valid pulse */ | 539 | u32 noise_filter_min_width; |
514 | unsigned int carrier_range_lower; /* Hz, valid only for modulated sig */ | 540 | unsigned int carrier_range_lower; |
515 | unsigned int carrier_range_upper; /* Hz, valid only for modulated sig */ | 541 | unsigned int carrier_range_upper; |
516 | u32 resolution; /* ns */ | 542 | u32 resolution; |
517 | }; | 543 | }; |
518 | 544 | ||
545 | /** | ||
546 | * struct v4l2_subdev_ir_ops - operations for IR subdevices | ||
547 | * | ||
548 | * @rx_read: Reads received codes or pulse width data. | ||
549 | * The semantics are similar to a non-blocking read() call. | ||
550 | * @rx_g_parameters: Get the current operating parameters and state of the | ||
551 | * the IR receiver. | ||
552 | * @rx_s_parameters: Set the current operating parameters and state of the | ||
553 | * the IR receiver. It is recommended to call | ||
554 | * [rt]x_g_parameters first to fill out the current state, and only change | ||
555 | * the fields that need to be changed. Upon return, the actual device | ||
556 | * operating parameters and state will be returned. Note that hardware | ||
557 | * limitations may prevent the actual settings from matching the requested | ||
558 | * settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz | ||
559 | * was requested. An exception is when the shutdown parameter is true. | ||
560 | * The last used operational parameters will be returned, but the actual | ||
561 | * state of the hardware be different to minimize power consumption and | ||
562 | * processing when shutdown is true. | ||
563 | * | ||
564 | * @tx_write: Writes codes or pulse width data for transmission. | ||
565 | * The semantics are similar to a non-blocking write() call. | ||
566 | * @tx_g_parameters: Get the current operating parameters and state of the | ||
567 | * the IR transmitter. | ||
568 | * @tx_s_parameters: Set the current operating parameters and state of the | ||
569 | * the IR transmitter. It is recommended to call | ||
570 | * [rt]x_g_parameters first to fill out the current state, and only change | ||
571 | * the fields that need to be changed. Upon return, the actual device | ||
572 | * operating parameters and state will be returned. Note that hardware | ||
573 | * limitations may prevent the actual settings from matching the requested | ||
574 | * settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz | ||
575 | * was requested. An exception is when the shutdown parameter is true. | ||
576 | * The last used operational parameters will be returned, but the actual | ||
577 | * state of the hardware be different to minimize power consumption and | ||
578 | * processing when shutdown is true. | ||
579 | */ | ||
519 | struct v4l2_subdev_ir_ops { | 580 | struct v4l2_subdev_ir_ops { |
520 | /* Receiver */ | 581 | /* Receiver */ |
521 | int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, | 582 | int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, |
@@ -536,11 +597,16 @@ struct v4l2_subdev_ir_ops { | |||
536 | struct v4l2_subdev_ir_parameters *params); | 597 | struct v4l2_subdev_ir_parameters *params); |
537 | }; | 598 | }; |
538 | 599 | ||
539 | /* | 600 | /** |
540 | * Used for storing subdev pad information. This structure only needs | 601 | * struct v4l2_subdev_pad_config - Used for storing subdev pad information. |
541 | * to be passed to the pad op if the 'which' field of the main argument | 602 | * |
542 | * is set to V4L2_SUBDEV_FORMAT_TRY. For V4L2_SUBDEV_FORMAT_ACTIVE it is | 603 | * @try_fmt: pointer to &struct v4l2_mbus_framefmt |
543 | * safe to pass NULL. | 604 | * @try_crop: pointer to &struct v4l2_rect to be used for crop |
605 | * @try_compose: pointer to &struct v4l2_rect to be used for compose | ||
606 | * | ||
607 | * This structure only needs to be passed to the pad op if the 'which' field | ||
608 | * of the main argument is set to %V4L2_SUBDEV_FORMAT_TRY. For | ||
609 | * %V4L2_SUBDEV_FORMAT_ACTIVE it is safe to pass %NULL. | ||
544 | */ | 610 | */ |
545 | struct v4l2_subdev_pad_config { | 611 | struct v4l2_subdev_pad_config { |
546 | struct v4l2_mbus_framefmt try_fmt; | 612 | struct v4l2_mbus_framefmt try_fmt; |
@@ -552,30 +618,30 @@ struct v4l2_subdev_pad_config { | |||
552 | * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations | 618 | * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations |
553 | * | 619 | * |
554 | * @init_cfg: initialize the pad config to default values | 620 | * @init_cfg: initialize the pad config to default values |
555 | * @enum_mbus_code: callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE ioctl handler | 621 | * @enum_mbus_code: callback for %VIDIOC_SUBDEV_ENUM_MBUS_CODE ioctl handler |
556 | * code. | 622 | * code. |
557 | * @enum_frame_size: callback for VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl handler | 623 | * @enum_frame_size: callback for %VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl handler |
558 | * code. | 624 | * code. |
559 | * | 625 | * |
560 | * @enum_frame_interval: callback for VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL ioctl | 626 | * @enum_frame_interval: callback for %VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL ioctl |
561 | * handler code. | 627 | * handler code. |
562 | * | 628 | * |
563 | * @get_fmt: callback for VIDIOC_SUBDEV_G_FMT ioctl handler code. | 629 | * @get_fmt: callback for %VIDIOC_SUBDEV_G_FMT ioctl handler code. |
564 | * | 630 | * |
565 | * @set_fmt: callback for VIDIOC_SUBDEV_S_FMT ioctl handler code. | 631 | * @set_fmt: callback for %VIDIOC_SUBDEV_S_FMT ioctl handler code. |
566 | * | 632 | * |
567 | * @get_selection: callback for VIDIOC_SUBDEV_G_SELECTION ioctl handler code. | 633 | * @get_selection: callback for %VIDIOC_SUBDEV_G_SELECTION ioctl handler code. |
568 | * | 634 | * |
569 | * @set_selection: callback for VIDIOC_SUBDEV_S_SELECTION ioctl handler code. | 635 | * @set_selection: callback for %VIDIOC_SUBDEV_S_SELECTION ioctl handler code. |
570 | * | 636 | * |
571 | * @get_edid: callback for VIDIOC_SUBDEV_G_EDID ioctl handler code. | 637 | * @get_edid: callback for %VIDIOC_SUBDEV_G_EDID ioctl handler code. |
572 | * | 638 | * |
573 | * @set_edid: callback for VIDIOC_SUBDEV_S_EDID ioctl handler code. | 639 | * @set_edid: callback for %VIDIOC_SUBDEV_S_EDID ioctl handler code. |
574 | * | 640 | * |
575 | * @dv_timings_cap: callback for VIDIOC_SUBDEV_DV_TIMINGS_CAP ioctl handler | 641 | * @dv_timings_cap: callback for %VIDIOC_SUBDEV_DV_TIMINGS_CAP ioctl handler |
576 | * code. | 642 | * code. |
577 | * | 643 | * |
578 | * @enum_dv_timings: callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS ioctl handler | 644 | * @enum_dv_timings: callback for %VIDIOC_SUBDEV_ENUM_DV_TIMINGS ioctl handler |
579 | * code. | 645 | * code. |
580 | * | 646 | * |
581 | * @link_validate: used by the media controller code to check if the links | 647 | * @link_validate: used by the media controller code to check if the links |
@@ -627,6 +693,18 @@ struct v4l2_subdev_pad_ops { | |||
627 | struct v4l2_mbus_frame_desc *fd); | 693 | struct v4l2_mbus_frame_desc *fd); |
628 | }; | 694 | }; |
629 | 695 | ||
696 | /** | ||
697 | * struct v4l2_subdev_ops - Subdev operations | ||
698 | * | ||
699 | * @core: pointer to &struct v4l2_subdev_core_ops. Can be %NULL | ||
700 | * @tuner: pointer to &struct v4l2_subdev_tuner_ops. Can be %NULL | ||
701 | * @audio: pointer to &struct v4l2_subdev_audio_ops. Can be %NULL | ||
702 | * @video: pointer to &struct v4l2_subdev_video_ops. Can be %NULL | ||
703 | * @vbi: pointer to &struct v4l2_subdev_vbi_ops. Can be %NULL | ||
704 | * @ir: pointer to &struct v4l2_subdev_ir_ops. Can be %NULL | ||
705 | * @sensor: pointer to &struct v4l2_subdev_sensor_ops. Can be %NULL | ||
706 | * @pad: pointer to &struct v4l2_subdev_pad_ops. Can be %NULL | ||
707 | */ | ||
630 | struct v4l2_subdev_ops { | 708 | struct v4l2_subdev_ops { |
631 | const struct v4l2_subdev_core_ops *core; | 709 | const struct v4l2_subdev_core_ops *core; |
632 | const struct v4l2_subdev_tuner_ops *tuner; | 710 | const struct v4l2_subdev_tuner_ops *tuner; |
@@ -638,19 +716,22 @@ struct v4l2_subdev_ops { | |||
638 | const struct v4l2_subdev_pad_ops *pad; | 716 | const struct v4l2_subdev_pad_ops *pad; |
639 | }; | 717 | }; |
640 | 718 | ||
641 | /* | 719 | /** |
642 | * Internal ops. Never call this from drivers, only the v4l2 framework can call | 720 | * struct v4l2_subdev_internal_ops - V4L2 subdev internal ops |
643 | * these ops. | ||
644 | * | 721 | * |
645 | * registered: called when this subdev is registered. When called the v4l2_dev | 722 | * @registered: called when this subdev is registered. When called the v4l2_dev |
646 | * field is set to the correct v4l2_device. | 723 | * field is set to the correct v4l2_device. |
647 | * | 724 | * |
648 | * unregistered: called when this subdev is unregistered. When called the | 725 | * @unregistered: called when this subdev is unregistered. When called the |
649 | * v4l2_dev field is still set to the correct v4l2_device. | 726 | * v4l2_dev field is still set to the correct v4l2_device. |
650 | * | 727 | * |
651 | * open: called when the subdev device node is opened by an application. | 728 | * @open: called when the subdev device node is opened by an application. |
652 | * | 729 | * |
653 | * close: called when the subdev device node is closed. | 730 | * @close: called when the subdev device node is closed. |
731 | * | ||
732 | * .. note:: | ||
733 | * Never call this from drivers, only the v4l2 framework can call | ||
734 | * these ops. | ||
654 | */ | 735 | */ |
655 | struct v4l2_subdev_internal_ops { | 736 | struct v4l2_subdev_internal_ops { |
656 | int (*registered)(struct v4l2_subdev *sd); | 737 | int (*registered)(struct v4l2_subdev *sd); |
@@ -672,17 +753,60 @@ struct v4l2_subdev_internal_ops { | |||
672 | 753 | ||
673 | struct regulator_bulk_data; | 754 | struct regulator_bulk_data; |
674 | 755 | ||
756 | /** | ||
757 | * struct v4l2_subdev_platform_data - regulators config struct | ||
758 | * | ||
759 | * @regulators: Optional regulators used to power on/off the subdevice | ||
760 | * @num_regulators: Number of regululators | ||
761 | * @host_priv: Per-subdevice data, specific for a certain video host device | ||
762 | */ | ||
675 | struct v4l2_subdev_platform_data { | 763 | struct v4l2_subdev_platform_data { |
676 | /* Optional regulators uset to power on/off the subdevice */ | ||
677 | struct regulator_bulk_data *regulators; | 764 | struct regulator_bulk_data *regulators; |
678 | int num_regulators; | 765 | int num_regulators; |
679 | 766 | ||
680 | /* Per-subdevice data, specific for a certain video host device */ | ||
681 | void *host_priv; | 767 | void *host_priv; |
682 | }; | 768 | }; |
683 | 769 | ||
684 | /* Each instance of a subdev driver should create this struct, either | 770 | /** |
685 | stand-alone or embedded in a larger struct. | 771 | * struct v4l2_subdev - describes a V4L2 sub-device |
772 | * | ||
773 | * @entity: pointer to &struct media_entity | ||
774 | * @list: List of sub-devices | ||
775 | * @owner: The owner is the same as the driver's &struct device owner. | ||
776 | * @owner_v4l2_dev: true if the &sd->owner matches the owner of &v4l2_dev->dev | ||
777 | * ownner. Initialized by v4l2_device_register_subdev(). | ||
778 | * @flags: subdev flags. Can be: | ||
779 | * %V4L2_SUBDEV_FL_IS_I2C - Set this flag if this subdev is a i2c device; | ||
780 | * %V4L2_SUBDEV_FL_IS_SPI - Set this flag if this subdev is a spi device; | ||
781 | * %V4L2_SUBDEV_FL_HAS_DEVNODE - Set this flag if this subdev needs a | ||
782 | * device node; | ||
783 | * %V4L2_SUBDEV_FL_HAS_EVENTS - Set this flag if this subdev generates | ||
784 | * events. | ||
785 | * | ||
786 | * @v4l2_dev: pointer to &struct v4l2_device | ||
787 | * @ops: pointer to &struct v4l2_subdev_ops | ||
788 | * @internal_ops: pointer to &struct v4l2_subdev_internal_ops. | ||
789 | * Never call these internal ops from within a driver! | ||
790 | * @ctrl_handler: The control handler of this subdev. May be NULL. | ||
791 | * @name: Name of the sub-device. Please notice that the name must be unique. | ||
792 | * @grp_id: can be used to group similar subdevs. Value is driver-specific | ||
793 | * @dev_priv: pointer to private data | ||
794 | * @host_priv: pointer to private data used by the device where the subdev | ||
795 | * is attached. | ||
796 | * @devnode: subdev device node | ||
797 | * @dev: pointer to the physical device, if any | ||
798 | * @of_node: The device_node of the subdev, usually the same as dev->of_node. | ||
799 | * @async_list: Links this subdev to a global subdev_list or @notifier->done | ||
800 | * list. | ||
801 | * @asd: Pointer to respective &struct v4l2_async_subdev. | ||
802 | * @notifier: Pointer to the managing notifier. | ||
803 | * @pdata: common part of subdevice platform data | ||
804 | * | ||
805 | * Each instance of a subdev driver should create this struct, either | ||
806 | * stand-alone or embedded in a larger struct. | ||
807 | * | ||
808 | * This structure should be initialized by v4l2_subdev_init() or one of | ||
809 | * its variants: v4l2_spi_subdev_init(), v4l2_i2c_subdev_init(). | ||
686 | */ | 810 | */ |
687 | struct v4l2_subdev { | 811 | struct v4l2_subdev { |
688 | #if defined(CONFIG_MEDIA_CONTROLLER) | 812 | #if defined(CONFIG_MEDIA_CONTROLLER) |
@@ -694,30 +818,18 @@ struct v4l2_subdev { | |||
694 | u32 flags; | 818 | u32 flags; |
695 | struct v4l2_device *v4l2_dev; | 819 | struct v4l2_device *v4l2_dev; |
696 | const struct v4l2_subdev_ops *ops; | 820 | const struct v4l2_subdev_ops *ops; |
697 | /* Never call these internal ops from within a driver! */ | ||
698 | const struct v4l2_subdev_internal_ops *internal_ops; | 821 | const struct v4l2_subdev_internal_ops *internal_ops; |
699 | /* The control handler of this subdev. May be NULL. */ | ||
700 | struct v4l2_ctrl_handler *ctrl_handler; | 822 | struct v4l2_ctrl_handler *ctrl_handler; |
701 | /* name must be unique */ | ||
702 | char name[V4L2_SUBDEV_NAME_SIZE]; | 823 | char name[V4L2_SUBDEV_NAME_SIZE]; |
703 | /* can be used to group similar subdevs, value is driver-specific */ | ||
704 | u32 grp_id; | 824 | u32 grp_id; |
705 | /* pointer to private data */ | ||
706 | void *dev_priv; | 825 | void *dev_priv; |
707 | void *host_priv; | 826 | void *host_priv; |
708 | /* subdev device node */ | ||
709 | struct video_device *devnode; | 827 | struct video_device *devnode; |
710 | /* pointer to the physical device, if any */ | ||
711 | struct device *dev; | 828 | struct device *dev; |
712 | /* The device_node of the subdev, usually the same as dev->of_node. */ | ||
713 | struct device_node *of_node; | 829 | struct device_node *of_node; |
714 | /* Links this subdev to a global subdev_list or @notifier->done list. */ | ||
715 | struct list_head async_list; | 830 | struct list_head async_list; |
716 | /* Pointer to respective struct v4l2_async_subdev. */ | ||
717 | struct v4l2_async_subdev *asd; | 831 | struct v4l2_async_subdev *asd; |
718 | /* Pointer to the managing notifier. */ | ||
719 | struct v4l2_async_notifier *notifier; | 832 | struct v4l2_async_notifier *notifier; |
720 | /* common part of subdevice platform data */ | ||
721 | struct v4l2_subdev_platform_data *pdata; | 833 | struct v4l2_subdev_platform_data *pdata; |
722 | }; | 834 | }; |
723 | 835 | ||
@@ -726,8 +838,11 @@ struct v4l2_subdev { | |||
726 | #define vdev_to_v4l2_subdev(vdev) \ | 838 | #define vdev_to_v4l2_subdev(vdev) \ |
727 | ((struct v4l2_subdev *)video_get_drvdata(vdev)) | 839 | ((struct v4l2_subdev *)video_get_drvdata(vdev)) |
728 | 840 | ||
729 | /* | 841 | /** |
730 | * Used for storing subdev information per file handle | 842 | * struct v4l2_subdev_fh - Used for storing subdev information per file handle |
843 | * | ||
844 | * @vfh: pointer to struct v4l2_fh | ||
845 | * @pad: pointer to v4l2_subdev_pad_config | ||
731 | */ | 846 | */ |
732 | struct v4l2_subdev_fh { | 847 | struct v4l2_subdev_fh { |
733 | struct v4l2_fh vfh; | 848 | struct v4l2_fh vfh; |
@@ -757,53 +872,132 @@ __V4L2_SUBDEV_MK_GET_TRY(v4l2_rect, v4l2_subdev_get_try_compose, try_compose) | |||
757 | 872 | ||
758 | extern const struct v4l2_file_operations v4l2_subdev_fops; | 873 | extern const struct v4l2_file_operations v4l2_subdev_fops; |
759 | 874 | ||
875 | /** | ||
876 | * v4l2_set_subdevdata - Sets V4L2 dev private device data | ||
877 | * | ||
878 | * @sd: pointer to &struct v4l2_subdev | ||
879 | * @p: pointer to the private device data to be stored. | ||
880 | */ | ||
760 | static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) | 881 | static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) |
761 | { | 882 | { |
762 | sd->dev_priv = p; | 883 | sd->dev_priv = p; |
763 | } | 884 | } |
764 | 885 | ||
886 | /** | ||
887 | * v4l2_get_subdevdata - Gets V4L2 dev private device data | ||
888 | * | ||
889 | * @sd: pointer to &struct v4l2_subdev | ||
890 | * | ||
891 | * Returns the pointer to the private device data to be stored. | ||
892 | */ | ||
765 | static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) | 893 | static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) |
766 | { | 894 | { |
767 | return sd->dev_priv; | 895 | return sd->dev_priv; |
768 | } | 896 | } |
769 | 897 | ||
898 | /** | ||
899 | * v4l2_set_subdevdata - Sets V4L2 dev private host data | ||
900 | * | ||
901 | * @sd: pointer to &struct v4l2_subdev | ||
902 | * @p: pointer to the private data to be stored. | ||
903 | */ | ||
770 | static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p) | 904 | static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p) |
771 | { | 905 | { |
772 | sd->host_priv = p; | 906 | sd->host_priv = p; |
773 | } | 907 | } |
774 | 908 | ||
909 | /** | ||
910 | * v4l2_get_subdevdata - Gets V4L2 dev private data | ||
911 | * | ||
912 | * @sd: pointer to &struct v4l2_subdev | ||
913 | * | ||
914 | * Returns the pointer to the private host data to be stored. | ||
915 | */ | ||
775 | static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) | 916 | static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) |
776 | { | 917 | { |
777 | return sd->host_priv; | 918 | return sd->host_priv; |
778 | } | 919 | } |
779 | 920 | ||
780 | #ifdef CONFIG_MEDIA_CONTROLLER | 921 | #ifdef CONFIG_MEDIA_CONTROLLER |
922 | |||
923 | /** | ||
924 | * v4l2_subdev_link_validate_default - validates a media link | ||
925 | * | ||
926 | * @sd: pointer to &struct v4l2_subdev | ||
927 | * @link: pointer to &struct media_link | ||
928 | * @source_fmt: pointer to &struct v4l2_subdev_format | ||
929 | * @sink_fmt: pointer to &struct v4l2_subdev_format | ||
930 | * | ||
931 | * This function ensures that width, height and the media bus pixel | ||
932 | * code are equal on both source and sink of the link. | ||
933 | */ | ||
781 | int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, | 934 | int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, |
782 | struct media_link *link, | 935 | struct media_link *link, |
783 | struct v4l2_subdev_format *source_fmt, | 936 | struct v4l2_subdev_format *source_fmt, |
784 | struct v4l2_subdev_format *sink_fmt); | 937 | struct v4l2_subdev_format *sink_fmt); |
938 | |||
939 | /** | ||
940 | * v4l2_subdev_link_validate - validates a media link | ||
941 | * | ||
942 | * @link: pointer to &struct media_link | ||
943 | * | ||
944 | * This function calls the subdev's link_validate ops to validate | ||
945 | * if a media link is valid for streaming. It also internally | ||
946 | * calls v4l2_subdev_link_validate_default() to ensure that | ||
947 | * width, height and the media bus pixel code are equal on both | ||
948 | * source and sink of the link. | ||
949 | */ | ||
785 | int v4l2_subdev_link_validate(struct media_link *link); | 950 | int v4l2_subdev_link_validate(struct media_link *link); |
786 | 951 | ||
787 | struct v4l2_subdev_pad_config * | 952 | /** |
788 | v4l2_subdev_alloc_pad_config(struct v4l2_subdev *sd); | 953 | * v4l2_subdev_alloc_pad_config - Allocates memory for pad config |
954 | * | ||
955 | * @sd: pointer to struct v4l2_subdev | ||
956 | */ | ||
957 | struct | ||
958 | v4l2_subdev_pad_config *v4l2_subdev_alloc_pad_config(struct v4l2_subdev *sd); | ||
959 | |||
960 | /** | ||
961 | * v4l2_subdev_free_pad_config - Frees memory allocated by | ||
962 | * v4l2_subdev_alloc_pad_config(). | ||
963 | * | ||
964 | * @cfg: pointer to &struct v4l2_subdev_pad_config | ||
965 | */ | ||
789 | void v4l2_subdev_free_pad_config(struct v4l2_subdev_pad_config *cfg); | 966 | void v4l2_subdev_free_pad_config(struct v4l2_subdev_pad_config *cfg); |
790 | #endif /* CONFIG_MEDIA_CONTROLLER */ | 967 | #endif /* CONFIG_MEDIA_CONTROLLER */ |
791 | 968 | ||
969 | /** | ||
970 | * v4l2_subdev_init - initializes the sub-device struct | ||
971 | * | ||
972 | * @sd: pointer to the &struct v4l2_subdev to be initialized | ||
973 | * @ops: pointer to &struct v4l2_subdev_ops. | ||
974 | */ | ||
792 | void v4l2_subdev_init(struct v4l2_subdev *sd, | 975 | void v4l2_subdev_init(struct v4l2_subdev *sd, |
793 | const struct v4l2_subdev_ops *ops); | 976 | const struct v4l2_subdev_ops *ops); |
794 | 977 | ||
795 | /* Call an ops of a v4l2_subdev, doing the right checks against | 978 | /* |
796 | NULL pointers. | 979 | * Call an ops of a v4l2_subdev, doing the right checks against |
797 | 980 | * NULL pointers. | |
798 | Example: err = v4l2_subdev_call(sd, video, s_std, norm); | 981 | * |
982 | * Example: err = v4l2_subdev_call(sd, video, s_std, norm); | ||
799 | */ | 983 | */ |
800 | #define v4l2_subdev_call(sd, o, f, args...) \ | 984 | #define v4l2_subdev_call(sd, o, f, args...) \ |
801 | (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \ | 985 | (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \ |
802 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) | 986 | (sd)->ops->o->f((sd), ##args) : -ENOIOCTLCMD)) |
803 | 987 | ||
804 | #define v4l2_subdev_has_op(sd, o, f) \ | 988 | #define v4l2_subdev_has_op(sd, o, f) \ |
805 | ((sd)->ops->o && (sd)->ops->o->f) | 989 | ((sd)->ops->o && (sd)->ops->o->f) |
806 | 990 | ||
991 | /** | ||
992 | * v4l2_subdev_notify_event() - Delivers event notification for subdevice | ||
993 | * @sd: The subdev for which to deliver the event | ||
994 | * @ev: The event to deliver | ||
995 | * | ||
996 | * Will deliver the specified event to all userspace event listeners which are | ||
997 | * subscribed to the v42l subdev event queue as well as to the bridge driver | ||
998 | * using the notify callback. The notification type for the notify callback | ||
999 | * will be %V4L2_DEVICE_NOTIFY_EVENT. | ||
1000 | */ | ||
807 | void v4l2_subdev_notify_event(struct v4l2_subdev *sd, | 1001 | void v4l2_subdev_notify_event(struct v4l2_subdev *sd, |
808 | const struct v4l2_event *ev); | 1002 | const struct v4l2_event *ev); |
809 | 1003 | ||