130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * V4L2 subdev userspace API 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2010 Nokia Corporation 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Sakari Ailus <sakari.ailus@iki.fi> 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or modify 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * it under the terms of the GNU General Public License version 2 as 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * published by the Free Software Foundation. 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is distributed in the hope that it will be useful, 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * but WITHOUT ANY WARRANTY; without even the implied warranty of 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GNU General Public License for more details. 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * You should have received a copy of the GNU General Public License 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * along with this program; if not, write to the Free Software 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef __LINUX_V4L2_SUBDEV_H 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define __LINUX_V4L2_SUBDEV_H 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/ioctl.h> 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/v4l2-common.h> 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/v4l2-mediabus.h> 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * enum v4l2_subdev_format_whence - Media bus format type 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 3630692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum v4l2_subdev_format_whence { 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng V4L2_SUBDEV_FORMAT_TRY = 0, 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng V4L2_SUBDEV_FORMAT_ACTIVE = 1, 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_format - Pad-level media bus format 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @which: format type (from enum v4l2_subdev_format_whence) 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @format: media bus format (format code and frame size) 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 4730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_format { 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 which; 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct v4l2_mbus_framefmt format; 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[8]; 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_crop - Pad-level crop settings 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @which: format type (from enum v4l2_subdev_format_whence) 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @rect: pad crop rectangle boundaries 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 6030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_crop { 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 which; 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct v4l2_rect rect; 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[8]; 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @index: format index during enumeration 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @code: format code (from enum v4l2_mbus_pixelcode) 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 7330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_mbus_code_enum { 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 index; 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 code; 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[9]; 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_frame_size_enum - Media bus format enumeration 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @index: format index during enumeration 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @code: format code (from enum v4l2_mbus_pixelcode) 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 8630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_frame_size_enum { 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 index; 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 code; 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 min_width; 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 max_width; 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 min_height; 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 max_height; 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[9]; 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_frame_interval - Pad-level frame rate 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @interval: frame interval in seconds 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 10230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_frame_interval { 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct v4l2_fract interval; 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[9]; 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @index: frame interval index during enumeration 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @code: format code (from enum v4l2_mbus_pixelcode) 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @width: frame width in pixels 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @height: frame height in pixels 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @interval: frame interval in seconds 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 11730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_frame_interval_enum { 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 index; 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 code; 12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 width; 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 height; 12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct v4l2_fract interval; 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[9]; 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct v4l2_subdev_selection - selection info 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY 13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: pad number, as reported by the media API 13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @target: Selection target, used to choose one of possible rectangles, 13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * defined in v4l2-common.h; V4L2_SEL_TGT_* . 13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @flags: constraint flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*. 13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @r: coordinates of the selection window 13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @reserved: for future use, set to zero for now 13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Hardware may use multiple helper windows to process a video stream. 13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The structure is used to exchange this selection areas between 14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * an application and a driver. 14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 14230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_selection { 14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 which; 14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 target; 14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 flags; 14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct v4l2_rect r; 14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[8]; 14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 15130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct v4l2_subdev_edid { 15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 pad; 15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 start_block; 15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 blocks; 15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[5]; 15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 __user *edid; 15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format) 16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format) 16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_G_FRAME_INTERVAL \ 16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 21, struct v4l2_subdev_frame_interval) 16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_S_FRAME_INTERVAL \ 16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 22, struct v4l2_subdev_frame_interval) 16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_ENUM_MBUS_CODE \ 16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 2, struct v4l2_subdev_mbus_code_enum) 16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ 16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 74, struct v4l2_subdev_frame_size_enum) 16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ 17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) 17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_G_CROP _IOWR('V', 59, struct v4l2_subdev_crop) 17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop) 17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_G_SELECTION \ 17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 61, struct v4l2_subdev_selection) 17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_S_SELECTION \ 17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOWR('V', 62, struct v4l2_subdev_selection) 17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_subdev_edid) 17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_subdev_edid) 17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif 181