em28xx.h

来自「trident tm5600的linux驱动」· C头文件 代码 · 共 660 行 · 第 1/2 页

H
660
字号
/*   em28xx.h - driver for Empia EM2800/EM2820/2840 USB video capture devices   Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com>		      Ludovico Cavedon <cavedon@sssup.it>		      Mauro Carvalho Chehab <mchehab@infradead.org>   Based on the em2800 driver from Sascha Sommer <saschasommer@freenet.de>   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#ifndef _EM28XX_H#define _EM28XX_H#include "compat.h"#include <linux/videodev2.h>#include <media/videobuf-vmalloc.h>#include <linux/i2c.h>#include <linux/mutex.h>#include <media/ir-kbd-i2c.h>#if defined(CONFIG_VIDEO_EM28XX_DVB) || defined(CONFIG_VIDEO_EM28XX_DVB_MODULE)#include <media/videobuf-dvb.h>#endif#include "tuner-xc2028.h"#include "em28xx-reg.h"/* Boards supported by driver */#define EM2800_BOARD_UNKNOWN			0#define EM2820_BOARD_UNKNOWN			1#define EM2820_BOARD_TERRATEC_CINERGY_250	2#define EM2820_BOARD_PINNACLE_USB_2		3#define EM2820_BOARD_HAUPPAUGE_WINTV_USB_2      4#define EM2820_BOARD_MSI_VOX_USB_2              5#define EM2800_BOARD_TERRATEC_CINERGY_200       6#define EM2800_BOARD_LEADTEK_WINFAST_USBII      7#define EM2800_BOARD_KWORLD_USB2800             8#define EM2820_BOARD_PINNACLE_DVC_90		9#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900	10#define EM2880_BOARD_TERRATEC_HYBRID_XS		11#define EM2820_BOARD_KWORLD_PVRTV2800RF		12#define EM2880_BOARD_TERRATEC_PRODIGY_XS	13#define EM2820_BOARD_PROLINK_PLAYTV_USB2	14#define EM2800_BOARD_VGEAR_POCKETTV             15#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950	16#define EM2880_BOARD_PINNACLE_PCTV_HD_PRO	17#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2	18#define EM2860_BOARD_POINTNIX_INTRAORAL_CAMERA  19#define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600   20#define EM2800_BOARD_GRABBEEX_USB2800           21#define EM2750_BOARD_UNKNOWN			  22#define EM2750_BOARD_DLCW_130			  23#define EM2820_BOARD_DLINK_USB_TV		  24#define EM2820_BOARD_GADMEI_UTV310		  25#define EM2820_BOARD_HERCULES_SMART_TV_USB2	  26#define EM2820_BOARD_PINNACLE_USB_2_FM1216ME	  27#define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28#define EM2820_BOARD_PINNACLE_DVC_100		  29#define EM2820_BOARD_VIDEOLOGY_20K14XUSB	  30#define EM2821_BOARD_USBGEAR_VD204		  31#define EM2821_BOARD_SUPERCOMP_USB_2		  32#define EM2821_BOARD_PROLINK_PLAYTV_USB2	  33#define EM2860_BOARD_TERRATEC_HYBRID_XS		  34#define EM2860_BOARD_TYPHOON_DVD_MAKER		  35#define EM2860_BOARD_NETGMBH_CAM		  36#define EM2860_BOARD_GADMEI_UTV330		  37#define EM2861_BOARD_YAKUMO_MOVIE_MIXER		  38#define EM2861_BOARD_KWORLD_PVRTV_300U		  39#define EM2861_BOARD_PLEXTOR_PX_TV100U		  40#define EM2870_BOARD_KWORLD_350U		  41#define EM2870_BOARD_KWORLD_355U		  42#define EM2870_BOARD_TERRATEC_XS		  43#define EM2870_BOARD_TERRATEC_XS_MT2060		  44#define EM2870_BOARD_PINNACLE_PCTV_DVB		  45#define EM2870_BOARD_COMPRO_VIDEOMATE		  46#define EM2880_BOARD_KWORLD_DVB_305U		  47#define EM2880_BOARD_KWORLD_DVB_310U		  48#define EM2880_BOARD_MSI_DIGIVOX_AD		  49#define EM2880_BOARD_MSI_DIGIVOX_AD_II		  50#define EM2880_BOARD_TERRATEC_HYBRID_XS_FR	  51#define EM2881_BOARD_DNT_DA2_HYBRID		  52#define EM2881_BOARD_PINNACLE_HYBRID_PRO	  53#define EM2882_BOARD_KWORLD_VS_DVBT		  54#define EM2882_BOARD_TERRATEC_HYBRID_XS		  55#define EM2882_BOARD_PINNACLE_HYBRID_PRO	  56#define EM2883_BOARD_KWORLD_HYBRID_A316		  57#define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU	  58/* Limits minimum and default number of buffers */#define EM28XX_MIN_BUF 4#define EM28XX_DEF_BUF 8/* Params for validated field */#define EM28XX_BOARD_NOT_VALIDATED 1#define EM28XX_BOARD_VALIDATED	   0/* maximum number of em28xx boards */#define EM28XX_MAXBOARDS 4 /*FIXME: should be bigger *//* maximum number of frames that can be queued */#define EM28XX_NUM_FRAMES 5/* number of frames that get used for v4l2_read() */#define EM28XX_NUM_READ_FRAMES 2/* number of buffers for isoc transfers */#define EM28XX_NUM_BUFS 5/* number of packets for each buffer   windows requests only 40 packets .. so we better do the same   this is what I found out for all alternate numbers there! */#define EM28XX_NUM_PACKETS 40/* default alternate; 0 means choose the best */#define EM28XX_PINOUT 0#define EM28XX_INTERLACED_DEFAULT 1/*#define (use usbview if you want to get the other alternate number infos)#define#define alternate number 2#define 			Endpoint Address: 82			Direction: in			Attribute: 1			Type: Isoc			Max Packet Size: 1448			Interval: 125us  alternate number 7			Endpoint Address: 82			Direction: in			Attribute: 1			Type: Isoc			Max Packet Size: 3072			Interval: 125us*//* time to wait when stopping the isoc transfer */#define EM28XX_URB_TIMEOUT       msecs_to_jiffies(EM28XX_NUM_BUFS * EM28XX_NUM_PACKETS)/* time in msecs to wait for i2c writes to finish */#define EM2800_I2C_WRITE_TIMEOUT 20enum em28xx_mode {	EM28XX_MODE_UNDEFINED,	EM28XX_ANALOG_MODE,	EM28XX_DIGITAL_MODE,};enum em28xx_stream_state {	STREAM_OFF,	STREAM_INTERRUPT,	STREAM_ON,};struct em28xx;struct em28xx_usb_isoc_ctl {		/* max packet size of isoc transaction */	int				max_pkt_size;		/* number of allocated urbs */	int				num_bufs;		/* urb for isoc transfers */	struct urb			**urb;		/* transfer buffers for isoc transfer */	char				**transfer_buffer;		/* Last buffer command and region */	u8				cmd;	int				pos, size, pktsize;		/* Last field: ODD or EVEN? */	int				field;		/* Stores incomplete commands */	u32				tmp_buf;	int				tmp_buf_len;		/* Stores already requested buffers */	struct em28xx_buffer    	*buf;		/* Stores the number of received fields */	int				nfields;		/* isoc urb callback */	int (*isoc_copy) (struct em28xx *dev, struct urb *urb);};struct em28xx_fmt {	char  *name;	u32   fourcc;          /* v4l2 format id */};/* buffer for one video frame */struct em28xx_buffer {	/* common v4l buffer stuff -- must be first */	struct videobuf_buffer vb;	struct list_head frame;	int top_field;	int receiving;};struct em28xx_dmaqueue {	struct list_head       active;	struct list_head       queued;	wait_queue_head_t          wq;	/* Counters to control buffer fill */	int                        pos;};/* io methods */enum em28xx_io_method {	IO_NONE,	IO_READ,	IO_MMAP,};/* inputs */#define MAX_EM28XX_INPUT 4enum enum28xx_itype {	EM28XX_VMUX_COMPOSITE1 = 1,	EM28XX_VMUX_COMPOSITE2,	EM28XX_VMUX_COMPOSITE3,	EM28XX_VMUX_COMPOSITE4,	EM28XX_VMUX_SVIDEO,	EM28XX_VMUX_TELEVISION,	EM28XX_VMUX_CABLE,	EM28XX_VMUX_DVB,	EM28XX_VMUX_DEBUG,	EM28XX_RADIO,};enum em28xx_amux {	EM28XX_AMUX_VIDEO,	EM28XX_AMUX_LINE_IN,	EM28XX_AMUX_AC97_VIDEO,	EM28XX_AMUX_AC97_LINE_IN,};struct em28xx_input {	enum enum28xx_itype type;	unsigned int vmux;	enum em28xx_amux amux;};#define INPUT(nr) (&em28xx_boards[dev->model].input[nr])enum em28xx_decoder {	EM28XX_TVP5150,	EM28XX_SAA7113,	EM28XX_SAA7114};struct em28xx_reg_seq {	int reg;	unsigned char val, mask;	int sleep;};struct em28xx_board {	char *name;	int vchannels;	int tuner_type;	/* i2c flags */	unsigned int tda9887_conf;	unsigned int is_em2800:1;	unsigned int has_msp34xx:1;	unsigned int mts_firmware:1;	unsigned int has_12mhz_i2s:1;	unsigned int max_range_640_480:1;	unsigned int has_dvb:1;	unsigned int has_snapshot_button:1;	unsigned int valid:1;	enum em28xx_decoder decoder;	struct em28xx_input       input[MAX_EM28XX_INPUT];	struct em28xx_input	  radio;};struct em28xx_eeprom {	u32 id;			/* 0x9567eb1a */	u16 vendor_ID;	u16 product_ID;	u16 chip_conf;	u16 board_conf;	u16 string1, string2, string3;	u8 string_idx_table;};/* device states */enum em28xx_dev_state {	DEV_INITIALIZED = 0x01,	DEV_DISCONNECTED = 0x02,	DEV_MISCONFIGURED = 0x04,};#define EM28XX_AUDIO_BUFS 5#define EM28XX_NUM_AUDIO_PACKETS 64#define EM28XX_AUDIO_MAX_PACKET_SIZE 196 /* static value */#define EM28XX_CAPTURE_STREAM_EN 1

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?