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