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