130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Multimedia device 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_MEDIA_H 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define __LINUX_MEDIA_H 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/ioctl.h> 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/version.h> 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_API_VERSION KERNEL_VERSION(0, 1, 0) 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct media_device_info { 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char driver[16]; 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char model[32]; 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char serial[40]; 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char bus_info[32]; 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 media_version; 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 hw_revision; 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 driver_version; 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[31]; 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_ID_FLAG_NEXT (1 << 31) 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_TYPE_SHIFT 16 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_TYPE_MASK 0x00ff0000 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_SUBTYPE_MASK 0x0000ffff 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_DEVNODE (1 << MEDIA_ENT_TYPE_SHIFT) 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_DEVNODE_V4L (MEDIA_ENT_T_DEVNODE + 1) 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_DEVNODE_FB (MEDIA_ENT_T_DEVNODE + 2) 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_DEVNODE_ALSA (MEDIA_ENT_T_DEVNODE + 3) 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_DEVNODE_DVB (MEDIA_ENT_T_DEVNODE + 4) 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_V4L2_SUBDEV (2 << MEDIA_ENT_TYPE_SHIFT) 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR (MEDIA_ENT_T_V4L2_SUBDEV + 1) 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH (MEDIA_ENT_T_V4L2_SUBDEV + 2) 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_V4L2_SUBDEV_LENS (MEDIA_ENT_T_V4L2_SUBDEV + 3) 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* A converter of analogue video to its digital representation. */ 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER (MEDIA_ENT_T_V4L2_SUBDEV + 4) 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_ENT_FL_DEFAULT (1 << 0) 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct media_entity_desc { 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 id; 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char name[32]; 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 type; 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 revision; 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 flags; 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 group_id; 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u16 pads; 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u16 links; 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[4]; 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Node specifications */ 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 major; 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 minor; 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } v4l; 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 major; 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 minor; 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } fb; 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 card; 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 device; 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 subdevice; 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } alsa; 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int dvb; 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Sub-device specifications */ 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Nothing needed yet */ 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 raw[184]; 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng }; 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_PAD_FL_SINK (1 << 0) 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_PAD_FL_SOURCE (1 << 1) 101e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define MEDIA_PAD_FL_MUST_CONNECT (1 << 2) 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct media_pad_desc { 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 entity; /* entity ID */ 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u16 index; /* pad index */ 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 flags; /* pad flags */ 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[2]; 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_LNK_FL_ENABLED (1 << 0) 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_LNK_FL_IMMUTABLE (1 << 1) 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_LNK_FL_DYNAMIC (1 << 2) 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct media_link_desc { 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct media_pad_desc source; 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct media_pad_desc sink; 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 flags; 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[2]; 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct media_links_enum { 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 entity; 12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Should have enough room for pads elements */ 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct media_pad_desc __user *pads; 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Should have enough room for links elements */ 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct media_link_desc __user *links; 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 reserved[4]; 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_IOC_DEVICE_INFO _IOWR('|', 0x00, struct media_device_info) 13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_IOC_ENUM_ENTITIES _IOWR('|', 0x01, struct media_entity_desc) 13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_IOC_ENUM_LINKS _IOWR('|', 0x02, struct media_links_enum) 13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MEDIA_IOC_SETUP_LINK _IOWR('|', 0x03, struct media_link_desc) 13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* __LINUX_MEDIA_H */ 136