Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *  V4L2 sub-device support header.
0004  *
0005  *  Copyright (C) 2008  Hans Verkuil <hverkuil@xs4all.nl>
0006  */
0007 
0008 #ifndef _V4L2_SUBDEV_H
0009 #define _V4L2_SUBDEV_H
0010 
0011 #include <linux/types.h>
0012 #include <linux/v4l2-subdev.h>
0013 #include <media/media-entity.h>
0014 #include <media/v4l2-async.h>
0015 #include <media/v4l2-common.h>
0016 #include <media/v4l2-dev.h>
0017 #include <media/v4l2-fh.h>
0018 #include <media/v4l2-mediabus.h>
0019 
0020 /* generic v4l2_device notify callback notification values */
0021 #define V4L2_SUBDEV_IR_RX_NOTIFY        _IOW('v', 0, u32)
0022 #define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ  0x00000001
0023 #define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED    0x00000002
0024 #define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN   0x00000004
0025 #define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN   0x00000008
0026 
0027 #define V4L2_SUBDEV_IR_TX_NOTIFY        _IOW('v', 1, u32)
0028 #define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ  0x00000001
0029 
0030 #define V4L2_DEVICE_NOTIFY_EVENT        _IOW('v', 2, struct v4l2_event)
0031 
0032 struct v4l2_device;
0033 struct v4l2_ctrl_handler;
0034 struct v4l2_event;
0035 struct v4l2_event_subscription;
0036 struct v4l2_fh;
0037 struct v4l2_subdev;
0038 struct v4l2_subdev_fh;
0039 struct tuner_setup;
0040 struct v4l2_mbus_frame_desc;
0041 
0042 /**
0043  * struct v4l2_decode_vbi_line - used to decode_vbi_line
0044  *
0045  * @is_second_field: Set to 0 for the first (odd) field;
0046  *  set to 1 for the second (even) field.
0047  * @p: Pointer to the sliced VBI data from the decoder. On exit, points to
0048  *  the start of the payload.
0049  * @line: Line number of the sliced VBI data (1-23)
0050  * @type: VBI service type (V4L2_SLICED_*). 0 if no service found
0051  */
0052 struct v4l2_decode_vbi_line {
0053     u32 is_second_field;
0054     u8 *p;
0055     u32 line;
0056     u32 type;
0057 };
0058 
0059 /*
0060  * Sub-devices are devices that are connected somehow to the main bridge
0061  * device. These devices are usually audio/video muxers/encoders/decoders or
0062  * sensors and webcam controllers.
0063  *
0064  * Usually these devices are controlled through an i2c bus, but other buses
0065  * may also be used.
0066  *
0067  * The v4l2_subdev struct provides a way of accessing these devices in a
0068  * generic manner. Most operations that these sub-devices support fall in
0069  * a few categories: core ops, audio ops, video ops and tuner ops.
0070  *
0071  * More categories can be added if needed, although this should remain a
0072  * limited set (no more than approx. 8 categories).
0073  *
0074  * Each category has its own set of ops that subdev drivers can implement.
0075  *
0076  * A subdev driver can leave the pointer to the category ops NULL if
0077  * it does not implement them (e.g. an audio subdev will generally not
0078  * implement the video category ops). The exception is the core category:
0079  * this must always be present.
0080  *
0081  * These ops are all used internally so it is no problem to change, remove
0082  * or add ops or move ops from one to another category. Currently these
0083  * ops are based on the original ioctls, but since ops are not limited to
0084  * one argument there is room for improvement here once all i2c subdev
0085  * drivers are converted to use these ops.
0086  */
0087 
0088 /*
0089  * Core ops: it is highly recommended to implement at least these ops:
0090  *
0091  * log_status
0092  * g_register
0093  * s_register
0094  *
0095  * This provides basic debugging support.
0096  *
0097  * The ioctl ops is meant for generic ioctl-like commands. Depending on
0098  * the use-case it might be better to use subdev-specific ops (currently
0099  * not yet implemented) since ops provide proper type-checking.
0100  */
0101 
0102 /**
0103  * enum v4l2_subdev_io_pin_bits - Subdevice external IO pin configuration
0104  *  bits
0105  *
0106  * @V4L2_SUBDEV_IO_PIN_DISABLE: disables a pin config. ENABLE assumed.
0107  * @V4L2_SUBDEV_IO_PIN_OUTPUT: set it if pin is an output.
0108  * @V4L2_SUBDEV_IO_PIN_INPUT: set it if pin is an input.
0109  * @V4L2_SUBDEV_IO_PIN_SET_VALUE: to set the output value via
0110  *                &struct v4l2_subdev_io_pin_config->value.
0111  * @V4L2_SUBDEV_IO_PIN_ACTIVE_LOW: pin active is bit 0.
0112  *                 Otherwise, ACTIVE HIGH is assumed.
0113  */
0114 enum v4l2_subdev_io_pin_bits {
0115     V4L2_SUBDEV_IO_PIN_DISABLE  = 0,
0116     V4L2_SUBDEV_IO_PIN_OUTPUT   = 1,
0117     V4L2_SUBDEV_IO_PIN_INPUT    = 2,
0118     V4L2_SUBDEV_IO_PIN_SET_VALUE    = 3,
0119     V4L2_SUBDEV_IO_PIN_ACTIVE_LOW   = 4,
0120 };
0121 
0122 /**
0123  * struct v4l2_subdev_io_pin_config - Subdevice external IO pin configuration
0124  *
0125  * @flags: bitmask with flags for this pin's config, whose bits are defined by
0126  *     &enum v4l2_subdev_io_pin_bits.
0127  * @pin: Chip external IO pin to configure
0128  * @function: Internal signal pad/function to route to IO pin
0129  * @value: Initial value for pin - e.g. GPIO output value
0130  * @strength: Pin drive strength
0131  */
0132 struct v4l2_subdev_io_pin_config {
0133     u32 flags;
0134     u8 pin;
0135     u8 function;
0136     u8 value;
0137     u8 strength;
0138 };
0139 
0140 /**
0141  * struct v4l2_subdev_core_ops - Define core ops callbacks for subdevs
0142  *
0143  * @log_status: callback for VIDIOC_LOG_STATUS() ioctl handler code.
0144  *
0145  * @s_io_pin_config: configure one or more chip I/O pins for chips that
0146  *  multiplex different internal signal pads out to IO pins.  This function
0147  *  takes a pointer to an array of 'n' pin configuration entries, one for
0148  *  each pin being configured.  This function could be called at times
0149  *  other than just subdevice initialization.
0150  *
0151  * @init: initialize the sensor registers to some sort of reasonable default
0152  *  values. Do not use for new drivers and should be removed in existing
0153  *  drivers.
0154  *
0155  * @load_fw: load firmware.
0156  *
0157  * @reset: generic reset command. The argument selects which subsystems to
0158  *  reset. Passing 0 will always reset the whole chip. Do not use for new
0159  *  drivers without discussing this first on the linux-media mailinglist.
0160  *  There should be no reason normally to reset a device.
0161  *
0162  * @s_gpio: set GPIO pins. Very simple right now, might need to be extended with
0163  *  a direction argument if needed.
0164  *
0165  * @command: called by in-kernel drivers in order to call functions internal
0166  *     to subdev drivers driver that have a separate callback.
0167  *
0168  * @ioctl: called at the end of ioctl() syscall handler at the V4L2 core.
0169  *     used to provide support for private ioctls used on the driver.
0170  *
0171  * @compat_ioctl32: called when a 32 bits application uses a 64 bits Kernel,
0172  *          in order to fix data passed from/to userspace.
0173  *
0174  * @g_register: callback for VIDIOC_DBG_G_REGISTER() ioctl handler code.
0175  *
0176  * @s_register: callback for VIDIOC_DBG_S_REGISTER() ioctl handler code.
0177  *
0178  * @s_power: puts subdevice in power saving mode (on == 0) or normal operation
0179  *  mode (on == 1).
0180  *
0181  * @interrupt_service_routine: Called by the bridge chip's interrupt service
0182  *  handler, when an interrupt status has be raised due to this subdev,
0183  *  so that this subdev can handle the details.  It may schedule work to be
0184  *  performed later.  It must not sleep. **Called from an IRQ context**.
0185  *
0186  * @subscribe_event: used by the drivers to request the control framework that
0187  *           for it to be warned when the value of a control changes.
0188  *
0189  * @unsubscribe_event: remove event subscription from the control framework.
0190  */
0191 struct v4l2_subdev_core_ops {
0192     int (*log_status)(struct v4l2_subdev *sd);
0193     int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n,
0194                       struct v4l2_subdev_io_pin_config *pincfg);
0195     int (*init)(struct v4l2_subdev *sd, u32 val);
0196     int (*load_fw)(struct v4l2_subdev *sd);
0197     int (*reset)(struct v4l2_subdev *sd, u32 val);
0198     int (*s_gpio)(struct v4l2_subdev *sd, u32 val);
0199     long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
0200     long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
0201 #ifdef CONFIG_COMPAT
0202     long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,
0203                    unsigned long arg);
0204 #endif
0205 #ifdef CONFIG_VIDEO_ADV_DEBUG
0206     int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg);
0207     int (*s_register)(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg);
0208 #endif
0209     int (*s_power)(struct v4l2_subdev *sd, int on);
0210     int (*interrupt_service_routine)(struct v4l2_subdev *sd,
0211                         u32 status, bool *handled);
0212     int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
0213                    struct v4l2_event_subscription *sub);
0214     int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
0215                  struct v4l2_event_subscription *sub);
0216 };
0217 
0218 /**
0219  * struct v4l2_subdev_tuner_ops - Callbacks used when v4l device was opened
0220  *  in radio mode.
0221  *
0222  * @standby: puts the tuner in standby mode. It will be woken up
0223  *       automatically the next time it is used.
0224  *
0225  * @s_radio: callback that switches the tuner to radio mode.
0226  *       drivers should explicitly call it when a tuner ops should
0227  *       operate on radio mode, before being able to handle it.
0228  *       Used on devices that have both AM/FM radio receiver and TV.
0229  *
0230  * @s_frequency: callback for VIDIOC_S_FREQUENCY() ioctl handler code.
0231  *
0232  * @g_frequency: callback for VIDIOC_G_FREQUENCY() ioctl handler code.
0233  *       freq->type must be filled in. Normally done by video_ioctl2()
0234  *       or the bridge driver.
0235  *
0236  * @enum_freq_bands: callback for VIDIOC_ENUM_FREQ_BANDS() ioctl handler code.
0237  *
0238  * @g_tuner: callback for VIDIOC_G_TUNER() ioctl handler code.
0239  *
0240  * @s_tuner: callback for VIDIOC_S_TUNER() ioctl handler code. @vt->type must be
0241  *       filled in. Normally done by video_ioctl2 or the
0242  *       bridge driver.
0243  *
0244  * @g_modulator: callback for VIDIOC_G_MODULATOR() ioctl handler code.
0245  *
0246  * @s_modulator: callback for VIDIOC_S_MODULATOR() ioctl handler code.
0247  *
0248  * @s_type_addr: sets tuner type and its I2C addr.
0249  *
0250  * @s_config: sets tda9887 specific stuff, like port1, port2 and qss
0251  *
0252  * .. note::
0253  *
0254  *  On devices that have both AM/FM and TV, it is up to the driver
0255  *  to explicitly call s_radio when the tuner should be switched to
0256  *  radio mode, before handling other &struct v4l2_subdev_tuner_ops
0257  *  that would require it. An example of such usage is::
0258  *
0259  *    static void s_frequency(void *priv, const struct v4l2_frequency *f)
0260  *    {
0261  *      ...
0262  *      if (f.type == V4L2_TUNER_RADIO)
0263  *          v4l2_device_call_all(v4l2_dev, 0, tuner, s_radio);
0264  *      ...
0265  *      v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency);
0266  *    }
0267  */
0268 struct v4l2_subdev_tuner_ops {
0269     int (*standby)(struct v4l2_subdev *sd);
0270     int (*s_radio)(struct v4l2_subdev *sd);
0271     int (*s_frequency)(struct v4l2_subdev *sd, const struct v4l2_frequency *freq);
0272     int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq);
0273     int (*enum_freq_bands)(struct v4l2_subdev *sd, struct v4l2_frequency_band *band);
0274     int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
0275     int (*s_tuner)(struct v4l2_subdev *sd, const struct v4l2_tuner *vt);
0276     int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm);
0277     int (*s_modulator)(struct v4l2_subdev *sd, const struct v4l2_modulator *vm);
0278     int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type);
0279     int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config);
0280 };
0281 
0282 /**
0283  * struct v4l2_subdev_audio_ops - Callbacks used for audio-related settings
0284  *
0285  * @s_clock_freq: set the frequency (in Hz) of the audio clock output.
0286  *  Used to slave an audio processor to the video decoder, ensuring that
0287  *  audio and video remain synchronized. Usual values for the frequency
0288  *  are 48000, 44100 or 32000 Hz. If the frequency is not supported, then
0289  *  -EINVAL is returned.
0290  *
0291  * @s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard
0292  *  way to select I2S clock used by driving digital audio streams at some
0293  *  board designs. Usual values for the frequency are 1024000 and 2048000.
0294  *  If the frequency is not supported, then %-EINVAL is returned.
0295  *
0296  * @s_routing: used to define the input and/or output pins of an audio chip,
0297  *  and any additional configuration data.
0298  *  Never attempt to use user-level input IDs (e.g. Composite, S-Video,
0299  *  Tuner) at this level. An i2c device shouldn't know about whether an
0300  *  input pin is connected to a Composite connector, become on another
0301  *  board or platform it might be connected to something else entirely.
0302  *  The calling driver is responsible for mapping a user-level input to
0303  *  the right pins on the i2c device.
0304  *
0305  * @s_stream: used to notify the audio code that stream will start or has
0306  *  stopped.
0307  */
0308 struct v4l2_subdev_audio_ops {
0309     int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
0310     int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
0311     int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
0312     int (*s_stream)(struct v4l2_subdev *sd, int enable);
0313 };
0314 
0315 /**
0316  * struct v4l2_mbus_frame_desc_entry_csi2
0317  *
0318  * @vc: CSI-2 virtual channel
0319  * @dt: CSI-2 data type ID
0320  */
0321 struct v4l2_mbus_frame_desc_entry_csi2 {
0322     u8 vc;
0323     u8 dt;
0324 };
0325 
0326 /**
0327  * enum v4l2_mbus_frame_desc_flags - media bus frame description flags
0328  *
0329  * @V4L2_MBUS_FRAME_DESC_FL_LEN_MAX:
0330  *  Indicates that &struct v4l2_mbus_frame_desc_entry->length field
0331  *  specifies maximum data length.
0332  * @V4L2_MBUS_FRAME_DESC_FL_BLOB:
0333  *  Indicates that the format does not have line offsets, i.e.
0334  *  the receiver should use 1D DMA.
0335  */
0336 enum v4l2_mbus_frame_desc_flags {
0337     V4L2_MBUS_FRAME_DESC_FL_LEN_MAX = BIT(0),
0338     V4L2_MBUS_FRAME_DESC_FL_BLOB    = BIT(1),
0339 };
0340 
0341 /**
0342  * struct v4l2_mbus_frame_desc_entry - media bus frame description structure
0343  *
0344  * @flags:  bitmask flags, as defined by &enum v4l2_mbus_frame_desc_flags.
0345  * @pixelcode:  media bus pixel code, valid if @flags
0346  *      %FRAME_DESC_FL_BLOB is not set.
0347  * @length: number of octets per frame, valid if @flags
0348  *      %V4L2_MBUS_FRAME_DESC_FL_LEN_MAX is set.
0349  * @bus:    Bus-specific frame descriptor parameters
0350  * @bus.csi2:   CSI-2-specific bus configuration
0351  */
0352 struct v4l2_mbus_frame_desc_entry {
0353     enum v4l2_mbus_frame_desc_flags flags;
0354     u32 pixelcode;
0355     u32 length;
0356     union {
0357         struct v4l2_mbus_frame_desc_entry_csi2 csi2;
0358     } bus;
0359 };
0360 
0361 #define V4L2_FRAME_DESC_ENTRY_MAX   4
0362 
0363 /**
0364  * enum v4l2_mbus_frame_desc_type - media bus frame description type
0365  *
0366  * @V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED:
0367  *  Undefined frame desc type. Drivers should not use this, it is
0368  *  for backwards compatibility.
0369  * @V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL:
0370  *  Parallel media bus.
0371  * @V4L2_MBUS_FRAME_DESC_TYPE_CSI2:
0372  *  CSI-2 media bus. Frame desc parameters must be set in
0373  *  &struct v4l2_mbus_frame_desc_entry->csi2.
0374  */
0375 enum v4l2_mbus_frame_desc_type {
0376     V4L2_MBUS_FRAME_DESC_TYPE_UNDEFINED = 0,
0377     V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL,
0378     V4L2_MBUS_FRAME_DESC_TYPE_CSI2,
0379 };
0380 
0381 /**
0382  * struct v4l2_mbus_frame_desc - media bus data frame description
0383  * @type: type of the bus (enum v4l2_mbus_frame_desc_type)
0384  * @entry: frame descriptors array
0385  * @num_entries: number of entries in @entry array
0386  */
0387 struct v4l2_mbus_frame_desc {
0388     enum v4l2_mbus_frame_desc_type type;
0389     struct v4l2_mbus_frame_desc_entry entry[V4L2_FRAME_DESC_ENTRY_MAX];
0390     unsigned short num_entries;
0391 };
0392 
0393 /**
0394  * enum v4l2_subdev_pre_streamon_flags - Flags for pre_streamon subdev core op
0395  *
0396  * @V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP: Set the transmitter to either LP-11
0397  *  or LP-111 mode before call to s_stream().
0398  */
0399 enum v4l2_subdev_pre_streamon_flags {
0400     V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP = BIT(0),
0401 };
0402 
0403 /**
0404  * struct v4l2_subdev_video_ops - Callbacks used when v4l device was opened
0405  *                in video mode.
0406  *
0407  * @s_routing: see s_routing in audio_ops, except this version is for video
0408  *  devices.
0409  *
0410  * @s_crystal_freq: sets the frequency of the crystal used to generate the
0411  *  clocks in Hz. An extra flags field allows device specific configuration
0412  *  regarding clock frequency dividers, etc. If not used, then set flags
0413  *  to 0. If the frequency is not supported, then -EINVAL is returned.
0414  *
0415  * @g_std: callback for VIDIOC_G_STD() ioctl handler code.
0416  *
0417  * @s_std: callback for VIDIOC_S_STD() ioctl handler code.
0418  *
0419  * @s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by
0420  *  video input devices.
0421  *
0422  * @g_std_output: get current standard for video OUTPUT devices. This is ignored
0423  *  by video input devices.
0424  *
0425  * @querystd: callback for VIDIOC_QUERYSTD() ioctl handler code.
0426  *
0427  * @g_tvnorms: get &v4l2_std_id with all standards supported by the video
0428  *  CAPTURE device. This is ignored by video output devices.
0429  *
0430  * @g_tvnorms_output: get v4l2_std_id with all standards supported by the video
0431  *  OUTPUT device. This is ignored by video capture devices.
0432  *
0433  * @g_input_status: get input status. Same as the status field in the
0434  *  &struct v4l2_input
0435  *
0436  * @s_stream: used to notify the driver that a video stream will start or has
0437  *  stopped.
0438  *
0439  * @g_pixelaspect: callback to return the pixelaspect ratio.
0440  *
0441  * @g_frame_interval: callback for VIDIOC_SUBDEV_G_FRAME_INTERVAL()
0442  *            ioctl handler code.
0443  *
0444  * @s_frame_interval: callback for VIDIOC_SUBDEV_S_FRAME_INTERVAL()
0445  *            ioctl handler code.
0446  *
0447  * @s_dv_timings: Set custom dv timings in the sub device. This is used
0448  *  when sub device is capable of setting detailed timing information
0449  *  in the hardware to generate/detect the video signal.
0450  *
0451  * @g_dv_timings: Get custom dv timings in the sub device.
0452  *
0453  * @query_dv_timings: callback for VIDIOC_QUERY_DV_TIMINGS() ioctl handler code.
0454  *
0455  * @s_rx_buffer: set a host allocated memory buffer for the subdev. The subdev
0456  *  can adjust @size to a lower value and must not write more data to the
0457  *  buffer starting at @data than the original value of @size.
0458  *
0459  * @pre_streamon: May be called before streaming is actually started, to help
0460  *  initialising the bus. Current usage is to set a CSI-2 transmitter to
0461  *  LP-11 or LP-111 mode before streaming. See &enum
0462  *  v4l2_subdev_pre_streamon_flags.
0463  *
0464  *  pre_streamon shall return error if it cannot perform the operation as
0465  *  indicated by the flags argument. In particular, -EACCES indicates lack
0466  *  of support for the operation. The caller shall call post_streamoff for
0467  *  each successful call of pre_streamon.
0468  *
0469  * @post_streamoff: Called after streaming is stopped, but if and only if
0470  *  pre_streamon was called earlier.
0471  */
0472 struct v4l2_subdev_video_ops {
0473     int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
0474     int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
0475     int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
0476     int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
0477     int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
0478     int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
0479     int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
0480     int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std);
0481     int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
0482     int (*g_input_status)(struct v4l2_subdev *sd, u32 *status);
0483     int (*s_stream)(struct v4l2_subdev *sd, int enable);
0484     int (*g_pixelaspect)(struct v4l2_subdev *sd, struct v4l2_fract *aspect);
0485     int (*g_frame_interval)(struct v4l2_subdev *sd,
0486                 struct v4l2_subdev_frame_interval *interval);
0487     int (*s_frame_interval)(struct v4l2_subdev *sd,
0488                 struct v4l2_subdev_frame_interval *interval);
0489     int (*s_dv_timings)(struct v4l2_subdev *sd,
0490             struct v4l2_dv_timings *timings);
0491     int (*g_dv_timings)(struct v4l2_subdev *sd,
0492             struct v4l2_dv_timings *timings);
0493     int (*query_dv_timings)(struct v4l2_subdev *sd,
0494             struct v4l2_dv_timings *timings);
0495     int (*s_rx_buffer)(struct v4l2_subdev *sd, void *buf,
0496                unsigned int *size);
0497     int (*pre_streamon)(struct v4l2_subdev *sd, u32 flags);
0498     int (*post_streamoff)(struct v4l2_subdev *sd);
0499 };
0500 
0501 /**
0502  * struct v4l2_subdev_vbi_ops - Callbacks used when v4l device was opened
0503  *                in video mode via the vbi device node.
0504  *
0505  *  @decode_vbi_line: video decoders that support sliced VBI need to implement
0506  *  this ioctl. Field p of the &struct v4l2_decode_vbi_line is set to the
0507  *  start of the VBI data that was generated by the decoder. The driver
0508  *  then parses the sliced VBI data and sets the other fields in the
0509  *  struct accordingly. The pointer p is updated to point to the start of
0510  *  the payload which can be copied verbatim into the data field of the
0511  *  &struct v4l2_sliced_vbi_data. If no valid VBI data was found, then the
0512  *  type field is set to 0 on return.
0513  *
0514  * @s_vbi_data: used to generate VBI signals on a video signal.
0515  *  &struct v4l2_sliced_vbi_data is filled with the data packets that
0516  *  should be output. Note that if you set the line field to 0, then that
0517  *  VBI signal is disabled. If no valid VBI data was found, then the type
0518  *  field is set to 0 on return.
0519  *
0520  * @g_vbi_data: used to obtain the sliced VBI packet from a readback register.
0521  *  Not all video decoders support this. If no data is available because
0522  *  the readback register contains invalid or erroneous data %-EIO is
0523  *  returned. Note that you must fill in the 'id' member and the 'field'
0524  *  member (to determine whether CC data from the first or second field
0525  *  should be obtained).
0526  *
0527  * @g_sliced_vbi_cap: callback for VIDIOC_G_SLICED_VBI_CAP() ioctl handler
0528  *            code.
0529  *
0530  * @s_raw_fmt: setup the video encoder/decoder for raw VBI.
0531  *
0532  * @g_sliced_fmt: retrieve the current sliced VBI settings.
0533  *
0534  * @s_sliced_fmt: setup the sliced VBI settings.
0535  */
0536 struct v4l2_subdev_vbi_ops {
0537     int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line);
0538     int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data);
0539     int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
0540     int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap);
0541     int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt);
0542     int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
0543     int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
0544 };
0545 
0546 /**
0547  * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations
0548  * @g_skip_top_lines: number of lines at the top of the image to be skipped.
0549  *            This is needed for some sensors, which always corrupt
0550  *            several top lines of the output image, or which send their
0551  *            metadata in them.
0552  * @g_skip_frames: number of frames to skip at stream start. This is needed for
0553  *         buggy sensors that generate faulty frames when they are
0554  *         turned on.
0555  */
0556 struct v4l2_subdev_sensor_ops {
0557     int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines);
0558     int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames);
0559 };
0560 
0561 /**
0562  * enum v4l2_subdev_ir_mode- describes the type of IR supported
0563  *
0564  * @V4L2_SUBDEV_IR_MODE_PULSE_WIDTH: IR uses struct ir_raw_event records
0565  */
0566 enum v4l2_subdev_ir_mode {
0567     V4L2_SUBDEV_IR_MODE_PULSE_WIDTH,
0568 };
0569 
0570 /**
0571  * struct v4l2_subdev_ir_parameters - Parameters for IR TX or TX
0572  *
0573  * @bytes_per_data_element: bytes per data element of data in read or
0574  *  write call.
0575  * @mode: IR mode as defined by &enum v4l2_subdev_ir_mode.
0576  * @enable: device is active if true
0577  * @interrupt_enable: IR interrupts are enabled if true
0578  * @shutdown: if true: set hardware to low/no power, false: normal mode
0579  *
0580  * @modulation: if true, it uses carrier, if false: baseband
0581  * @max_pulse_width:  maximum pulse width in ns, valid only for baseband signal
0582  * @carrier_freq: carrier frequency in Hz, valid only for modulated signal
0583  * @duty_cycle: duty cycle percentage, valid only for modulated signal
0584  * @invert_level: invert signal level
0585  *
0586  * @invert_carrier_sense: Send 0/space as a carrier burst. used only in TX.
0587  *
0588  * @noise_filter_min_width: min time of a valid pulse, in ns. Used only for RX.
0589  * @carrier_range_lower: Lower carrier range, in Hz, valid only for modulated
0590  *  signal. Used only for RX.
0591  * @carrier_range_upper: Upper carrier range, in Hz, valid only for modulated
0592  *  signal. Used only for RX.
0593  * @resolution: The receive resolution, in ns . Used only for RX.
0594  */
0595 struct v4l2_subdev_ir_parameters {
0596     unsigned int bytes_per_data_element;
0597     enum v4l2_subdev_ir_mode mode;
0598 
0599     bool enable;
0600     bool interrupt_enable;
0601     bool shutdown;
0602 
0603     bool modulation;
0604     u32 max_pulse_width;
0605     unsigned int carrier_freq;
0606     unsigned int duty_cycle;
0607     bool invert_level;
0608 
0609     /* Tx only */
0610     bool invert_carrier_sense;
0611 
0612     /* Rx only */
0613     u32 noise_filter_min_width;
0614     unsigned int carrier_range_lower;
0615     unsigned int carrier_range_upper;
0616     u32 resolution;
0617 };
0618 
0619 /**
0620  * struct v4l2_subdev_ir_ops - operations for IR subdevices
0621  *
0622  * @rx_read: Reads received codes or pulse width data.
0623  *  The semantics are similar to a non-blocking read() call.
0624  * @rx_g_parameters: Get the current operating parameters and state of
0625  *  the IR receiver.
0626  * @rx_s_parameters: Set the current operating parameters and state of
0627  *  the IR receiver.  It is recommended to call
0628  *  [rt]x_g_parameters first to fill out the current state, and only change
0629  *  the fields that need to be changed.  Upon return, the actual device
0630  *  operating parameters and state will be returned.  Note that hardware
0631  *  limitations may prevent the actual settings from matching the requested
0632  *  settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz
0633  *  was requested.  An exception is when the shutdown parameter is true.
0634  *  The last used operational parameters will be returned, but the actual
0635  *  state of the hardware be different to minimize power consumption and
0636  *  processing when shutdown is true.
0637  *
0638  * @tx_write: Writes codes or pulse width data for transmission.
0639  *  The semantics are similar to a non-blocking write() call.
0640  * @tx_g_parameters: Get the current operating parameters and state of
0641  *  the IR transmitter.
0642  * @tx_s_parameters: Set the current operating parameters and state of
0643  *  the IR transmitter.  It is recommended to call
0644  *  [rt]x_g_parameters first to fill out the current state, and only change
0645  *  the fields that need to be changed.  Upon return, the actual device
0646  *  operating parameters and state will be returned.  Note that hardware
0647  *  limitations may prevent the actual settings from matching the requested
0648  *  settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz
0649  *  was requested.  An exception is when the shutdown parameter is true.
0650  *  The last used operational parameters will be returned, but the actual
0651  *  state of the hardware be different to minimize power consumption and
0652  *  processing when shutdown is true.
0653  */
0654 struct v4l2_subdev_ir_ops {
0655     /* Receiver */
0656     int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count,
0657                 ssize_t *num);
0658 
0659     int (*rx_g_parameters)(struct v4l2_subdev *sd,
0660                 struct v4l2_subdev_ir_parameters *params);
0661     int (*rx_s_parameters)(struct v4l2_subdev *sd,
0662                 struct v4l2_subdev_ir_parameters *params);
0663 
0664     /* Transmitter */
0665     int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count,
0666                 ssize_t *num);
0667 
0668     int (*tx_g_parameters)(struct v4l2_subdev *sd,
0669                 struct v4l2_subdev_ir_parameters *params);
0670     int (*tx_s_parameters)(struct v4l2_subdev *sd,
0671                 struct v4l2_subdev_ir_parameters *params);
0672 };
0673 
0674 /**
0675  * struct v4l2_subdev_pad_config - Used for storing subdev pad information.
0676  *
0677  * @try_fmt: &struct v4l2_mbus_framefmt
0678  * @try_crop: &struct v4l2_rect to be used for crop
0679  * @try_compose: &struct v4l2_rect to be used for compose
0680  *
0681  * This structure only needs to be passed to the pad op if the 'which' field
0682  * of the main argument is set to %V4L2_SUBDEV_FORMAT_TRY. For
0683  * %V4L2_SUBDEV_FORMAT_ACTIVE it is safe to pass %NULL.
0684  *
0685  * Note: This struct is also used in active state, and the 'try' prefix is
0686  * historical and to be removed.
0687  */
0688 struct v4l2_subdev_pad_config {
0689     struct v4l2_mbus_framefmt try_fmt;
0690     struct v4l2_rect try_crop;
0691     struct v4l2_rect try_compose;
0692 };
0693 
0694 /**
0695  * struct v4l2_subdev_state - Used for storing subdev state information.
0696  *
0697  * @_lock: default for 'lock'
0698  * @lock: mutex for the state. May be replaced by the user.
0699  * @pads: &struct v4l2_subdev_pad_config array
0700  *
0701  * This structure only needs to be passed to the pad op if the 'which' field
0702  * of the main argument is set to %V4L2_SUBDEV_FORMAT_TRY. For
0703  * %V4L2_SUBDEV_FORMAT_ACTIVE it is safe to pass %NULL.
0704  */
0705 struct v4l2_subdev_state {
0706     /* lock for the struct v4l2_subdev_state fields */
0707     struct mutex _lock;
0708     struct mutex *lock;
0709     struct v4l2_subdev_pad_config *pads;
0710 };
0711 
0712 /**
0713  * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations
0714  *
0715  * @init_cfg: initialize the pad config to default values
0716  * @enum_mbus_code: callback for VIDIOC_SUBDEV_ENUM_MBUS_CODE() ioctl handler
0717  *          code.
0718  * @enum_frame_size: callback for VIDIOC_SUBDEV_ENUM_FRAME_SIZE() ioctl handler
0719  *           code.
0720  *
0721  * @enum_frame_interval: callback for VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL() ioctl
0722  *           handler code.
0723  *
0724  * @get_fmt: callback for VIDIOC_SUBDEV_G_FMT() ioctl handler code.
0725  *
0726  * @set_fmt: callback for VIDIOC_SUBDEV_S_FMT() ioctl handler code.
0727  *
0728  * @get_selection: callback for VIDIOC_SUBDEV_G_SELECTION() ioctl handler code.
0729  *
0730  * @set_selection: callback for VIDIOC_SUBDEV_S_SELECTION() ioctl handler code.
0731  *
0732  * @get_edid: callback for VIDIOC_SUBDEV_G_EDID() ioctl handler code.
0733  *
0734  * @set_edid: callback for VIDIOC_SUBDEV_S_EDID() ioctl handler code.
0735  *
0736  * @dv_timings_cap: callback for VIDIOC_SUBDEV_DV_TIMINGS_CAP() ioctl handler
0737  *          code.
0738  *
0739  * @enum_dv_timings: callback for VIDIOC_SUBDEV_ENUM_DV_TIMINGS() ioctl handler
0740  *           code.
0741  *
0742  * @link_validate: used by the media controller code to check if the links
0743  *         that belongs to a pipeline can be used for stream.
0744  *
0745  * @get_frame_desc: get the current low level media bus frame parameters.
0746  *
0747  * @set_frame_desc: set the low level media bus frame parameters, @fd array
0748  *                  may be adjusted by the subdev driver to device capabilities.
0749  *
0750  * @get_mbus_config: get the media bus configuration of a remote sub-device.
0751  *           The media bus configuration is usually retrieved from the
0752  *           firmware interface at sub-device probe time, immediately
0753  *           applied to the hardware and eventually adjusted by the
0754  *           driver. Remote sub-devices (usually video receivers) shall
0755  *           use this operation to query the transmitting end bus
0756  *           configuration in order to adjust their own one accordingly.
0757  *           Callers should make sure they get the most up-to-date as
0758  *           possible configuration from the remote end, likely calling
0759  *           this operation as close as possible to stream on time. The
0760  *           operation shall fail if the pad index it has been called on
0761  *           is not valid or in case of unrecoverable failures.
0762  */
0763 struct v4l2_subdev_pad_ops {
0764     int (*init_cfg)(struct v4l2_subdev *sd,
0765             struct v4l2_subdev_state *state);
0766     int (*enum_mbus_code)(struct v4l2_subdev *sd,
0767                   struct v4l2_subdev_state *state,
0768                   struct v4l2_subdev_mbus_code_enum *code);
0769     int (*enum_frame_size)(struct v4l2_subdev *sd,
0770                    struct v4l2_subdev_state *state,
0771                    struct v4l2_subdev_frame_size_enum *fse);
0772     int (*enum_frame_interval)(struct v4l2_subdev *sd,
0773                    struct v4l2_subdev_state *state,
0774                    struct v4l2_subdev_frame_interval_enum *fie);
0775     int (*get_fmt)(struct v4l2_subdev *sd,
0776                struct v4l2_subdev_state *state,
0777                struct v4l2_subdev_format *format);
0778     int (*set_fmt)(struct v4l2_subdev *sd,
0779                struct v4l2_subdev_state *state,
0780                struct v4l2_subdev_format *format);
0781     int (*get_selection)(struct v4l2_subdev *sd,
0782                  struct v4l2_subdev_state *state,
0783                  struct v4l2_subdev_selection *sel);
0784     int (*set_selection)(struct v4l2_subdev *sd,
0785                  struct v4l2_subdev_state *state,
0786                  struct v4l2_subdev_selection *sel);
0787     int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
0788     int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
0789     int (*dv_timings_cap)(struct v4l2_subdev *sd,
0790                   struct v4l2_dv_timings_cap *cap);
0791     int (*enum_dv_timings)(struct v4l2_subdev *sd,
0792                    struct v4l2_enum_dv_timings *timings);
0793 #ifdef CONFIG_MEDIA_CONTROLLER
0794     int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link,
0795                  struct v4l2_subdev_format *source_fmt,
0796                  struct v4l2_subdev_format *sink_fmt);
0797 #endif /* CONFIG_MEDIA_CONTROLLER */
0798     int (*get_frame_desc)(struct v4l2_subdev *sd, unsigned int pad,
0799                   struct v4l2_mbus_frame_desc *fd);
0800     int (*set_frame_desc)(struct v4l2_subdev *sd, unsigned int pad,
0801                   struct v4l2_mbus_frame_desc *fd);
0802     int (*get_mbus_config)(struct v4l2_subdev *sd, unsigned int pad,
0803                    struct v4l2_mbus_config *config);
0804 };
0805 
0806 /**
0807  * struct v4l2_subdev_ops - Subdev operations
0808  *
0809  * @core: pointer to &struct v4l2_subdev_core_ops. Can be %NULL
0810  * @tuner: pointer to &struct v4l2_subdev_tuner_ops. Can be %NULL
0811  * @audio: pointer to &struct v4l2_subdev_audio_ops. Can be %NULL
0812  * @video: pointer to &struct v4l2_subdev_video_ops. Can be %NULL
0813  * @vbi: pointer to &struct v4l2_subdev_vbi_ops. Can be %NULL
0814  * @ir: pointer to &struct v4l2_subdev_ir_ops. Can be %NULL
0815  * @sensor: pointer to &struct v4l2_subdev_sensor_ops. Can be %NULL
0816  * @pad: pointer to &struct v4l2_subdev_pad_ops. Can be %NULL
0817  */
0818 struct v4l2_subdev_ops {
0819     const struct v4l2_subdev_core_ops   *core;
0820     const struct v4l2_subdev_tuner_ops  *tuner;
0821     const struct v4l2_subdev_audio_ops  *audio;
0822     const struct v4l2_subdev_video_ops  *video;
0823     const struct v4l2_subdev_vbi_ops    *vbi;
0824     const struct v4l2_subdev_ir_ops     *ir;
0825     const struct v4l2_subdev_sensor_ops *sensor;
0826     const struct v4l2_subdev_pad_ops    *pad;
0827 };
0828 
0829 /**
0830  * struct v4l2_subdev_internal_ops - V4L2 subdev internal ops
0831  *
0832  * @registered: called when this subdev is registered. When called the v4l2_dev
0833  *  field is set to the correct v4l2_device.
0834  *
0835  * @unregistered: called when this subdev is unregistered. When called the
0836  *  v4l2_dev field is still set to the correct v4l2_device.
0837  *
0838  * @open: called when the subdev device node is opened by an application.
0839  *
0840  * @close: called when the subdev device node is closed. Please note that
0841  *  it is possible for @close to be called after @unregistered!
0842  *
0843  * @release: called when the last user of the subdev device is gone. This
0844  *  happens after the @unregistered callback and when the last open
0845  *  filehandle to the v4l-subdevX device node was closed. If no device
0846  *  node was created for this sub-device, then the @release callback
0847  *  is called right after the @unregistered callback.
0848  *  The @release callback is typically used to free the memory containing
0849  *  the v4l2_subdev structure. It is almost certainly required for any
0850  *  sub-device that sets the V4L2_SUBDEV_FL_HAS_DEVNODE flag.
0851  *
0852  * .. note::
0853  *  Never call this from drivers, only the v4l2 framework can call
0854  *  these ops.
0855  */
0856 struct v4l2_subdev_internal_ops {
0857     int (*registered)(struct v4l2_subdev *sd);
0858     void (*unregistered)(struct v4l2_subdev *sd);
0859     int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
0860     int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
0861     void (*release)(struct v4l2_subdev *sd);
0862 };
0863 
0864 #define V4L2_SUBDEV_NAME_SIZE 32
0865 
0866 /* Set this flag if this subdev is a i2c device. */
0867 #define V4L2_SUBDEV_FL_IS_I2C           (1U << 0)
0868 /* Set this flag if this subdev is a spi device. */
0869 #define V4L2_SUBDEV_FL_IS_SPI           (1U << 1)
0870 /* Set this flag if this subdev needs a device node. */
0871 #define V4L2_SUBDEV_FL_HAS_DEVNODE      (1U << 2)
0872 /*
0873  * Set this flag if this subdev generates events.
0874  * Note controls can send events, thus drivers exposing controls
0875  * should set this flag.
0876  */
0877 #define V4L2_SUBDEV_FL_HAS_EVENTS       (1U << 3)
0878 
0879 struct regulator_bulk_data;
0880 
0881 /**
0882  * struct v4l2_subdev_platform_data - regulators config struct
0883  *
0884  * @regulators: Optional regulators used to power on/off the subdevice
0885  * @num_regulators: Number of regululators
0886  * @host_priv: Per-subdevice data, specific for a certain video host device
0887  */
0888 struct v4l2_subdev_platform_data {
0889     struct regulator_bulk_data *regulators;
0890     int num_regulators;
0891 
0892     void *host_priv;
0893 };
0894 
0895 /**
0896  * struct v4l2_subdev - describes a V4L2 sub-device
0897  *
0898  * @entity: pointer to &struct media_entity
0899  * @list: List of sub-devices
0900  * @owner: The owner is the same as the driver's &struct device owner.
0901  * @owner_v4l2_dev: true if the &sd->owner matches the owner of @v4l2_dev->dev
0902  *  owner. Initialized by v4l2_device_register_subdev().
0903  * @flags: subdev flags. Can be:
0904  *   %V4L2_SUBDEV_FL_IS_I2C - Set this flag if this subdev is a i2c device;
0905  *   %V4L2_SUBDEV_FL_IS_SPI - Set this flag if this subdev is a spi device;
0906  *   %V4L2_SUBDEV_FL_HAS_DEVNODE - Set this flag if this subdev needs a
0907  *   device node;
0908  *   %V4L2_SUBDEV_FL_HAS_EVENTS -  Set this flag if this subdev generates
0909  *   events.
0910  *
0911  * @v4l2_dev: pointer to struct &v4l2_device
0912  * @ops: pointer to struct &v4l2_subdev_ops
0913  * @internal_ops: pointer to struct &v4l2_subdev_internal_ops.
0914  *  Never call these internal ops from within a driver!
0915  * @ctrl_handler: The control handler of this subdev. May be NULL.
0916  * @name: Name of the sub-device. Please notice that the name must be unique.
0917  * @grp_id: can be used to group similar subdevs. Value is driver-specific
0918  * @dev_priv: pointer to private data
0919  * @host_priv: pointer to private data used by the device where the subdev
0920  *  is attached.
0921  * @devnode: subdev device node
0922  * @dev: pointer to the physical device, if any
0923  * @fwnode: The fwnode_handle of the subdev, usually the same as
0924  *      either dev->of_node->fwnode or dev->fwnode (whichever is non-NULL).
0925  * @async_list: Links this subdev to a global subdev_list or @notifier->done
0926  *  list.
0927  * @asd: Pointer to respective &struct v4l2_async_subdev.
0928  * @notifier: Pointer to the managing notifier.
0929  * @subdev_notifier: A sub-device notifier implicitly registered for the sub-
0930  *           device using v4l2_async_register_subdev_sensor().
0931  * @pdata: common part of subdevice platform data
0932  * @state_lock: A pointer to a lock used for all the subdev's states, set by the
0933  *      driver. This is optional. If NULL, each state instance will get
0934  *      a lock of its own.
0935  * @active_state: Active state for the subdev (NULL for subdevs tracking the
0936  *        state internally). Initialized by calling
0937  *        v4l2_subdev_init_finalize().
0938  *
0939  * Each instance of a subdev driver should create this struct, either
0940  * stand-alone or embedded in a larger struct.
0941  *
0942  * This structure should be initialized by v4l2_subdev_init() or one of
0943  * its variants: v4l2_spi_subdev_init(), v4l2_i2c_subdev_init().
0944  */
0945 struct v4l2_subdev {
0946 #if defined(CONFIG_MEDIA_CONTROLLER)
0947     struct media_entity entity;
0948 #endif
0949     struct list_head list;
0950     struct module *owner;
0951     bool owner_v4l2_dev;
0952     u32 flags;
0953     struct v4l2_device *v4l2_dev;
0954     const struct v4l2_subdev_ops *ops;
0955     const struct v4l2_subdev_internal_ops *internal_ops;
0956     struct v4l2_ctrl_handler *ctrl_handler;
0957     char name[V4L2_SUBDEV_NAME_SIZE];
0958     u32 grp_id;
0959     void *dev_priv;
0960     void *host_priv;
0961     struct video_device *devnode;
0962     struct device *dev;
0963     struct fwnode_handle *fwnode;
0964     struct list_head async_list;
0965     struct v4l2_async_subdev *asd;
0966     struct v4l2_async_notifier *notifier;
0967     struct v4l2_async_notifier *subdev_notifier;
0968     struct v4l2_subdev_platform_data *pdata;
0969     struct mutex *state_lock;
0970 
0971     /*
0972      * The fields below are private, and should only be accessed via
0973      * appropriate functions.
0974      */
0975 
0976     /*
0977      * TODO: active_state should most likely be changed from a pointer to an
0978      * embedded field. For the time being it's kept as a pointer to more
0979      * easily catch uses of active_state in the cases where the driver
0980      * doesn't support it.
0981      */
0982     struct v4l2_subdev_state *active_state;
0983 };
0984 
0985 
0986 /**
0987  * media_entity_to_v4l2_subdev - Returns a &struct v4l2_subdev from
0988  *    the &struct media_entity embedded in it.
0989  *
0990  * @ent: pointer to &struct media_entity.
0991  */
0992 #define media_entity_to_v4l2_subdev(ent)                \
0993 ({                                  \
0994     typeof(ent) __me_sd_ent = (ent);                \
0995                                     \
0996     __me_sd_ent ?                           \
0997         container_of(__me_sd_ent, struct v4l2_subdev, entity) : \
0998         NULL;                           \
0999 })
1000 
1001 /**
1002  * vdev_to_v4l2_subdev - Returns a &struct v4l2_subdev from
1003  *  the &struct video_device embedded on it.
1004  *
1005  * @vdev: pointer to &struct video_device
1006  */
1007 #define vdev_to_v4l2_subdev(vdev) \
1008     ((struct v4l2_subdev *)video_get_drvdata(vdev))
1009 
1010 /**
1011  * struct v4l2_subdev_fh - Used for storing subdev information per file handle
1012  *
1013  * @vfh: pointer to &struct v4l2_fh
1014  * @state: pointer to &struct v4l2_subdev_state
1015  * @owner: module pointer to the owner of this file handle
1016  */
1017 struct v4l2_subdev_fh {
1018     struct v4l2_fh vfh;
1019     struct module *owner;
1020 #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
1021     struct v4l2_subdev_state *state;
1022 #endif
1023 };
1024 
1025 /**
1026  * to_v4l2_subdev_fh - Returns a &struct v4l2_subdev_fh from
1027  *  the &struct v4l2_fh embedded on it.
1028  *
1029  * @fh: pointer to &struct v4l2_fh
1030  */
1031 #define to_v4l2_subdev_fh(fh)   \
1032     container_of(fh, struct v4l2_subdev_fh, vfh)
1033 
1034 #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
1035 
1036 /**
1037  * v4l2_subdev_get_pad_format - ancillary routine to call
1038  *  &struct v4l2_subdev_pad_config->try_fmt
1039  *
1040  * @sd: pointer to &struct v4l2_subdev
1041  * @state: pointer to &struct v4l2_subdev_state
1042  * @pad: index of the pad in the &struct v4l2_subdev_state->pads array
1043  */
1044 static inline struct v4l2_mbus_framefmt *
1045 v4l2_subdev_get_pad_format(struct v4l2_subdev *sd,
1046                struct v4l2_subdev_state *state,
1047                unsigned int pad)
1048 {
1049     if (WARN_ON(pad >= sd->entity.num_pads))
1050         pad = 0;
1051     return &state->pads[pad].try_fmt;
1052 }
1053 
1054 /**
1055  * v4l2_subdev_get_pad_crop - ancillary routine to call
1056  *  &struct v4l2_subdev_pad_config->try_crop
1057  *
1058  * @sd: pointer to &struct v4l2_subdev
1059  * @state: pointer to &struct v4l2_subdev_state.
1060  * @pad: index of the pad in the &struct v4l2_subdev_state->pads array.
1061  */
1062 static inline struct v4l2_rect *
1063 v4l2_subdev_get_pad_crop(struct v4l2_subdev *sd,
1064              struct v4l2_subdev_state *state,
1065              unsigned int pad)
1066 {
1067     if (WARN_ON(pad >= sd->entity.num_pads))
1068         pad = 0;
1069     return &state->pads[pad].try_crop;
1070 }
1071 
1072 /**
1073  * v4l2_subdev_get_pad_compose - ancillary routine to call
1074  *  &struct v4l2_subdev_pad_config->try_compose
1075  *
1076  * @sd: pointer to &struct v4l2_subdev
1077  * @state: pointer to &struct v4l2_subdev_state.
1078  * @pad: index of the pad in the &struct v4l2_subdev_state->pads array.
1079  */
1080 static inline struct v4l2_rect *
1081 v4l2_subdev_get_pad_compose(struct v4l2_subdev *sd,
1082                 struct v4l2_subdev_state *state,
1083                 unsigned int pad)
1084 {
1085     if (WARN_ON(pad >= sd->entity.num_pads))
1086         pad = 0;
1087     return &state->pads[pad].try_compose;
1088 }
1089 
1090 /*
1091  * Temprary helpers until uses of v4l2_subdev_get_try_* functions have been
1092  * renamed
1093  */
1094 #define v4l2_subdev_get_try_format(sd, state, pad) \
1095     v4l2_subdev_get_pad_format(sd, state, pad)
1096 
1097 #define v4l2_subdev_get_try_crop(sd, state, pad) \
1098     v4l2_subdev_get_pad_crop(sd, state, pad)
1099 
1100 #define v4l2_subdev_get_try_compose(sd, state, pad) \
1101     v4l2_subdev_get_pad_compose(sd, state, pad)
1102 
1103 #endif /* CONFIG_VIDEO_V4L2_SUBDEV_API */
1104 
1105 extern const struct v4l2_file_operations v4l2_subdev_fops;
1106 
1107 /**
1108  * v4l2_set_subdevdata - Sets V4L2 dev private device data
1109  *
1110  * @sd: pointer to &struct v4l2_subdev
1111  * @p: pointer to the private device data to be stored.
1112  */
1113 static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
1114 {
1115     sd->dev_priv = p;
1116 }
1117 
1118 /**
1119  * v4l2_get_subdevdata - Gets V4L2 dev private device data
1120  *
1121  * @sd: pointer to &struct v4l2_subdev
1122  *
1123  * Returns the pointer to the private device data to be stored.
1124  */
1125 static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)
1126 {
1127     return sd->dev_priv;
1128 }
1129 
1130 /**
1131  * v4l2_set_subdev_hostdata - Sets V4L2 dev private host data
1132  *
1133  * @sd: pointer to &struct v4l2_subdev
1134  * @p: pointer to the private data to be stored.
1135  */
1136 static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p)
1137 {
1138     sd->host_priv = p;
1139 }
1140 
1141 /**
1142  * v4l2_get_subdev_hostdata - Gets V4L2 dev private data
1143  *
1144  * @sd: pointer to &struct v4l2_subdev
1145  *
1146  * Returns the pointer to the private host data to be stored.
1147  */
1148 static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
1149 {
1150     return sd->host_priv;
1151 }
1152 
1153 #ifdef CONFIG_MEDIA_CONTROLLER
1154 
1155 /**
1156  * v4l2_subdev_get_fwnode_pad_1_to_1 - Get pad number from a subdev fwnode
1157  *                                     endpoint, assuming 1:1 port:pad
1158  *
1159  * @entity: Pointer to the subdev entity
1160  * @endpoint: Pointer to a parsed fwnode endpoint
1161  *
1162  * This function can be used as the .get_fwnode_pad operation for
1163  * subdevices that map port numbers and pad indexes 1:1. If the endpoint
1164  * is owned by the subdevice, the function returns the endpoint port
1165  * number.
1166  *
1167  * Returns the endpoint port number on success or a negative error code.
1168  */
1169 int v4l2_subdev_get_fwnode_pad_1_to_1(struct media_entity *entity,
1170                       struct fwnode_endpoint *endpoint);
1171 
1172 /**
1173  * v4l2_subdev_link_validate_default - validates a media link
1174  *
1175  * @sd: pointer to &struct v4l2_subdev
1176  * @link: pointer to &struct media_link
1177  * @source_fmt: pointer to &struct v4l2_subdev_format
1178  * @sink_fmt: pointer to &struct v4l2_subdev_format
1179  *
1180  * This function ensures that width, height and the media bus pixel
1181  * code are equal on both source and sink of the link.
1182  */
1183 int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
1184                       struct media_link *link,
1185                       struct v4l2_subdev_format *source_fmt,
1186                       struct v4l2_subdev_format *sink_fmt);
1187 
1188 /**
1189  * v4l2_subdev_link_validate - validates a media link
1190  *
1191  * @link: pointer to &struct media_link
1192  *
1193  * This function calls the subdev's link_validate ops to validate
1194  * if a media link is valid for streaming. It also internally
1195  * calls v4l2_subdev_link_validate_default() to ensure that
1196  * width, height and the media bus pixel code are equal on both
1197  * source and sink of the link.
1198  */
1199 int v4l2_subdev_link_validate(struct media_link *link);
1200 
1201 /**
1202  * __v4l2_subdev_state_alloc - allocate v4l2_subdev_state
1203  *
1204  * @sd: pointer to &struct v4l2_subdev for which the state is being allocated.
1205  * @lock_name: name of the state lock
1206  * @key: lock_class_key for the lock
1207  *
1208  * Must call __v4l2_subdev_state_free() when state is no longer needed.
1209  *
1210  * Not to be called directly by the drivers.
1211  */
1212 struct v4l2_subdev_state *__v4l2_subdev_state_alloc(struct v4l2_subdev *sd,
1213                             const char *lock_name,
1214                             struct lock_class_key *key);
1215 
1216 /**
1217  * __v4l2_subdev_state_free - free a v4l2_subdev_state
1218  *
1219  * @state: v4l2_subdev_state to be freed.
1220  *
1221  * Not to be called directly by the drivers.
1222  */
1223 void __v4l2_subdev_state_free(struct v4l2_subdev_state *state);
1224 
1225 /**
1226  * v4l2_subdev_init_finalize() - Finalizes the initialization of the subdevice
1227  * @sd: The subdev
1228  *
1229  * This function finalizes the initialization of the subdev, including
1230  * allocation of the active state for the subdev.
1231  *
1232  * This function must be called by the subdev drivers that use the centralized
1233  * active state, after the subdev struct has been initialized and
1234  * media_entity_pads_init() has been called, but before registering the
1235  * subdev.
1236  *
1237  * The user must call v4l2_subdev_cleanup() when the subdev is being removed.
1238  */
1239 #define v4l2_subdev_init_finalize(sd)                                          \
1240     ({                                                                     \
1241         static struct lock_class_key __key;                            \
1242         const char *name = KBUILD_BASENAME                             \
1243             ":" __stringify(__LINE__) ":sd->active_state->lock";   \
1244         __v4l2_subdev_init_finalize(sd, name, &__key);                 \
1245     })
1246 
1247 int __v4l2_subdev_init_finalize(struct v4l2_subdev *sd, const char *name,
1248                 struct lock_class_key *key);
1249 
1250 /**
1251  * v4l2_subdev_cleanup() - Releases the resources allocated by the subdevice
1252  * @sd: The subdevice
1253  *
1254  * This function will release the resources allocated in
1255  * v4l2_subdev_init_finalize.
1256  */
1257 void v4l2_subdev_cleanup(struct v4l2_subdev *sd);
1258 
1259 /**
1260  * v4l2_subdev_lock_state() - Locks the subdev state
1261  * @state: The subdevice state
1262  *
1263  * Locks the given subdev state.
1264  *
1265  * The state must be unlocked with v4l2_subdev_unlock_state() after use.
1266  */
1267 static inline void v4l2_subdev_lock_state(struct v4l2_subdev_state *state)
1268 {
1269     mutex_lock(state->lock);
1270 }
1271 
1272 /**
1273  * v4l2_subdev_unlock_state() - Unlocks the subdev state
1274  * @state: The subdevice state
1275  *
1276  * Unlocks the given subdev state.
1277  */
1278 static inline void v4l2_subdev_unlock_state(struct v4l2_subdev_state *state)
1279 {
1280     mutex_unlock(state->lock);
1281 }
1282 
1283 /**
1284  * v4l2_subdev_get_unlocked_active_state() - Checks that the active subdev state
1285  *                       is unlocked and returns it
1286  * @sd: The subdevice
1287  *
1288  * Returns the active state for the subdevice, or NULL if the subdev does not
1289  * support active state. If the state is not NULL, calls
1290  * lockdep_assert_not_held() to issue a warning if the state is locked.
1291  *
1292  * This function is to be used e.g. when getting the active state for the sole
1293  * purpose of passing it forward, without accessing the state fields.
1294  */
1295 static inline struct v4l2_subdev_state *
1296 v4l2_subdev_get_unlocked_active_state(struct v4l2_subdev *sd)
1297 {
1298     if (sd->active_state)
1299         lockdep_assert_not_held(sd->active_state->lock);
1300     return sd->active_state;
1301 }
1302 
1303 /**
1304  * v4l2_subdev_get_locked_active_state() - Checks that the active subdev state
1305  *                     is locked and returns it
1306  *
1307  * @sd: The subdevice
1308  *
1309  * Returns the active state for the subdevice, or NULL if the subdev does not
1310  * support active state. If the state is not NULL, calls lockdep_assert_held()
1311  * to issue a warning if the state is not locked.
1312  *
1313  * This function is to be used when the caller knows that the active state is
1314  * already locked.
1315  */
1316 static inline struct v4l2_subdev_state *
1317 v4l2_subdev_get_locked_active_state(struct v4l2_subdev *sd)
1318 {
1319     if (sd->active_state)
1320         lockdep_assert_held(sd->active_state->lock);
1321     return sd->active_state;
1322 }
1323 
1324 /**
1325  * v4l2_subdev_lock_and_get_active_state() - Locks and returns the active subdev
1326  *                       state for the subdevice
1327  * @sd: The subdevice
1328  *
1329  * Returns the locked active state for the subdevice, or NULL if the subdev
1330  * does not support active state.
1331  *
1332  * The state must be unlocked with v4l2_subdev_unlock_state() after use.
1333  */
1334 static inline struct v4l2_subdev_state *
1335 v4l2_subdev_lock_and_get_active_state(struct v4l2_subdev *sd)
1336 {
1337     if (sd->active_state)
1338         v4l2_subdev_lock_state(sd->active_state);
1339     return sd->active_state;
1340 }
1341 
1342 #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
1343 
1344 /**
1345  * v4l2_subdev_get_fmt() - Fill format based on state
1346  * @sd: subdevice
1347  * @state: subdevice state
1348  * @format: pointer to &struct v4l2_subdev_format
1349  *
1350  * Fill @format->format field based on the information in the @format struct.
1351  *
1352  * This function can be used by the subdev drivers which support active state to
1353  * implement v4l2_subdev_pad_ops.get_fmt if the subdev driver does not need to
1354  * do anything special in their get_fmt op.
1355  *
1356  * Returns 0 on success, error value otherwise.
1357  */
1358 int v4l2_subdev_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *state,
1359             struct v4l2_subdev_format *format);
1360 
1361 #endif /* CONFIG_VIDEO_V4L2_SUBDEV_API */
1362 
1363 #endif /* CONFIG_MEDIA_CONTROLLER */
1364 
1365 /**
1366  * v4l2_subdev_init - initializes the sub-device struct
1367  *
1368  * @sd: pointer to the &struct v4l2_subdev to be initialized
1369  * @ops: pointer to &struct v4l2_subdev_ops.
1370  */
1371 void v4l2_subdev_init(struct v4l2_subdev *sd,
1372               const struct v4l2_subdev_ops *ops);
1373 
1374 extern const struct v4l2_subdev_ops v4l2_subdev_call_wrappers;
1375 
1376 /**
1377  * v4l2_subdev_call - call an operation of a v4l2_subdev.
1378  *
1379  * @sd: pointer to the &struct v4l2_subdev
1380  * @o: name of the element at &struct v4l2_subdev_ops that contains @f.
1381  *     Each element there groups a set of callbacks functions.
1382  * @f: callback function to be called.
1383  *     The callback functions are defined in groups, according to
1384  *     each element at &struct v4l2_subdev_ops.
1385  * @args: arguments for @f.
1386  *
1387  * Example: err = v4l2_subdev_call(sd, video, s_std, norm);
1388  */
1389 #define v4l2_subdev_call(sd, o, f, args...)             \
1390     ({                              \
1391         struct v4l2_subdev *__sd = (sd);            \
1392         int __result;                       \
1393         if (!__sd)                      \
1394             __result = -ENODEV;             \
1395         else if (!(__sd->ops->o && __sd->ops->o->f))        \
1396             __result = -ENOIOCTLCMD;            \
1397         else if (v4l2_subdev_call_wrappers.o &&         \
1398              v4l2_subdev_call_wrappers.o->f)        \
1399             __result = v4l2_subdev_call_wrappers.o->f(  \
1400                             __sd, ##args);  \
1401         else                            \
1402             __result = __sd->ops->o->f(__sd, ##args);   \
1403         __result;                       \
1404     })
1405 
1406 /**
1407  * v4l2_subdev_call_state_active - call an operation of a v4l2_subdev which
1408  *                 takes state as a parameter, passing the
1409  *                 subdev its active state.
1410  *
1411  * @sd: pointer to the &struct v4l2_subdev
1412  * @o: name of the element at &struct v4l2_subdev_ops that contains @f.
1413  *     Each element there groups a set of callbacks functions.
1414  * @f: callback function to be called.
1415  *     The callback functions are defined in groups, according to
1416  *     each element at &struct v4l2_subdev_ops.
1417  * @args: arguments for @f.
1418  *
1419  * This is similar to v4l2_subdev_call(), except that this version can only be
1420  * used for ops that take a subdev state as a parameter. The macro will get the
1421  * active state, lock it before calling the op and unlock it after the call.
1422  */
1423 #define v4l2_subdev_call_state_active(sd, o, f, args...)        \
1424     ({                              \
1425         int __result;                       \
1426         struct v4l2_subdev_state *state;            \
1427         state = v4l2_subdev_get_unlocked_active_state(sd);  \
1428         if (state)                      \
1429             v4l2_subdev_lock_state(state);          \
1430         __result = v4l2_subdev_call(sd, o, f, state, ##args);   \
1431         if (state)                      \
1432             v4l2_subdev_unlock_state(state);        \
1433         __result;                       \
1434     })
1435 
1436 /**
1437  * v4l2_subdev_call_state_try - call an operation of a v4l2_subdev which
1438  *              takes state as a parameter, passing the
1439  *              subdev a newly allocated try state.
1440  *
1441  * @sd: pointer to the &struct v4l2_subdev
1442  * @o: name of the element at &struct v4l2_subdev_ops that contains @f.
1443  *     Each element there groups a set of callbacks functions.
1444  * @f: callback function to be called.
1445  *     The callback functions are defined in groups, according to
1446  *     each element at &struct v4l2_subdev_ops.
1447  * @args: arguments for @f.
1448  *
1449  * This is similar to v4l2_subdev_call_state_active(), except that as this
1450  * version allocates a new state, this is only usable for
1451  * V4L2_SUBDEV_FORMAT_TRY use cases.
1452  *
1453  * Note: only legacy non-MC drivers may need this macro.
1454  */
1455 #define v4l2_subdev_call_state_try(sd, o, f, args...)                 \
1456     ({                                                            \
1457         int __result;                                         \
1458         static struct lock_class_key __key;                   \
1459         const char *name = KBUILD_BASENAME                    \
1460             ":" __stringify(__LINE__) ":state->lock";     \
1461         struct v4l2_subdev_state *state =                     \
1462             __v4l2_subdev_state_alloc(sd, name, &__key);  \
1463         v4l2_subdev_lock_state(state);                        \
1464         __result = v4l2_subdev_call(sd, o, f, state, ##args); \
1465         v4l2_subdev_unlock_state(state);                      \
1466         __v4l2_subdev_state_free(state);                      \
1467         __result;                                             \
1468     })
1469 
1470 /**
1471  * v4l2_subdev_has_op - Checks if a subdev defines a certain operation.
1472  *
1473  * @sd: pointer to the &struct v4l2_subdev
1474  * @o: The group of callback functions in &struct v4l2_subdev_ops
1475  * which @f is a part of.
1476  * @f: callback function to be checked for its existence.
1477  */
1478 #define v4l2_subdev_has_op(sd, o, f) \
1479     ((sd)->ops->o && (sd)->ops->o->f)
1480 
1481 /**
1482  * v4l2_subdev_notify_event() - Delivers event notification for subdevice
1483  * @sd: The subdev for which to deliver the event
1484  * @ev: The event to deliver
1485  *
1486  * Will deliver the specified event to all userspace event listeners which are
1487  * subscribed to the v42l subdev event queue as well as to the bridge driver
1488  * using the notify callback. The notification type for the notify callback
1489  * will be %V4L2_DEVICE_NOTIFY_EVENT.
1490  */
1491 void v4l2_subdev_notify_event(struct v4l2_subdev *sd,
1492                   const struct v4l2_event *ev);
1493 
1494 #endif /* _V4L2_SUBDEV_H */