aboutsummaryrefslogtreecommitdiffstats
path: root/include/media/v4l2-subdev.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/media/v4l2-subdev.h')
-rw-r--r--include/media/v4l2-subdev.h576
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;
52struct tuner_setup; 48struct tuner_setup;
53struct v4l2_mbus_frame_desc; 49struct 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 */
56struct v4l2_decode_vbi_line { 61struct 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 */
113struct v4l2_subdev_io_pin_config { 132struct 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
490enum v4l2_subdev_ir_mode { 492enum 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 */
494struct v4l2_subdev_ir_parameters { 521struct 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 */
519struct v4l2_subdev_ir_ops { 580struct 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 */
545struct v4l2_subdev_pad_config { 611struct 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 */
630struct v4l2_subdev_ops { 708struct 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 */
655struct v4l2_subdev_internal_ops { 736struct 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
673struct regulator_bulk_data; 754struct 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 */
675struct v4l2_subdev_platform_data { 763struct 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 */
687struct v4l2_subdev { 811struct 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 */
732struct v4l2_subdev_fh { 847struct 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
758extern const struct v4l2_file_operations v4l2_subdev_fops; 873extern 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 */
760static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) 881static 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 */
765static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) 893static 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 */
770static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p) 904static 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 */
775static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) 916static 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 */
781int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd, 934int 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 */
785int v4l2_subdev_link_validate(struct media_link *link); 950int v4l2_subdev_link_validate(struct media_link *link);
786 951
787struct v4l2_subdev_pad_config * 952/**
788v4l2_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 */
957struct
958v4l2_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 */
789void v4l2_subdev_free_pad_config(struct v4l2_subdev_pad_config *cfg); 966void 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 */
792void v4l2_subdev_init(struct v4l2_subdev *sd, 975void 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 */
807void v4l2_subdev_notify_event(struct v4l2_subdev *sd, 1001void v4l2_subdev_notify_event(struct v4l2_subdev *sd,
808 const struct v4l2_event *ev); 1002 const struct v4l2_event *ev);
809 1003