Home | History | Annotate | Download | only in linux
      1 /*
      2  * V4L2 subdev userspace API
      3  *
      4  * Copyright (C) 2010 Nokia Corporation
      5  *
      6  * Contacts: Laurent Pinchart <laurent.pinchart (at) ideasonboard.com>
      7  *	     Sakari Ailus <sakari.ailus (at) iki.fi>
      8  *
      9  * This program is free software; you can redistribute it and/or modify
     10  * it under the terms of the GNU General Public License version 2 as
     11  * published by the Free Software Foundation.
     12  *
     13  * This program is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  * GNU General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU General Public License
     19  * along with this program; if not, write to the Free Software
     20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     21  */
     22 
     23 #ifndef __LINUX_V4L2_SUBDEV_H
     24 #define __LINUX_V4L2_SUBDEV_H
     25 
     26 #include <linux/ioctl.h>
     27 #include <linux/types.h>
     28 #include <linux/v4l2-mediabus.h>
     29 
     30 /**
     31  * enum v4l2_subdev_format_whence - Media bus format type
     32  * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
     33  * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
     34  */
     35 enum v4l2_subdev_format_whence {
     36 	V4L2_SUBDEV_FORMAT_TRY = 0,
     37 	V4L2_SUBDEV_FORMAT_ACTIVE = 1,
     38 };
     39 
     40 /**
     41  * struct v4l2_subdev_format - Pad-level media bus format
     42  * @which: format type (from enum v4l2_subdev_format_whence)
     43  * @pad: pad number, as reported by the media API
     44  * @format: media bus format (format code and frame size)
     45  */
     46 struct v4l2_subdev_format {
     47 	__u32 which;
     48 	__u32 pad;
     49 	struct v4l2_mbus_framefmt format;
     50 	__u32 reserved[8];
     51 };
     52 
     53 /**
     54  * struct v4l2_subdev_crop - Pad-level crop settings
     55  * @which: format type (from enum v4l2_subdev_format_whence)
     56  * @pad: pad number, as reported by the media API
     57  * @rect: pad crop rectangle boundaries
     58  */
     59 struct v4l2_subdev_crop {
     60 	__u32 which;
     61 	__u32 pad;
     62 	struct v4l2_rect rect;
     63 	__u32 reserved[8];
     64 };
     65 
     66 /**
     67  * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
     68  * @pad: pad number, as reported by the media API
     69  * @index: format index during enumeration
     70  * @code: format code (from enum v4l2_mbus_pixelcode)
     71  */
     72 struct v4l2_subdev_mbus_code_enum {
     73 	__u32 pad;
     74 	__u32 index;
     75 	__u32 code;
     76 	__u32 reserved[9];
     77 };
     78 
     79 /**
     80  * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
     81  * @pad: pad number, as reported by the media API
     82  * @index: format index during enumeration
     83  * @code: format code (from enum v4l2_mbus_pixelcode)
     84  */
     85 struct v4l2_subdev_frame_size_enum {
     86 	__u32 index;
     87 	__u32 pad;
     88 	__u32 code;
     89 	__u32 min_width;
     90 	__u32 max_width;
     91 	__u32 min_height;
     92 	__u32 max_height;
     93 	__u32 reserved[9];
     94 };
     95 
     96 /**
     97  * struct v4l2_subdev_frame_interval - Pad-level frame rate
     98  * @pad: pad number, as reported by the media API
     99  * @interval: frame interval in seconds
    100  */
    101 struct v4l2_subdev_frame_interval {
    102 	__u32 pad;
    103 	struct v4l2_fract interval;
    104 	__u32 reserved[9];
    105 };
    106 
    107 /**
    108  * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration
    109  * @pad: pad number, as reported by the media API
    110  * @index: frame interval index during enumeration
    111  * @code: format code (from enum v4l2_mbus_pixelcode)
    112  * @width: frame width in pixels
    113  * @height: frame height in pixels
    114  * @interval: frame interval in seconds
    115  */
    116 struct v4l2_subdev_frame_interval_enum {
    117 	__u32 index;
    118 	__u32 pad;
    119 	__u32 code;
    120 	__u32 width;
    121 	__u32 height;
    122 	struct v4l2_fract interval;
    123 	__u32 reserved[9];
    124 };
    125 
    126 #define VIDIOC_SUBDEV_G_FMT	_IOWR('V',  4, struct v4l2_subdev_format)
    127 #define VIDIOC_SUBDEV_S_FMT	_IOWR('V',  5, struct v4l2_subdev_format)
    128 #define VIDIOC_SUBDEV_G_FRAME_INTERVAL \
    129 			_IOWR('V', 21, struct v4l2_subdev_frame_interval)
    130 #define VIDIOC_SUBDEV_S_FRAME_INTERVAL \
    131 			_IOWR('V', 22, struct v4l2_subdev_frame_interval)
    132 #define VIDIOC_SUBDEV_ENUM_MBUS_CODE \
    133 			_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
    134 #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
    135 			_IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
    136 #define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
    137 			_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
    138 #define VIDIOC_SUBDEV_G_CROP	_IOWR('V', 59, struct v4l2_subdev_crop)
    139 #define VIDIOC_SUBDEV_S_CROP	_IOWR('V', 60, struct v4l2_subdev_crop)
    140 
    141 #endif
    142