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 + -
显示快捷键?