192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev/* 292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Multimedia device API 392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Copyright (C) 2010 Nokia Corporation 592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Sakari Ailus <sakari.ailus@iki.fi> 892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * This program is free software; you can redistribute it and/or modify 1092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * it under the terms of the GNU General Public License version 2 as 1192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * published by the Free Software Foundation. 1292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 1392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * This program is distributed in the hope that it will be useful, 1492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * but WITHOUT ANY WARRANTY; without even the implied warranty of 1592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * GNU General Public License for more details. 1792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 1892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * You should have received a copy of the GNU General Public License 1992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * along with this program; if not, write to the Free Software 2092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev */ 2292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 2392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef __LINUX_MEDIA_H 2492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define __LINUX_MEDIA_H 2592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 2692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#include <linux/ioctl.h> 2792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#include <linux/types.h> 2892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#include <linux/version.h> 2992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 3092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_API_VERSION KERNEL_VERSION(0, 1, 0) 3192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 3292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchevstruct media_device_info { 3392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev char driver[16]; 3492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev char model[32]; 3592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev char serial[40]; 3692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev char bus_info[32]; 3792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 media_version; 3892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 hw_revision; 3992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 driver_version; 4092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 reserved[31]; 4192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev}; 4292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 4392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_ID_FLAG_NEXT (1 << 31) 4492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 4592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_TYPE_SHIFT 16 4692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_TYPE_MASK 0x00ff0000 4792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_SUBTYPE_MASK 0x0000ffff 4892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 4992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_DEVNODE (1 << MEDIA_ENT_TYPE_SHIFT) 5092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_DEVNODE_V4L (MEDIA_ENT_T_DEVNODE + 1) 5192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_DEVNODE_FB (MEDIA_ENT_T_DEVNODE + 2) 5292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_DEVNODE_ALSA (MEDIA_ENT_T_DEVNODE + 3) 5392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_DEVNODE_DVB (MEDIA_ENT_T_DEVNODE + 4) 5492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 5592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_V4L2_SUBDEV (2 << MEDIA_ENT_TYPE_SHIFT) 5692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR (MEDIA_ENT_T_V4L2_SUBDEV + 1) 5792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH (MEDIA_ENT_T_V4L2_SUBDEV + 2) 5892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_T_V4L2_SUBDEV_LENS (MEDIA_ENT_T_V4L2_SUBDEV + 3) 5992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 6092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_ENT_FL_DEFAULT (1 << 0) 6192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 6292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchevstruct media_entity_desc { 6392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 id; 6492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev char name[32]; 6592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 type; 6692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 revision; 6792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 flags; 6892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 group_id; 6992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u16 pads; 7092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u16 links; 7192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 7292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 reserved[4]; 7392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 7492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev union { 7592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev /* Node specifications */ 7692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct { 7792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 major; 7892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 minor; 7992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev } v4l; 8092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct { 8192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 major; 8292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 minor; 8392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev } fb; 8492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct { 8592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 card; 8692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 device; 8792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 subdevice; 8892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev } alsa; 8992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev int dvb; 9092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 9192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev /* Sub-device specifications */ 9292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev /* Nothing needed yet */ 9392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u8 raw[184]; 9492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev }; 9592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev}; 9692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 9792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_PAD_FL_SINK (1 << 0) 9892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_PAD_FL_SOURCE (1 << 1) 9992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 10092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchevstruct media_pad_desc { 10192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 entity; /* entity ID */ 10292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u16 index; /* pad index */ 10392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 flags; /* pad flags */ 10492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 reserved[2]; 10592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev}; 10692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 10792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_LNK_FL_ENABLED (1 << 0) 10892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_LNK_FL_IMMUTABLE (1 << 1) 10992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_LNK_FL_DYNAMIC (1 << 2) 11092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 11192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchevstruct media_link_desc { 11292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct media_pad_desc source; 11392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct media_pad_desc sink; 11492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 flags; 11592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 reserved[2]; 11692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev}; 11792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 11892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchevstruct media_links_enum { 11992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 entity; 12092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev /* Should have enough room for pads elements */ 12192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct media_pad_desc __user *pads; 12292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev /* Should have enough room for links elements */ 12392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev struct media_link_desc __user *links; 12492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __u32 reserved[4]; 12592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev}; 12692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 12792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_IOC_DEVICE_INFO _IOWR('|', 0x00, struct media_device_info) 12892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_IOC_ENUM_ENTITIES _IOWR('|', 0x01, struct media_entity_desc) 12992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_IOC_ENUM_LINKS _IOWR('|', 0x02, struct media_links_enum) 13092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define MEDIA_IOC_SETUP_LINK _IOWR('|', 0x03, struct media_link_desc) 13192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 13292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif /* __LINUX_MEDIA_H */ 133