linux-headers (unknown)

(root)/
include/
linux/
v4l2-subdev.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  /*
       3   * V4L2 subdev userspace API
       4   *
       5   * Copyright (C) 2010 Nokia Corporation
       6   *
       7   * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
       8   *	     Sakari Ailus <sakari.ailus@iki.fi>
       9   */
      10  
      11  #ifndef __LINUX_V4L2_SUBDEV_H
      12  #define __LINUX_V4L2_SUBDEV_H
      13  
      14  #include <linux/const.h>
      15  #include <linux/ioctl.h>
      16  #include <linux/types.h>
      17  #include <linux/v4l2-common.h>
      18  #include <linux/v4l2-mediabus.h>
      19  
      20  /**
      21   * enum v4l2_subdev_format_whence - Media bus format type
      22   * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
      23   * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
      24   */
      25  enum v4l2_subdev_format_whence {
      26  	V4L2_SUBDEV_FORMAT_TRY = 0,
      27  	V4L2_SUBDEV_FORMAT_ACTIVE = 1,
      28  };
      29  
      30  /**
      31   * struct v4l2_subdev_format - Pad-level media bus format
      32   * @which: format type (from enum v4l2_subdev_format_whence)
      33   * @pad: pad number, as reported by the media API
      34   * @format: media bus format (format code and frame size)
      35   * @stream: stream number, defined in subdev routing
      36   * @reserved: drivers and applications must zero this array
      37   */
      38  struct v4l2_subdev_format {
      39  	__u32 which;
      40  	__u32 pad;
      41  	struct v4l2_mbus_framefmt format;
      42  	__u32 stream;
      43  	__u32 reserved[7];
      44  };
      45  
      46  /**
      47   * struct v4l2_subdev_crop - Pad-level crop settings
      48   * @which: format type (from enum v4l2_subdev_format_whence)
      49   * @pad: pad number, as reported by the media API
      50   * @rect: pad crop rectangle boundaries
      51   * @stream: stream number, defined in subdev routing
      52   * @reserved: drivers and applications must zero this array
      53   */
      54  struct v4l2_subdev_crop {
      55  	__u32 which;
      56  	__u32 pad;
      57  	struct v4l2_rect rect;
      58  	__u32 stream;
      59  	__u32 reserved[7];
      60  };
      61  
      62  #define V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE	0x00000001
      63  #define V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC	0x00000002
      64  #define V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC	0x00000004
      65  #define V4L2_SUBDEV_MBUS_CODE_CSC_HSV_ENC	V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC
      66  #define V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION	0x00000008
      67  
      68  /**
      69   * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
      70   * @pad: pad number, as reported by the media API
      71   * @index: format index during enumeration
      72   * @code: format code (MEDIA_BUS_FMT_ definitions)
      73   * @which: format type (from enum v4l2_subdev_format_whence)
      74   * @flags: flags set by the driver, (V4L2_SUBDEV_MBUS_CODE_*)
      75   * @stream: stream number, defined in subdev routing
      76   * @reserved: drivers and applications must zero this array
      77   */
      78  struct v4l2_subdev_mbus_code_enum {
      79  	__u32 pad;
      80  	__u32 index;
      81  	__u32 code;
      82  	__u32 which;
      83  	__u32 flags;
      84  	__u32 stream;
      85  	__u32 reserved[6];
      86  };
      87  
      88  /**
      89   * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
      90   * @index: format index during enumeration
      91   * @pad: pad number, as reported by the media API
      92   * @code: format code (MEDIA_BUS_FMT_ definitions)
      93   * @min_width: minimum frame width, in pixels
      94   * @max_width: maximum frame width, in pixels
      95   * @min_height: minimum frame height, in pixels
      96   * @max_height: maximum frame height, in pixels
      97   * @which: format type (from enum v4l2_subdev_format_whence)
      98   * @stream: stream number, defined in subdev routing
      99   * @reserved: drivers and applications must zero this array
     100   */
     101  struct v4l2_subdev_frame_size_enum {
     102  	__u32 index;
     103  	__u32 pad;
     104  	__u32 code;
     105  	__u32 min_width;
     106  	__u32 max_width;
     107  	__u32 min_height;
     108  	__u32 max_height;
     109  	__u32 which;
     110  	__u32 stream;
     111  	__u32 reserved[7];
     112  };
     113  
     114  /**
     115   * struct v4l2_subdev_frame_interval - Pad-level frame rate
     116   * @pad: pad number, as reported by the media API
     117   * @interval: frame interval in seconds
     118   * @stream: stream number, defined in subdev routing
     119   * @reserved: drivers and applications must zero this array
     120   */
     121  struct v4l2_subdev_frame_interval {
     122  	__u32 pad;
     123  	struct v4l2_fract interval;
     124  	__u32 stream;
     125  	__u32 reserved[8];
     126  };
     127  
     128  /**
     129   * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration
     130   * @pad: pad number, as reported by the media API
     131   * @index: frame interval index during enumeration
     132   * @code: format code (MEDIA_BUS_FMT_ definitions)
     133   * @width: frame width in pixels
     134   * @height: frame height in pixels
     135   * @interval: frame interval in seconds
     136   * @which: format type (from enum v4l2_subdev_format_whence)
     137   * @stream: stream number, defined in subdev routing
     138   * @reserved: drivers and applications must zero this array
     139   */
     140  struct v4l2_subdev_frame_interval_enum {
     141  	__u32 index;
     142  	__u32 pad;
     143  	__u32 code;
     144  	__u32 width;
     145  	__u32 height;
     146  	struct v4l2_fract interval;
     147  	__u32 which;
     148  	__u32 stream;
     149  	__u32 reserved[7];
     150  };
     151  
     152  /**
     153   * struct v4l2_subdev_selection - selection info
     154   *
     155   * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY
     156   * @pad: pad number, as reported by the media API
     157   * @target: Selection target, used to choose one of possible rectangles,
     158   *	    defined in v4l2-common.h; V4L2_SEL_TGT_* .
     159   * @flags: constraint flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
     160   * @r: coordinates of the selection window
     161   * @stream: stream number, defined in subdev routing
     162   * @reserved: for future use, set to zero for now
     163   *
     164   * Hardware may use multiple helper windows to process a video stream.
     165   * The structure is used to exchange this selection areas between
     166   * an application and a driver.
     167   */
     168  struct v4l2_subdev_selection {
     169  	__u32 which;
     170  	__u32 pad;
     171  	__u32 target;
     172  	__u32 flags;
     173  	struct v4l2_rect r;
     174  	__u32 stream;
     175  	__u32 reserved[7];
     176  };
     177  
     178  /**
     179   * struct v4l2_subdev_capability - subdev capabilities
     180   * @version: the driver versioning number
     181   * @capabilities: the subdev capabilities, see V4L2_SUBDEV_CAP_*
     182   * @reserved: for future use, set to zero for now
     183   */
     184  struct v4l2_subdev_capability {
     185  	__u32 version;
     186  	__u32 capabilities;
     187  	__u32 reserved[14];
     188  };
     189  
     190  /* The v4l2 sub-device video device node is registered in read-only mode. */
     191  #define V4L2_SUBDEV_CAP_RO_SUBDEV		0x00000001
     192  
     193  /* The v4l2 sub-device supports routing and multiplexed streams. */
     194  #define V4L2_SUBDEV_CAP_STREAMS			0x00000002
     195  
     196  /*
     197   * Is the route active? An active route will start when streaming is enabled
     198   * on a video node.
     199   */
     200  #define V4L2_SUBDEV_ROUTE_FL_ACTIVE		(1U << 0)
     201  
     202  /**
     203   * struct v4l2_subdev_route - A route inside a subdev
     204   *
     205   * @sink_pad: the sink pad index
     206   * @sink_stream: the sink stream identifier
     207   * @source_pad: the source pad index
     208   * @source_stream: the source stream identifier
     209   * @flags: route flags V4L2_SUBDEV_ROUTE_FL_*
     210   * @reserved: drivers and applications must zero this array
     211   */
     212  struct v4l2_subdev_route {
     213  	__u32 sink_pad;
     214  	__u32 sink_stream;
     215  	__u32 source_pad;
     216  	__u32 source_stream;
     217  	__u32 flags;
     218  	__u32 reserved[5];
     219  };
     220  
     221  /**
     222   * struct v4l2_subdev_routing - Subdev routing information
     223   *
     224   * @which: configuration type (from enum v4l2_subdev_format_whence)
     225   * @num_routes: the total number of routes in the routes array
     226   * @routes: pointer to the routes array
     227   * @reserved: drivers and applications must zero this array
     228   */
     229  struct v4l2_subdev_routing {
     230  	__u32 which;
     231  	__u32 num_routes;
     232  	__u64 routes;
     233  	__u32 reserved[6];
     234  };
     235  
     236  /*
     237   * The client is aware of streams. Setting this flag enables the use of 'stream'
     238   * fields (referring to the stream number) with various ioctls. If this is not
     239   * set (which is the default), the 'stream' fields will be forced to 0 by the
     240   * kernel.
     241   */
     242   #define V4L2_SUBDEV_CLIENT_CAP_STREAMS		(1U << 0)
     243  
     244  /**
     245   * struct v4l2_subdev_client_capability - Capabilities of the client accessing
     246   *					  the subdev
     247   *
     248   * @capabilities: A bitmask of V4L2_SUBDEV_CLIENT_CAP_* flags.
     249   */
     250  struct v4l2_subdev_client_capability {
     251  	__u64 capabilities;
     252  };
     253  
     254  /* Backwards compatibility define --- to be removed */
     255  #define v4l2_subdev_edid v4l2_edid
     256  
     257  #define VIDIOC_SUBDEV_QUERYCAP			_IOR('V',  0, struct v4l2_subdev_capability)
     258  #define VIDIOC_SUBDEV_G_FMT			_IOWR('V',  4, struct v4l2_subdev_format)
     259  #define VIDIOC_SUBDEV_S_FMT			_IOWR('V',  5, struct v4l2_subdev_format)
     260  #define VIDIOC_SUBDEV_G_FRAME_INTERVAL		_IOWR('V', 21, struct v4l2_subdev_frame_interval)
     261  #define VIDIOC_SUBDEV_S_FRAME_INTERVAL		_IOWR('V', 22, struct v4l2_subdev_frame_interval)
     262  #define VIDIOC_SUBDEV_ENUM_MBUS_CODE		_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
     263  #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE		_IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
     264  #define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL	_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
     265  #define VIDIOC_SUBDEV_G_CROP			_IOWR('V', 59, struct v4l2_subdev_crop)
     266  #define VIDIOC_SUBDEV_S_CROP			_IOWR('V', 60, struct v4l2_subdev_crop)
     267  #define VIDIOC_SUBDEV_G_SELECTION		_IOWR('V', 61, struct v4l2_subdev_selection)
     268  #define VIDIOC_SUBDEV_S_SELECTION		_IOWR('V', 62, struct v4l2_subdev_selection)
     269  #define VIDIOC_SUBDEV_G_ROUTING			_IOWR('V', 38, struct v4l2_subdev_routing)
     270  #define VIDIOC_SUBDEV_S_ROUTING			_IOWR('V', 39, struct v4l2_subdev_routing)
     271  #define VIDIOC_SUBDEV_G_CLIENT_CAP		_IOR('V',  101, struct v4l2_subdev_client_capability)
     272  #define VIDIOC_SUBDEV_S_CLIENT_CAP		_IOWR('V',  102, struct v4l2_subdev_client_capability)
     273  
     274  /* The following ioctls are identical to the ioctls in videodev2.h */
     275  #define VIDIOC_SUBDEV_G_STD			_IOR('V', 23, v4l2_std_id)
     276  #define VIDIOC_SUBDEV_S_STD			_IOW('V', 24, v4l2_std_id)
     277  #define VIDIOC_SUBDEV_ENUMSTD			_IOWR('V', 25, struct v4l2_standard)
     278  #define VIDIOC_SUBDEV_G_EDID			_IOWR('V', 40, struct v4l2_edid)
     279  #define VIDIOC_SUBDEV_S_EDID			_IOWR('V', 41, struct v4l2_edid)
     280  #define VIDIOC_SUBDEV_QUERYSTD			_IOR('V', 63, v4l2_std_id)
     281  #define VIDIOC_SUBDEV_S_DV_TIMINGS		_IOWR('V', 87, struct v4l2_dv_timings)
     282  #define VIDIOC_SUBDEV_G_DV_TIMINGS		_IOWR('V', 88, struct v4l2_dv_timings)
     283  #define VIDIOC_SUBDEV_ENUM_DV_TIMINGS		_IOWR('V', 98, struct v4l2_enum_dv_timings)
     284  #define VIDIOC_SUBDEV_QUERY_DV_TIMINGS		_IOR('V', 99, struct v4l2_dv_timings)
     285  #define VIDIOC_SUBDEV_DV_TIMINGS_CAP		_IOWR('V', 100, struct v4l2_dv_timings_cap)
     286  
     287  #endif