linux/include/media/v4l2-subdev.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 *  V4L2 sub-device support header.
   4 *
   5 *  Copyright (C) 2008  Hans Verkuil <hverkuil@xs4all.nl>
   6 */
   7
   8#ifndef _V4L2_SUBDEV_H
   9#define _V4L2_SUBDEV_H
  10
  11#include <linux/types.h>
  12#include <linux/v4l2-subdev.h>
  13#include <media/media-entity.h>
  14#include <media/v4l2-async.h>
  15#include <media/v4l2-common.h>
  16#include <media/v4l2-dev.h>
  17#include <media/v4l2-fh.h>
  18#include <media/v4l2-mediabus.h>
  19
  20/* generic v4l2_device notify callback notification values */
  21#define V4L2_SUBDEV_IR_RX_NOTIFY                _IOW('v', 0, u32)
  22#define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ      0x00000001
  23#define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED    0x00000002
  24#define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN       0x00000004
  25#define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN       0x00000008
  26
  27#define V4L2_SUBDEV_IR_TX_NOTIFY                _IOW('v', 1, u32)
  28#define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ      0x00000001
  29
  30#define V4L2_DEVICE_NOTIFY_EVENT                _IOW('v', 2, struct v4l2_event)
  31
  32struct v4l2_device;
  33struct v4l2_ctrl_handler;
  34struct v4l2_event;
  35struct v4l2_event_subscription;
  36struct v4l2_fh;
  37struct v4l2_subdev;
  38struct v4l2_subdev_fh;
  39struct tuner_setup;
  40struct v4l2_mbus_frame_desc;
  41
  42/**
  43 * struct v4l2_decode_vbi_line - used to decode_vbi_line
  44 *
  45 * @is_second_field: Set to 0 for the first (odd) field;
  46 *      set to 1 for the second (even) field.
  47 * @p: Pointer to the sliced VBI data from the decoder. On exit, points to
  48 *      the start of the payload.
  49 * @line: Line number of the sliced VBI data (1-23)
  50 * @type: VBI service type (V4L2_SLICED_*). 0 if no service found
  51 */
  52struct v4l2_decode_vbi_line {
  53        u32 is_second_field;
  54        u8 *p;
  55        u32 line;
  56        u32 type;
  57};
  58
  59/*
  60 * Sub-devices are devices that are connected somehow to the main bridge
  61 * device. These devices are usually audio/video muxers/encoders/decoders or
  62 * sensors and webcam controllers.
  63 *
  64 * Usually these devices are controlled through an i2c bus, but other buses
  65 * may also be used.
  66 *
  67 * The v4l2_subdev struct provides a way of accessing these devices in a
  68 * generic manner. Most operations that these sub-devices support fall in
  69 * a few categories: core ops, audio ops, video ops and tuner ops.
  70 *
  71 * More categories can be added if needed, although this should remain a
  72 * limited set (no more than approx. 8 categories).
  73 *
  74 * Each category has its own set of ops that subdev drivers can implement.
  75 *
  76 * A subdev driver can leave the pointer to the category ops NULL if
  77 * it does not implement them (e.g. an audio subdev will generally not
  78 * implement the video category ops). The exception is the core category:
  79 * this must always be present.
  80 *
  81 * These ops are all used internally so it is no problem to change, remove
  82 * or add ops or move ops from one to another category. Currently these
  83 * ops are based on the original ioctls, but since ops are not limited to
  84 * one argument there is room for improvement here once all i2c subdev
  85 * drivers are converted to use these ops.
  86 */
  87
  88/*
  89 * Core ops: it is highly recommended to implement at least these ops:
  90 *
  91 * log_status
  92 * g_register
  93 * s_register
  94 *
  95 * This provides basic debugging support.
  96 *
  97 * The ioctl ops is meant for generic ioctl-like commands. Depending on
  98 * the use-case it might be better to use subdev-specific ops (currently
  99 * not yet implemented) since ops provide proper type-checking.
 100 */
 101
 102/**
 103 * enum v4l2_subdev_io_pin_bits - Subdevice external IO pin configuration
 104 *      bits
 105 *
 106 * @V4L2_SUBDEV_IO_PIN_DISABLE: disables a pin config. ENABLE assumed.
 107 * @V4L2_SUBDEV_IO_PIN_OUTPUT: set it if pin is an output.
 108 * @V4L2_SUBDEV_IO_PIN_INPUT: set it if pin is an input.
 109 * @V4L2_SUBDEV_IO_PIN_SET_VALUE: to set the output value via
 110 *                                &struct v4l2_subdev_io_pin_config->value.
 111 * @V4L2_SUBDEV_IO_PIN_ACTIVE_LOW: pin active is bit 0.
 112 *                                 Otherwise, ACTIVE HIGH is assumed.
 113 */
 114enum v4l2_subdev_io_pin_bits {
 115        V4L2_SUBDEV_IO_PIN_DISABLE      = 0,
 116        V4L2_SUBDEV_IO_PIN_OUTPUT       = 1,
 117        V4L2_SUBDEV_IO_PIN_INPUT        = 2,
 118        V4L2_SUBDEV_IO_PIN_SET_VALUE    = 3,
 119        V4L2_SUBDEV_IO_PIN_ACTIVE_LOW   = 4,
 120};
 121
 122/**
 123 * struct v4l2_subdev_io_pin_config - Subdevice external IO pin configuration
 124 *
 125 * @flags: bitmask with flags for this pin's config, whose bits are defined by
 126 *         &enum v4l2_subdev_io_pin_bits.
 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 */
 132struct v4l2_subdev_io_pin_config {
 133        u32 flags;
 134        u8 pin;
 135        u8 function;
 136        u8 value;
 137        u8 strength;
 138};
 139
 140/**
 141 * struct v4l2_subdev_core_ops - Define core ops callbacks for subdevs
 142 *
 143 * @log_status: callback for VIDIOC_LOG_STATUS() ioctl handler code.
 144 *
 145 * @s_io_pin_config: configure one or more chip I/O pins for chips that
 146 *      multiplex different internal signal pads out to IO pins.  This function
 147 *      takes a pointer to an array of 'n' pin configuration entries, one for
 148 *      each pin being configured.  This function could be called at times
 149 *      other than just subdevice initialization.
 150 *
 151 * @init: initialize the sensor registers to some sort of reasonable default
 152 *      values. Do not use for new drivers and should be removed in existing
 153 *      drivers.
 154 *
 155 * @load_fw: load firmware.
 156 *
 157 * @reset: generic reset command. The argument selects which subsystems to
 158 *      reset. Passing 0 will always reset the whole chip. Do not use for new
 159 *      drivers without discussing this first on the linux-media mailinglist.
 160 *      There should be no reason normally to reset a device.
 161 *
 162 * @s_gpio: set GPIO pins. Very simple right now, might need to be extended with
 163 *      a direction argument if needed.
 164 *
 165 * @command: called by in-kernel drivers in order to call functions internal
 166 *         to subdev drivers driver that have a separate callback.
 167 *
 168 * @ioctl: called at the end of ioctl() syscall handler at the V4L2 core.
 169 *         used to provide support for private ioctls used on the driver.
 170 *
 171 * @compat_ioctl32: called when a 32 bits application uses a 64 bits Kernel,
 172 *                  in order to fix data passed from/to userspace.
 173 *
 174 * @g_register: callback for VIDIOC_DBG_G_REGISTER() ioctl handler code.
 175 *
 176 * @s_register: callback for VIDIOC_DBG_S_REGISTER() ioctl handler code.
 177 *
 178 * @s_power: puts subdevice in power saving mode (on == 0) or normal operation
 179 *      mode (on == 1).
 180 *
 181 * @interrupt_service_routine: Called by the bridge chip's interrupt service
 182 *      handler, when an interrupt status has be raised due to this subdev,
 183 *      so that this subdev can handle the details.  It may schedule work to be
 184 *      performed later.  It must not sleep. **Called from an IRQ context**.
 185 *
 186 * @subscribe_event: used by the drivers to request the control framework that
 187 *                   for it to be warned when the value of a control changes.
 188 *
 189 * @unsubscribe_event: remove event subscription from the control framework.
 190 */
 191struct v4l2_subdev_core_ops {
 192        int (*log_status)(struct v4l2_subdev *sd);
 193        int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n,
 194                                      struct v4l2_subdev_io_pin_config *pincfg);
 195        int (*init)(struct v4l2_subdev *sd, u32 val);
 196        int (*load_fw)(struct v4l2_subdev *sd);
 197        int (*reset)(struct v4l2_subdev *sd, u32 val);
 198        int (*s_gpio)(struct v4l2_subdev *sd, u32 val);
 199        long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 200        long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 201#ifdef CONFIG_COMPAT
 202        long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,
 203                               unsigned long arg);
 204#endif
 205#ifdef CONFIG_VIDEO_ADV_DEBUG
 206        int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg);
 207        int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg);
 208#endif
 209        int (*s_power)(struct v4l2_subdev *sd, int on);
 210        int (*interrupt_service_routine)(struct v4l2_subdev *sd,
 211                                                u32 status, bool *handled);
 212        int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
 213                               struct v4l2_event_subscription *sub);
 214        int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
 215                                 struct v4l2_event_subscription *sub);
 216};
 217
 218/**
 219 * struct v4l2_subdev_tuner_ops - Callbacks used when v4l device was opened
 220 *      in radio mode.
 221 *
 222 * @standby: puts the tuner in standby mode. It will be woken up
 223 *           automatically the next time it is used.
 224 *
 225 * @s_radio: callback that switches the tuner to radio mode.
 226 *           drivers should explicitly call it when a tuner ops should
 227 *           operate on radio mode, before being able to handle it.
 228 *           Used on devices that have both AM/FM radio receiver and TV.
 229 *
 230 * @s_frequency: callback for VIDIOC_S_FREQUENCY() ioctl handler code.
 231 *
 232 * @g_frequency: callback for VIDIOC_G_FREQUENCY() ioctl handler code.
 233 *               freq->type must be filled in. Normally done by video_ioctl2()
 234 *               or the bridge driver.
 235 *
 236 * @enum_freq_bands: callback for VIDIOC_ENUM_FREQ_BANDS() ioctl handler code.
 237 *
 238 * @g_tuner: callback for VIDIOC_G_TUNER() ioctl handler code.
 239 *
 240 * @s_tuner: callback for VIDIOC_S_TUNER() ioctl handler code. @vt->type must be
 241 *           filled in. Normally done by video_ioctl2 or the
 242 *           bridge driver.
 243 *
 244 * @g_modulator: callback for VIDIOC_G_MODULATOR() ioctl handler code.
 245 *
 246 * @s_modulator: callback for VIDIOC_S_MODULATOR() ioctl handler code.
 247 *
 248 * @s_type_addr: sets tuner type and its I2C addr.
 249 *
 250 * @s_config: sets tda9887 specific stuff, like port1, port2 and qss
 251 *
 252 * .. note::
 253 *
 254 *      On devices that have both AM/FM and TV, it is up to the driver
 255 *      to explicitly call s_radio when the tuner should be switched to
 256 *      radio mode, before handling other &struct v4l2_subdev_tuner_ops
 257 *      that would require it. An example of such usage is::
 258 *
 259 *        static void s_frequency(void *priv, const struct v4l2_frequency *f)
 260 *        {
 261 *              ...
 262 *              if (f.type == V4L2_TUNER_RADIO)
 263 *                      v4l2_device_call_all(v4l2_dev, 0, tuner, s_radio);
 264 *              ...
 265 *              v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency);
 266 *        }
 267 */
 268struct v4l2_subdev_tuner_ops {
 269        int (*standby)(struct v4l2_subdev *sd);
 270        int (*s_radio)(struct v4l2_subdev *sd);
 271        int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq);
 272        int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq);
 273        int (*enum_freq_bands)(struct v4l2_subdev *sd, struct v4l2_frequency_band *band);
 274        int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
 275        int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt);
 276        int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm);
 277        int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm);
 278        int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type);
 279        int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config);
 280};
 281
 282/**
 283 * struct v4l2_subdev_audio_ops - Callbacks used for audio-related settings
 284 *
 285 * @s_clock_freq: set the frequency (in Hz) of the audio clock output.
 286 *      Used to slave an audio processor to the video decoder, ensuring that
 287 *      audio and video remain synchronized. Usual values for the frequency
 288 *      are 48000, 44100 or 32000 Hz. If the frequency is not supported, then
 289 *      -EINVAL is returned.
 290 *
 291 * @s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard
 292 *      way to select I2S clock used by driving digital audio streams at some
 293 *      board designs. Usual values for the frequency are 1024000 and 2048000.
 294 *      If the frequency is not supported, then %-EINVAL is returned.
 295 *
 296 * @s_routing: used to define the input and/or output pins of an audio chip,
 297 *      and any additional configuration data.
 298 *      Never attempt to use user-level input IDs (e.g. Composite, S-Video,
 299 *      Tuner) at this level. An i2c device shouldn't know about whether an
 300 *      input pin is connected to a Composite connector, become on another
 301 *      board or platform it might be connected to something else entirely.
 302 *      The calling driver is responsible for mapping a user-level input to
 303 *      the right pins on the i2c device.
 304 *
 305 * @s_stream: used to notify the audio code that stream will start or has
 306 *      stopped.
 307 */
 308struct v4l2_subdev_audio_ops {
 309        int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
 310        int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
 311        int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
 312        int (*s_stream)(struct v4l2_subdev *sd, int enable);
 313};
 314
 315/**
 316 * enum v4l2_mbus_frame_desc_flags - media bus frame description flags
 317 *
 318 * @V4L2_MBUS_FRAME_DESC_FL_LEN_MAX:
 319 *      Indicates that &struct v4l2_mbus_frame_desc_entry->length field
 320 *      specifies maximum data length.
 321 * @V4L2_MBUS_FRAME_DESC_FL_BLOB:
 322 *      Indicates that the format does not have line offsets, i.e.
 323 *      the receiver should use 1D DMA.
 324 */
 325enum v4l2_mbus_frame_desc_flags {
 326        V4L2_MBUS_FRAME_DESC_FL_LEN_MAX = BIT(0),
 327        V4L2_MBUS_FRAME_DESC_FL_BLOB    = BIT(1),
 328};
 329
 330/**
 331 * struct v4l2_mbus_frame_desc_entry - media bus frame description structure
 332 *
 333 * @flags:      bitmask flags, as defined by &enum v4l2_mbus_frame_desc_flags.
 334 * @pixelcode:  media bus pixel code, valid if @flags
 335 *              %FRAME_DESC_FL_BLOB is not set.
 336 * @length:     number of octets per frame, valid if @flags
 337 *              %V4L2_MBUS_FRAME_DESC_FL_LEN_MAX is set.
 338 */
 339struct v4l2_mbus_frame_desc_entry {
 340        enum v4l2_mbus_frame_desc_flags flags;
 341        u32 pixelcode;
 342        u32 length;
 343};
 344
 345#define V4L2_FRAME_DESC_ENTRY_MAX       4
 346
 347/**
 348 * struct v4l2_mbus_frame_desc - media bus data frame description
 349 * @entry: frame descriptors array
 350 * @num_entries: number of entries in @entry array
 351 */
 352struct v4l2_mbus_frame_desc {
 353        struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX];
 354        unsigned short num_entries;
 355};
 356
 357/**
 358 * enum v4l2_subdev_pre_streamon_flags - Flags for pre_streamon subdev core op
 359 *
 360 * @V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP: Set the transmitter to either LP-11
 361 *      or LP-111 mode before call to s_stream().
 362 */
 363enum v4l2_subdev_pre_streamon_flags {
 364        V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP = BIT(0),
 365};
 366
 367/**
 368 * struct v4l2_subdev_video_ops - Callbacks used when v4l device was opened
 369 *                                in video mode.
 370 *
 371 * @s_routing: see s_routing in audio_ops, except this version is for video
 372 *      devices.
 373 *
 374 * @s_crystal_freq: sets the frequency of the crystal used to generate the
 375 *      clocks in Hz. An extra flags field allows device specific configuration
 376 *      regarding clock frequency dividers, etc. If not used, then set flags
 377 *      to 0. If the frequency is not supported, then -EINVAL is returned.
 378 *
 379 * @g_std: callback for VIDIOC_G_STD() ioctl handler code.
 380 *
 381 * @s_std: callback for VIDIOC_S_STD() ioctl handler code.
 382 *
 383 * @s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by
 384 *      video input devices.
 385 *
 386 * @g_std_output: get current standard for video OUTPUT devices. This is ignored
 387 *      by video input devices.
 388 *
 389 * @querystd: callback for VIDIOC_QUERYSTD() ioctl handler code.
 390 *
 391 * @g_tvnorms: get &v4l2_std_id with all standards supported by the video
 392 *      CAPTURE device. This is ignored by video output devices.
 393 *
 394 * @g_tvnorms_output: get v4l2_std_id with all standards supported by the video
 395 *      OUTPUT device. This is ignored by video capture devices.
 396 *
 397 * @g_input_status: get input status. Same as the status field in the
 398 *      &struct v4l2_input
 399 *
 400 * @s_stream: used to notify the driver that a video stream will start or has
 401 *      stopped.
 402 *
 403 * @g_pixelaspect: callback to return the pixelaspect ratio.
 404 *
 405 * @g_frame_interval: callback for VIDIOC_SUBDEV_G_FRAME_INTERVAL()
 406 *                    ioctl handler code.
 407 *
 408 * @s_frame_interval: callback for VIDIOC_SUBDEV_S_FRAME_INTERVAL()
 409 *                    ioctl handler code.
 410 *
 411 * @s_dv_timings: Set custom dv timings in the sub device. This is used
 412 *      when sub device is capable of setting detailed timing information
 413 *      in the hardware to generate/detect the video signal.
 414 *
 415 * @g_dv_timings: Get custom dv timings in the sub device.
 416 *
 417 * @query_dv_timings: callback for VIDIOC_QUERY_DV_TIMINGS() ioctl handler code.
 418 *
 419 * @s_rx_buffer: set a host allocated memory buffer for the subdev. The subdev
 420 *      can adjust @size to a lower value and must not write more data to the
 421 *      buffer starting at @data than the original value of @size.
 422 *
 423 * @pre_streamon: May be called before streaming is actually started, to help
 424 *      initialising the bus. Current usage is to set a CSI-2 transmitter to
 425 *      LP-11 or LP-111 mode before streaming. See &enum
 426 *      v4l2_subdev_pre_streamon_flags.
 427 *
 428 *      pre_streamon shall return error if it cannot perform the operation as
 429 *      indicated by the flags argument. In particular, -EACCES indicates lack
 430 *      of support for the operation. The caller shall call post_streamoff for
 431 *      each successful call of pre_streamon.
 432 *
 433 * @post_streamoff: Called after streaming is stopped, but if and only if
 434 *      pre_streamon was called earlier.
 435 */
 436struct v4l2_subdev_video_ops {
 437        int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
 438        int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
 439        int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
 440        int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
 441        int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
 442        int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
 443        int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
 444        int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std);
 445        int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
 446        int (*g_input_status)(struct v4l2_subdev *sd, u32 *status);
 447        int (*s_stream)(struct v4l2_subdev *sd, int enable);
 448        int (*g_pixelaspect)(struct v4l2_subdev *sd, struct v4l2_fract *aspect);
 449        int (*g_frame_interval)(struct v4l2_subdev *sd,
 450                                struct v4l2_subdev_frame_interval *interval);
 451        int (*s_frame_interval)(struct v4l2_subdev *sd,
 452                                struct v4l2_subdev_frame_interval *interval);
 453        int (*s_dv_timings)(struct v4l2_subdev *sd,
 454                        struct v4l2_dv_timings *timings);
 455        int (*g_dv_timings)(struct v4l2_subdev *sd,
 456                        struct v4l2_dv_timings *timings);
 457        int (*query_dv_timings)(struct v4l2_subdev *sd,
 458                        struct v4l2_dv_timings *timings);
 459        int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf,
 460                           unsigned int *size);
 461        int (*pre_streamon)(struct v4l2_subdev *sd, u32 flags);
 462        int (*post_streamoff)(struct v4l2_subdev *sd);
 463};
 464
 465/**
 466 * struct v4l2_subdev_vbi_ops - Callbacks used when v4l device was opened
 467 *                                in video mode via the vbi device node.
 468 *
 469 *  @decode_vbi_line: video decoders that support sliced VBI need to implement
 470 *      this ioctl. Field p of the &struct v4l2_decode_vbi_line is set to the
 471 *      start of the VBI data that was generated by the decoder. The driver
 472 *      then parses the sliced VBI data and sets the other fields in the
 473 *      struct accordingly. The pointer p is updated to point to the start of
 474 *      the payload which can be copied verbatim into the data field of the
 475 *      &struct v4l2_sliced_vbi_data. If no valid VBI data was found, then the
 476 *      type field is set to 0 on return.
 477 *
 478 * @s_vbi_data: used to generate VBI signals on a video signal.
 479 *      &struct v4l2_sliced_vbi_data is filled with the data packets that
 480 *      should be output. Note that if you set the line field to 0, then that
 481 *      VBI signal is disabled. If no valid VBI data was found, then the type
 482 *      field is set to 0 on return.
 483 *
 484 * @g_vbi_data: used to obtain the sliced VBI packet from a readback register.
 485 *      Not all video decoders support this. If no data is available because
 486 *      the readback register contains invalid or erroneous data %-EIO is
 487 *      returned. Note that you must fill in the 'id' member and the 'field'
 488 *      member (to determine whether CC data from the first or second field
 489 *      should be obtained).
 490 *
 491 * @g_sliced_vbi_cap: callback for VIDIOC_G_SLICED_VBI_CAP() ioctl handler
 492 *                    code.
 493 *
 494 * @s_raw_fmt: setup the video encoder/decoder for raw VBI.
 495 *
 496 * @g_sliced_fmt: retrieve the current sliced VBI settings.
 497 *
 498 * @s_sliced_fmt: setup the sliced VBI settings.
 499 */
 500struct v4l2_subdev_vbi_ops {
 501        int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line);
 502        int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data);
 503        int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
 504        int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap);
 505        int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt);
 506        int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
 507        int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
 508};
 509
 510/**
 511 * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations
 512 * @g_skip_top_lines: number of lines at the top of the image to be skipped.
 513 *                    This is needed for some sensors, which always corrupt
 514 *                    several top lines of the output image, or which send their
 515 *                    metadata in them.
 516 * @g_skip_frames: number of frames to skip at stream start. This is needed for
 517 *                 buggy sensors that generate faulty frames when they are
 518 *                 turned on.
 519 */
 520struct v4l2_subdev_sensor_ops {
 521        int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines);
 522        int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames);
 523};
 524
 525/**
 526 * enum v4l2_subdev_ir_mode- describes the type of IR supported
 527 *
 528 * @V4L2_SUBDEV_IR_MODE_PULSE_WIDTH: IR uses struct ir_raw_event records
 529 */
 530enum v4l2_subdev_ir_mode {
 531        V4L2_SUBDEV_IR_MODE_PULSE_WIDTH,
 532};
 533
 534/**
 535 * struct v4l2_subdev_ir_parameters - Parameters for IR TX or TX
 536 *
 537 * @bytes_per_data_element: bytes per data element of data in read or
 538 *      write call.
 539 * @mode: IR mode as defined by &enum v4l2_subdev_ir_mode.
 540 * @enable: device is active if true
 541 * @interrupt_enable: IR interrupts are enabled if true
 542 * @shutdown: if true: set hardware to low/no power, false: normal mode
 543 *
 544 * @modulation: if true, it uses carrier, if false: baseband
 545 * @max_pulse_width:  maximum pulse width in ns, valid only for baseband signal
 546 * @carrier_freq: carrier frequency in Hz, valid only for modulated signal
 547 * @duty_cycle: duty cycle percentage, valid only for modulated signal
 548 * @invert_level: invert signal level
 549 *
 550 * @invert_carrier_sense: Send 0/space as a carrier burst. used only in TX.
 551 *
 552 * @noise_filter_min_width: min time of a valid pulse, in ns. Used only for RX.
 553 * @carrier_range_lower: Lower carrier range, in Hz, valid only for modulated
 554 *      signal. Used only for RX.
 555 * @carrier_range_upper: Upper carrier range, in Hz, valid only for modulated
 556 *      signal. Used only for RX.
 557 * @resolution: The receive resolution, in ns . Used only for RX.
 558 */
 559struct v4l2_subdev_ir_parameters {
 560        unsigned int bytes_per_data_element;
 561        enum v4l2_subdev_ir_mode mode;
 562
 563        bool enable;
 564        bool interrupt_enable;
 565        bool shutdown;
 566
 567        bool modulation;
 568        u32 max_pulse_width;
 569        unsigned int carrier_freq;
 570        unsigned int duty_cycle;
 571        bool invert_level;
 572
 573        /* Tx only */
 574        bool invert_carrier_sense;
 575
 576        /* Rx only */
 577        u32 noise_filter_min_width;
 578        unsigned int carrier_range_lower;
 579        unsigned int carrier_range_upper;
 580        u32 resolution;
 581};
 582
 583/**
 584 * struct v4l2_subdev_ir_ops - operations for IR subdevices
 585 *
 586 * @rx_read: Reads received codes or pulse width data.
 587 *      The semantics are similar to a non-blocking read() call.
 588 * @rx_g_parameters: Get the current operating parameters and state of
 589 *      the IR receiver.
 590 * @rx_s_parameters: Set the current operating parameters and state of
 591 *      the IR receiver.  It is recommended to call
 592 *      [rt]x_g_parameters first to fill out the current state, and only change
 593 *      the fields that need to be changed.  Upon return, the actual device
 594 *      operating parameters and state will be returned.  Note that hardware
 595 *      limitations may prevent the actual settings from matching the requested
 596 *      settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz
 597 *      was requested.  An exception is when the shutdown parameter is true.
 598 *      The last used operational parameters will be returned, but the actual
 599 *      state of the hardware be different to minimize power consumption and
 600 *      processing when shutdown is true.
 601 *
 602 * @tx_write: Writes codes or pulse width data for transmission.
 603 *      The semantics are similar to a non-blocking write() call.
 604 * @tx_g_parameters: Get the current operating parameters and state of
 605 *      the IR transmitter.
 606 * @tx_s_parameters: Set the current operating parameters and state of
 607 *      the IR transmitter.  It is recommended to call
 608 *      [rt]x_g_parameters first to fill out the current state, and only change
 609 *      the fields that need to be changed.  Upon return, the actual device
 610 *      operating parameters and state will be returned.  Note that hardware
 611 *      limitations may prevent the actual settings from matching the requested
 612 *      settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz
 613 *      was requested.  An exception is when the shutdown parameter is true.
 614 *      The last used operational parameters will be returned, but the actual
 615 *      state of the hardware be different to minimize power consumption and
 616 *      processing when shutdown is true.
 617 */
 618struct v4l2_subdev_ir_ops {
 619        /* Receiver */
 620        int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count,
 621                                ssize_t *num);
 622
 623        int (*rx_g_parameters)(struct v4l2_subdev *sd,
 624                                struct v4l2_subdev_ir_parameters *params);
 625        int (*rx_s_parameters)(struct v4l2_subdev *sd,
 626                                struct v4l2_subdev_ir_parameters *params);
 627
 628        /* Transmitter */
 629        int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count,
 630                                ssize_t *num);
 631
 632        int (*tx_g_parameters)(struct v4l2_subdev *sd,
 633                                struct v4l2_subdev_ir_parameters *params);
 634        int (*tx_s_parameters)(struct v4l2_subdev *sd,
 635                                struct v4l2_subdev_ir_parameters *params);
 636};
 637
 638/**
 639 * struct v4l2_subdev_pad_config - Used for storing subdev pad information.
 640 *
 641 * @try_fmt: &struct v4l2_mbus_framefmt
 642 * @try_crop: &struct v4l2_rect to be used for crop
 643 * @try_compose: &struct v4l2_rect to be used for compose
 644 *
 645 * This structure only needs to be passed to the pad op if the 'which' field
 646 * of the main argument is set to %V4L2_SUBDEV_FORMAT_TRY. For
 647 * %V4L2_SUBDEV_FORMAT_ACTIVE it is safe to pass %NULL.
 648 */
 649struct v4l2_subdev_pad_config {
 650        struct v4l2_mbus_framefmt try_fmt;
 651        struct v4l2_rect try_crop;
 652        struct v4l2_rect try_compose;
 653};
 654
 655/**
 656 * struct v4l2_subdev_state - Used for storing subdev state information.
 657 *
 658 * @pads: &struct v4l2_subdev_pad_config array
 659 *
 660 * This structure only needs to be passed to the pad op if the 'which' field
 661 * of the main argument is set to %V4L2_SUBDEV_FORMAT_TRY. For
 662 * %V4L2_SUBDEV_FORMAT_ACTIVE it is safe to pass %NULL.
 663 */
 664struct v4l2_subdev_state {
 665        struct v4l2_subdev_pad_config *pads;
 666};
 667
 668/**
 669 * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations
 670 *
 671 * @init_cfg: initialize the pad config to default values
 672 * @enum_mbus_code: callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE() ioctl handler
 673 *                  code.
 674 * @enum_frame_size: callback for VIDIOC_SUBDEV_ENUM_FRAME_SIZE() ioctl handler
 675 *                   code.
 676 *
 677 * @enum_frame_interval: callback for VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL() ioctl
 678 *                       handler code.
 679 *
 680 * @get_fmt: callback for VIDIOC_SUBDEV_G_FMT() ioctl handler code.
 681 *
 682 * @set_fmt: callback for VIDIOC_SUBDEV_S_FMT() ioctl handler code.
 683 *
 684 * @get_selection: callback for VIDIOC_SUBDEV_G_SELECTION() ioctl handler code.
 685 *
 686 * @set_selection: callback for VIDIOC_SUBDEV_S_SELECTION() ioctl handler code.
 687 *
 688 * @get_edid: callback for VIDIOC_SUBDEV_G_EDID() ioctl handler code.
 689 *
 690 * @set_edid: callback for VIDIOC_SUBDEV_S_EDID() ioctl handler code.
 691 *
 692 * @dv_timings_cap: callback for VIDIOC_SUBDEV_DV_TIMINGS_CAP() ioctl handler
 693 *                  code.
 694 *
 695 * @enum_dv_timings: callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS() ioctl handler
 696 *                   code.
 697 *
 698 * @link_validate: used by the media controller code to check if the links
 699 *                 that belongs to a pipeline can be used for stream.
 700 *
 701 * @get_frame_desc: get the current low level media bus frame parameters.
 702 *
 703 * @set_frame_desc: set the low level media bus frame parameters, @fd array
 704 *                  may be adjusted by the subdev driver to device capabilities.
 705 *
 706 * @get_mbus_config: get the media bus configuration of a remote sub-device.
 707 *                   The media bus configuration is usually retrieved from the
 708 *                   firmware interface at sub-device probe time, immediately
 709 *                   applied to the hardware and eventually adjusted by the
 710 *                   driver. Remote sub-devices (usually video receivers) shall
 711 *                   use this operation to query the transmitting end bus
 712 *                   configuration in order to adjust their own one accordingly.
 713 *                   Callers should make sure they get the most up-to-date as
 714 *                   possible configuration from the remote end, likely calling
 715 *                   this operation as close as possible to stream on time. The
 716 *                   operation shall fail if the pad index it has been called on
 717 *                   is not valid or in case of unrecoverable failures.
 718 *
 719 * @set_mbus_config: set the media bus configuration of a remote sub-device.
 720 *                   This operations is intended to allow, in combination with
 721 *                   the get_mbus_config operation, the negotiation of media bus
 722 *                   configuration parameters between media sub-devices. The
 723 *                   operation shall not fail if the requested configuration is
 724 *                   not supported, but the driver shall update the content of
 725 *                   the %config argument to reflect what has been actually
 726 *                   applied to the hardware. The operation shall fail if the
 727 *                   pad index it has been called on is not valid or in case of
 728 *                   unrecoverable failures.
 729 */
 730struct v4l2_subdev_pad_ops {
 731        int (*init_cfg)(struct v4l2_subdev *sd,
 732                        struct v4l2_subdev_state *state);
 733        int (*enum_mbus_code)(struct v4l2_subdev *sd,
 734                              struct v4l2_subdev_state *state,
 735                              struct v4l2_subdev_mbus_code_enum *code);
 736        int (*enum_frame_size)(struct v4l2_subdev *sd,
 737                               struct v4l2_subdev_state *state,
 738                               struct v4l2_subdev_frame_size_enum *fse);
 739        int (*enum_frame_interval)(struct v4l2_subdev *sd,
 740                                   struct v4l2_subdev_state *state,
 741                                   struct v4l2_subdev_frame_interval_enum *fie);
 742        int (*get_fmt)(struct v4l2_subdev *sd,
 743                       struct v4l2_subdev_state *state,
 744                       struct v4l2_subdev_format *format);
 745        int (*set_fmt)(struct v4l2_subdev *sd,
 746                       struct v4l2_subdev_state *state,
 747                       struct v4l2_subdev_format *format);
 748        int (*get_selection)(struct v4l2_subdev *sd,
 749                             struct v4l2_subdev_state *state,
 750                             struct v4l2_subdev_selection *sel);
 751        int (*set_selection)(struct v4l2_subdev *sd,
 752                             struct v4l2_subdev_state *state,
 753                             struct v4l2_subdev_selection *sel);
 754        int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
 755        int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
 756        int (*dv_timings_cap)(struct v4l2_subdev *sd,
 757                              struct v4l2_dv_timings_cap *cap);
 758        int (*enum_dv_timings)(struct v4l2_subdev *sd,
 759                               struct v4l2_enum_dv_timings *timings);
 760#ifdef CONFIG_MEDIA_CONTROLLER
 761        int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link,
 762                             struct v4l2_subdev_format *source_fmt,
 763                             struct v4l2_subdev_format *sink_fmt);
 764#endif /* CONFIG_MEDIA_CONTROLLER */
 765        int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad,
 766                              struct v4l2_mbus_frame_desc *fd);
 767        int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad,
 768                              struct v4l2_mbus_frame_desc *fd);
 769        int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad,
 770                               struct v4l2_mbus_config *config);
 771        int (*set_mbus_config)(struct v4l2_subdev *sd, unsigned int pad,
 772                               struct v4l2_mbus_config *config);
 773};
 774
 775/**
 776 * struct v4l2_subdev_ops - Subdev operations
 777 *
 778 * @core: pointer to &struct v4l2_subdev_core_ops. Can be %NULL
 779 * @tuner: pointer to &struct v4l2_subdev_tuner_ops. Can be %NULL
 780 * @audio: pointer to &struct v4l2_subdev_audio_ops. Can be %NULL
 781 * @video: pointer to &struct v4l2_subdev_video_ops. Can be %NULL
 782 * @vbi: pointer to &struct v4l2_subdev_vbi_ops. Can be %NULL
 783 * @ir: pointer to &struct v4l2_subdev_ir_ops. Can be %NULL
 784 * @sensor: pointer to &struct v4l2_subdev_sensor_ops. Can be %NULL
 785 * @pad: pointer to &struct v4l2_subdev_pad_ops. Can be %NULL
 786 */
 787struct v4l2_subdev_ops {
 788        const struct v4l2_subdev_core_ops       *core;
 789        const struct v4l2_subdev_tuner_ops      *tuner;
 790        const struct v4l2_subdev_audio_ops      *audio;
 791        const struct v4l2_subdev_video_ops      *video;
 792        const struct v4l2_subdev_vbi_ops        *vbi;
 793        const struct v4l2_subdev_ir_ops         *ir;
 794        const struct v4l2_subdev_sensor_ops     *sensor;
 795        const struct v4l2_subdev_pad_ops        *pad;
 796};
 797
 798/**
 799 * struct v4l2_subdev_internal_ops - V4L2 subdev internal ops
 800 *
 801 * @registered: called when this subdev is registered. When called the v4l2_dev
 802 *      field is set to the correct v4l2_device.
 803 *
 804 * @unregistered: called when this subdev is unregistered. When called the
 805 *      v4l2_dev field is still set to the correct v4l2_device.
 806 *
 807 * @open: called when the subdev device node is opened by an application.
 808 *
 809 * @close: called when the subdev device node is closed. Please note that
 810 *      it is possible for @close to be called after @unregistered!
 811 *
 812 * @release: called when the last user of the subdev device is gone. This
 813 *      happens after the @unregistered callback and when the last open
 814 *      filehandle to the v4l-subdevX device node was closed. If no device
 815 *      node was created for this sub-device, then the @release callback
 816 *      is called right after the @unregistered callback.
 817 *      The @release callback is typically used to free the memory containing
 818 *      the v4l2_subdev structure. It is almost certainly required for any
 819 *      sub-device that sets the V4L2_SUBDEV_FL_HAS_DEVNODE flag.
 820 *
 821 * .. note::
 822 *      Never call this from drivers, only the v4l2 framework can call
 823 *      these ops.
 824 */
 825struct v4l2_subdev_internal_ops {
 826        int (*registered)(struct v4l2_subdev *sd);
 827        void (*unregistered)(struct v4l2_subdev *sd);
 828        int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
 829        int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
 830        void (*release)(struct v4l2_subdev *sd);
 831};
 832
 833#define V4L2_SUBDEV_NAME_SIZE 32
 834
 835/* Set this flag if this subdev is a i2c device. */
 836#define V4L2_SUBDEV_FL_IS_I2C                   (1U << 0)
 837/* Set this flag if this subdev is a spi device. */
 838#define V4L2_SUBDEV_FL_IS_SPI                   (1U << 1)
 839/* Set this flag if this subdev needs a device node. */
 840#define V4L2_SUBDEV_FL_HAS_DEVNODE              (1U << 2)
 841/*
 842 * Set this flag if this subdev generates events.
 843 * Note controls can send events, thus drivers exposing controls
 844 * should set this flag.
 845 */
 846#define V4L2_SUBDEV_FL_HAS_EVENTS               (1U << 3)
 847
 848struct regulator_bulk_data;
 849
 850/**
 851 * struct v4l2_subdev_platform_data - regulators config struct
 852 *
 853 * @regulators: Optional regulators used to power on/off the subdevice
 854 * @num_regulators: Number of regululators
 855 * @host_priv: Per-subdevice data, specific for a certain video host device
 856 */
 857struct v4l2_subdev_platform_data {
 858        struct regulator_bulk_data *regulators;
 859        int num_regulators;
 860
 861        void *host_priv;
 862};
 863
 864/**
 865 * struct v4l2_subdev - describes a V4L2 sub-device
 866 *
 867 * @entity: pointer to &struct media_entity
 868 * @list: List of sub-devices
 869 * @owner: The owner is the same as the driver's &struct device owner.
 870 * @owner_v4l2_dev: true if the &sd->owner matches the owner of @v4l2_dev->dev
 871 *      owner. Initialized by v4l2_device_register_subdev().
 872 * @flags: subdev flags. Can be:
 873 *   %V4L2_SUBDEV_FL_IS_I2C - Set this flag if this subdev is a i2c device;
 874 *   %V4L2_SUBDEV_FL_IS_SPI - Set this flag if this subdev is a spi device;
 875 *   %V4L2_SUBDEV_FL_HAS_DEVNODE - Set this flag if this subdev needs a
 876 *   device node;
 877 *   %V4L2_SUBDEV_FL_HAS_EVENTS -  Set this flag if this subdev generates
 878 *   events.
 879 *
 880 * @v4l2_dev: pointer to struct &v4l2_device
 881 * @ops: pointer to struct &v4l2_subdev_ops
 882 * @internal_ops: pointer to struct &v4l2_subdev_internal_ops.
 883 *      Never call these internal ops from within a driver!
 884 * @ctrl_handler: The control handler of this subdev. May be NULL.
 885 * @name: Name of the sub-device. Please notice that the name must be unique.
 886 * @grp_id: can be used to group similar subdevs. Value is driver-specific
 887 * @dev_priv: pointer to private data
 888 * @host_priv: pointer to private data used by the device where the subdev
 889 *      is attached.
 890 * @devnode: subdev device node
 891 * @dev: pointer to the physical device, if any
 892 * @fwnode: The fwnode_handle of the subdev, usually the same as
 893 *          either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL).
 894 * @async_list: Links this subdev to a global subdev_list or @notifier->done
 895 *      list.
 896 * @asd: Pointer to respective &struct v4l2_async_subdev.
 897 * @notifier: Pointer to the managing notifier.
 898 * @subdev_notifier: A sub-device notifier implicitly registered for the sub-
 899 *                   device using v4l2_async_register_subdev_sensor().
 900 * @pdata: common part of subdevice platform data
 901 *
 902 * Each instance of a subdev driver should create this struct, either
 903 * stand-alone or embedded in a larger struct.
 904 *
 905 * This structure should be initialized by v4l2_subdev_init() or one of
 906 * its variants: v4l2_spi_subdev_init(), v4l2_i2c_subdev_init().
 907 */
 908struct v4l2_subdev {
 909#if defined(CONFIG_MEDIA_CONTROLLER)
 910        struct media_entity entity;
 911#endif
 912        struct list_head list;
 913        struct module *owner;
 914        bool owner_v4l2_dev;
 915        u32 flags;
 916        struct v4l2_device *v4l2_dev;
 917        const struct v4l2_subdev_ops *ops;
 918        const struct v4l2_subdev_internal_ops *internal_ops;
 919        struct v4l2_ctrl_handler *ctrl_handler;
 920        char name[V4L2_SUBDEV_NAME_SIZE];
 921        u32 grp_id;
 922        void *dev_priv;
 923        void *host_priv;
 924        struct video_device *devnode;
 925        struct device *dev;
 926        struct fwnode_handle *fwnode;
 927        struct list_head async_list;
 928        struct v4l2_async_subdev *asd;
 929        struct v4l2_async_notifier *notifier;
 930        struct v4l2_async_notifier *subdev_notifier;
 931        struct v4l2_subdev_platform_data *pdata;
 932};
 933
 934
 935/**
 936 * media_entity_to_v4l2_subdev - Returns a &struct v4l2_subdev from
 937 *    the &struct media_entity embedded in it.
 938 *
 939 * @ent: pointer to &struct media_entity.
 940 */
 941#define media_entity_to_v4l2_subdev(ent)                                \
 942({                                                                      \
 943        typeof(ent) __me_sd_ent = (ent);                                \
 944                                                                        \
 945        __me_sd_ent ?                                                   \
 946                container_of(__me_sd_ent, struct v4l2_subdev, entity) : \
 947                NULL;                                                   \
 948})
 949
 950/**
 951 * vdev_to_v4l2_subdev - Returns a &struct v4l2_subdev from
 952 *      the &struct video_device embedded on it.
 953 *
 954 * @vdev: pointer to &struct video_device
 955 */
 956#define vdev_to_v4l2_subdev(vdev) \
 957        ((struct v4l2_subdev *)video_get_drvdata(vdev))
 958
 959/**
 960 * struct v4l2_subdev_fh - Used for storing subdev information per file handle
 961 *
 962 * @vfh: pointer to &struct v4l2_fh
 963 * @state: pointer to &struct v4l2_subdev_state
 964 * @owner: module pointer to the owner of this file handle
 965 */
 966struct v4l2_subdev_fh {
 967        struct v4l2_fh vfh;
 968        struct module *owner;
 969#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
 970        struct v4l2_subdev_state *state;
 971#endif
 972};
 973
 974/**
 975 * to_v4l2_subdev_fh - Returns a &struct v4l2_subdev_fh from
 976 *      the &struct v4l2_fh embedded on it.
 977 *
 978 * @fh: pointer to &struct v4l2_fh
 979 */
 980#define to_v4l2_subdev_fh(fh)   \
 981        container_of(fh, struct v4l2_subdev_fh, vfh)
 982
 983#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
 984
 985/**
 986 * v4l2_subdev_get_try_format - ancillary routine to call
 987 *      &struct v4l2_subdev_pad_config->try_fmt
 988 *
 989 * @sd: pointer to &struct v4l2_subdev
 990 * @state: pointer to &struct v4l2_subdev_state
 991 * @pad: index of the pad in the &struct v4l2_subdev_state->pads array
 992 */
 993static inline struct v4l2_mbus_framefmt *
 994v4l2_subdev_get_try_format(struct v4l2_subdev *sd,
 995                           struct v4l2_subdev_state *state,
 996                           unsigned int pad)
 997{
 998        if (WARN_ON(pad >= sd->entity.num_pads))
 999                pad = 0;
1000        return &state->pads[pad].try_fmt;
1001}
1002
1003/**
1004 * v4l2_subdev_get_try_crop - ancillary routine to call
1005 *      &struct v4l2_subdev_pad_config->try_crop
1006 *
1007 * @sd: pointer to &struct v4l2_subdev
1008 * @state: pointer to &struct v4l2_subdev_state.
1009 * @pad: index of the pad in the &struct v4l2_subdev_state->pads array.
1010 */
1011static inline struct v4l2_rect *
1012v4l2_subdev_get_try_crop(struct v4l2_subdev *sd,
1013                         struct v4l2_subdev_state *state,
1014                         unsigned int pad)
1015{
1016        if (WARN_ON(pad >= sd->entity.num_pads))
1017                pad = 0;
1018        return &state->pads[pad].try_crop;
1019}
1020
1021/**
1022 * v4l2_subdev_get_try_compose - ancillary routine to call
1023 *      &struct v4l2_subdev_pad_config->try_compose
1024 *
1025 * @sd: pointer to &struct v4l2_subdev
1026 * @state: pointer to &struct v4l2_subdev_state.
1027 * @pad: index of the pad in the &struct v4l2_subdev_state->pads array.
1028 */
1029static inline struct v4l2_rect *
1030v4l2_subdev_get_try_compose(struct v4l2_subdev *sd,
1031                            struct v4l2_subdev_state *state,
1032                            unsigned int pad)
1033{
1034        if (WARN_ON(pad >= sd->entity.num_pads))
1035                pad = 0;
1036        return &state->pads[pad].try_compose;
1037}
1038
1039#endif
1040
1041extern const struct v4l2_file_operations v4l2_subdev_fops;
1042
1043/**
1044 * v4l2_set_subdevdata - Sets V4L2 dev private device data
1045 *
1046 * @sd: pointer to &struct v4l2_subdev
1047 * @p: pointer to the private device data to be stored.
1048 */
1049static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
1050{
1051        sd->dev_priv = p;
1052}
1053
1054/**
1055 * v4l2_get_subdevdata - Gets V4L2 dev private device data
1056 *
1057 * @sd: pointer to &struct v4l2_subdev
1058 *
1059 * Returns the pointer to the private device data to be stored.
1060 */
1061static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)
1062{
1063        return sd->dev_priv;
1064}
1065
1066/**
1067 * v4l2_set_subdev_hostdata - Sets V4L2 dev private host data
1068 *
1069 * @sd: pointer to &struct v4l2_subdev
1070 * @p: pointer to the private data to be stored.
1071 */
1072static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p)
1073{
1074        sd->host_priv = p;
1075}
1076
1077/**
1078 * v4l2_get_subdev_hostdata - Gets V4L2 dev private data
1079 *
1080 * @sd: pointer to &struct v4l2_subdev
1081 *
1082 * Returns the pointer to the private host data to be stored.
1083 */
1084static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
1085{
1086        return sd->host_priv;
1087}
1088
1089#ifdef CONFIG_MEDIA_CONTROLLER
1090
1091/**
1092 * v4l2_subdev_get_fwnode_pad_1_to_1 - Get pad number from a subdev fwnode
1093 *                                     endpoint, assuming 1:1 port:pad
1094 *
1095 * @entity: Pointer to the subdev entity
1096 * @endpoint: Pointer to a parsed fwnode endpoint
1097 *
1098 * This function can be used as the .get_fwnode_pad operation for
1099 * subdevices that map port numbers and pad indexes 1:1. If the endpoint
1100 * is owned by the subdevice, the function returns the endpoint port
1101 * number.
1102 *
1103 * Returns the endpoint port number on success or a negative error code.
1104 */
1105int v4l2_subdev_get_fwnode_pad_1_to_1(struct media_entity *entity,
1106                                      struct fwnode_endpoint *endpoint);
1107
1108/**
1109 * v4l2_subdev_link_validate_default - validates a media link
1110 *
1111 * @sd: pointer to &struct v4l2_subdev
1112 * @link: pointer to &struct media_link
1113 * @source_fmt: pointer to &struct v4l2_subdev_format
1114 * @sink_fmt: pointer to &struct v4l2_subdev_format
1115 *
1116 * This function ensures that width, height and the media bus pixel
1117 * code are equal on both source and sink of the link.
1118 */
1119int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
1120                                      struct media_link *link,
1121                                      struct v4l2_subdev_format *source_fmt,
1122                                      struct v4l2_subdev_format *sink_fmt);
1123
1124/**
1125 * v4l2_subdev_link_validate - validates a media link
1126 *
1127 * @link: pointer to &struct media_link
1128 *
1129 * This function calls the subdev's link_validate ops to validate
1130 * if a media link is valid for streaming. It also internally
1131 * calls v4l2_subdev_link_validate_default() to ensure that
1132 * width, height and the media bus pixel code are equal on both
1133 * source and sink of the link.
1134 */
1135int v4l2_subdev_link_validate(struct media_link *link);
1136
1137/**
1138 * v4l2_subdev_alloc_state - allocate v4l2_subdev_state
1139 *
1140 * @sd: pointer to &struct v4l2_subdev for which the state is being allocated.
1141 *
1142 * Must call v4l2_subdev_free_state() when state is no longer needed.
1143 */
1144struct v4l2_subdev_state *v4l2_subdev_alloc_state(struct v4l2_subdev *sd);
1145
1146/**
1147 * v4l2_subdev_free_state - free a v4l2_subdev_state
1148 *
1149 * @state: v4l2_subdev_state to be freed.
1150 */
1151void v4l2_subdev_free_state(struct v4l2_subdev_state *state);
1152
1153#endif /* CONFIG_MEDIA_CONTROLLER */
1154
1155/**
1156 * v4l2_subdev_init - initializes the sub-device struct
1157 *
1158 * @sd: pointer to the &struct v4l2_subdev to be initialized
1159 * @ops: pointer to &struct v4l2_subdev_ops.
1160 */
1161void v4l2_subdev_init(struct v4l2_subdev *sd,
1162                      const struct v4l2_subdev_ops *ops);
1163
1164extern const struct v4l2_subdev_ops v4l2_subdev_call_wrappers;
1165
1166/**
1167 * v4l2_subdev_call - call an operation of a v4l2_subdev.
1168 *
1169 * @sd: pointer to the &struct v4l2_subdev
1170 * @o: name of the element at &struct v4l2_subdev_ops that contains @f.
1171 *     Each element there groups a set of callbacks functions.
1172 * @f: callback function to be called.
1173 *     The callback functions are defined in groups, according to
1174 *     each element at &struct v4l2_subdev_ops.
1175 * @args: arguments for @f.
1176 *
1177 * Example: err = v4l2_subdev_call(sd, video, s_std, norm);
1178 */
1179#define v4l2_subdev_call(sd, o, f, args...)                             \
1180        ({                                                              \
1181                struct v4l2_subdev *__sd = (sd);                        \
1182                int __result;                                           \
1183                if (!__sd)                                              \
1184                        __result = -ENODEV;                             \
1185                else if (!(__sd->ops->o && __sd->ops->o->f))            \
1186                        __result = -ENOIOCTLCMD;                        \
1187                else if (v4l2_subdev_call_wrappers.o &&                 \
1188                         v4l2_subdev_call_wrappers.o->f)                \
1189                        __result = v4l2_subdev_call_wrappers.o->f(      \
1190                                                        __sd, ##args);  \
1191                else                                                    \
1192                        __result = __sd->ops->o->f(__sd, ##args);       \
1193                __result;                                               \
1194        })
1195
1196/**
1197 * v4l2_subdev_has_op - Checks if a subdev defines a certain operation.
1198 *
1199 * @sd: pointer to the &struct v4l2_subdev
1200 * @o: The group of callback functions in &struct v4l2_subdev_ops
1201 * which @f is a part of.
1202 * @f: callback function to be checked for its existence.
1203 */
1204#define v4l2_subdev_has_op(sd, o, f) \
1205        ((sd)->ops->o && (sd)->ops->o->f)
1206
1207/**
1208 * v4l2_subdev_notify_event() - Delivers event notification for subdevice
1209 * @sd: The subdev for which to deliver the event
1210 * @ev: The event to deliver
1211 *
1212 * Will deliver the specified event to all userspace event listeners which are
1213 * subscribed to the v42l subdev event queue as well as to the bridge driver
1214 * using the notify callback. The notification type for the notify callback
1215 * will be %V4L2_DEVICE_NOTIFY_EVENT.
1216 */
1217void v4l2_subdev_notify_event(struct v4l2_subdev *sd,
1218                              const struct v4l2_event *ev);
1219
1220#endif
1221