📄 saa7134.h
字号:
/* * * v4l2 device driver for philips saa7134 based TV cards * * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> * * 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. */#include <linux/version.h>#define SAA7134_VERSION_CODE KERNEL_VERSION(0,2,14)#include <linux/pci.h>#include <linux/i2c.h>#include <linux/videodev2.h>#include <linux/kdev_t.h>#include <linux/input.h>#include <linux/notifier.h>#include <linux/delay.h>#include <asm/io.h>#include <media/tuner.h>#include <media/audiochip.h>#include <media/ir-common.h>#include <media/ir-kbd-i2c.h>#include <media/video-buf.h>#include <media/video-buf-dvb.h>#ifndef TRUE# define TRUE (1==1)#endif#ifndef FALSE# define FALSE (1==0)#endif#define UNSET (-1U)#include <sound/driver.h>#include <sound/core.h>#include <sound/pcm.h>/* ----------------------------------------------------------- *//* enums */enum saa7134_tvaudio_mode { TVAUDIO_FM_MONO = 1, TVAUDIO_FM_BG_STEREO = 2, TVAUDIO_FM_SAT_STEREO = 3, TVAUDIO_FM_K_STEREO = 4, TVAUDIO_NICAM_AM = 5, TVAUDIO_NICAM_FM = 6,};enum saa7134_audio_in { TV = 1, LINE1 = 2, LINE2 = 3, LINE2_LEFT,};enum saa7134_video_out { CCIR656 = 1,};/* ----------------------------------------------------------- *//* static data */struct saa7134_tvnorm { char *name; v4l2_std_id id; /* video decoder */ unsigned int sync_control; unsigned int luma_control; unsigned int chroma_ctrl1; unsigned int chroma_gain; unsigned int chroma_ctrl2; unsigned int vgate_misc; /* video scaler */ unsigned int h_start; unsigned int h_stop; unsigned int video_v_start; unsigned int video_v_stop; unsigned int vbi_v_start_0; unsigned int vbi_v_stop_0; unsigned int src_timing; unsigned int vbi_v_start_1;};struct saa7134_tvaudio { char *name; v4l2_std_id std; enum saa7134_tvaudio_mode mode; int carr1; int carr2;};struct saa7134_format { char *name; unsigned int fourcc; unsigned int depth; unsigned int pm; unsigned int vshift; /* vertical downsampling (for planar yuv) */ unsigned int hshift; /* horizontal downsampling (for planar yuv) */ unsigned int bswap:1; unsigned int wswap:1; unsigned int yuv:1; unsigned int planar:1; unsigned int uvswap:1;};/* ----------------------------------------------------------- *//* card configuration */#define SAA7134_BOARD_NOAUTO UNSET#define SAA7134_BOARD_UNKNOWN 0#define SAA7134_BOARD_PROTEUS_PRO 1#define SAA7134_BOARD_FLYVIDEO3000 2#define SAA7134_BOARD_FLYVIDEO2000 3#define SAA7134_BOARD_EMPRESS 4#define SAA7134_BOARD_MONSTERTV 5#define SAA7134_BOARD_MD9717 6#define SAA7134_BOARD_TVSTATION_RDS 7#define SAA7134_BOARD_CINERGY400 8#define SAA7134_BOARD_MD5044 9#define SAA7134_BOARD_KWORLD 10#define SAA7134_BOARD_CINERGY600 11#define SAA7134_BOARD_MD7134 12#define SAA7134_BOARD_TYPHOON_90031 13#define SAA7134_BOARD_ELSA 14#define SAA7134_BOARD_ELSA_500TV 15#define SAA7134_BOARD_ASUSTeK_TVFM7134 16#define SAA7134_BOARD_VA1000POWER 17#define SAA7134_BOARD_BMK_MPEX_NOTUNER 18#define SAA7134_BOARD_VIDEOMATE_TV 19#define SAA7134_BOARD_CRONOS_PLUS 20#define SAA7134_BOARD_10MOONSTVMASTER 21#define SAA7134_BOARD_MD2819 22#define SAA7134_BOARD_BMK_MPEX_TUNER 23#define SAA7134_BOARD_TVSTATION_DVR 24#define SAA7134_BOARD_ASUSTEK_TVFM7133 25#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26#define SAA7134_BOARD_MANLI_MTV002 27#define SAA7134_BOARD_MANLI_MTV001 28#define SAA7134_BOARD_TG3000TV 29#define SAA7134_BOARD_ECS_TVP3XP 30#define SAA7134_BOARD_ECS_TVP3XP_4CB5 31#define SAA7134_BOARD_AVACSSMARTTV 32#define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33#define SAA7134_BOARD_NOVAC_PRIMETV7133 34#define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35#define SAA7134_BOARD_UPMOST_PURPLE_TV 36#define SAA7134_BOARD_ITEMS_MTV005 37#define SAA7134_BOARD_CINERGY200 38#define SAA7134_BOARD_FLYTVPLATINUM_MINI 39#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41#define SAA7134_BOARD_SABRENT_SBTTVFM 42#define SAA7134_BOARD_ZOLID_XPERT_TV7134 43#define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44#define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46#define SAA7134_BOARD_CINERGY400_CARDBUS 47#define SAA7134_BOARD_CINERGY600_MK3 48#define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49#define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50#define SAA7134_BOARD_PROVIDEO_PV952 51#define SAA7134_BOARD_AVERMEDIA_305 52#define SAA7134_BOARD_ASUSTeK_TVFM7135 53#define SAA7134_BOARD_FLYTVPLATINUM_FM 54#define SAA7134_BOARD_FLYDVBTDUO 55#define SAA7134_BOARD_AVERMEDIA_307 56#define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57#define SAA7134_BOARD_ADS_INSTANT_TV 58#define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59#define SAA7134_BOARD_THYPHOON_DVBT_DUO_CARDBUS 60#define SAA7134_BOARD_PHILIPS_TOUGH 61#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62#define SAA7134_BOARD_KWORLD_XPERT 63#define SAA7134_BOARD_FLYTV_DIGIMATRIX 64#define SAA7134_BOARD_KWORLD_TERMINATOR 65#define SAA7134_BOARD_YUAN_TUN900 66#define SAA7134_BOARD_BEHOLD_409FM 67#define SAA7134_BOARD_GOTVIEW_7135 68#define SAA7134_BOARD_PHILIPS_EUROPA 69#define SAA7134_BOARD_VIDEOMATE_DVBT_300 70#define SAA7134_BOARD_VIDEOMATE_DVBT_200 71#define SAA7134_BOARD_RTD_VFG7350 72#define SAA7134_BOARD_RTD_VFG7330 73#define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74#define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75#define SAA7134_BOARD_MONSTERTV_MOBILE 76#define SAA7134_BOARD_PINNACLE_PCTV_110i 77#define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78#define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS 79#define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80#define SAA7134_BOARD_PHILIPS_TIGER 81#define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS 82#define SAA7134_MAXBOARDS 8#define SAA7134_INPUT_MAX 8/* ----------------------------------------------------------- *//* Since we support 2 remote types, lets tell them apart */#define SAA7134_REMOTE_GPIO 1#define SAA7134_REMOTE_I2C 2/* ----------------------------------------------------------- *//* Video Output Port Register Initialization Options */#define SET_T_CODE_POLARITY_NON_INVERTED (1 << 0)#define SET_CLOCK_NOT_DELAYED (1 << 1)#define SET_CLOCK_INVERTED (1 << 2)#define SET_VSYNC_OFF (1 << 3)struct saa7134_input { char *name; unsigned int vmux; enum saa7134_audio_in amux; unsigned int gpio; unsigned int tv:1;};enum saa7134_mpeg_type { SAA7134_MPEG_UNUSED, SAA7134_MPEG_EMPRESS, SAA7134_MPEG_DVB,};struct saa7134_board { char *name; unsigned int audio_clock; /* input switching */ unsigned int gpiomask; struct saa7134_input inputs[SAA7134_INPUT_MAX]; struct saa7134_input radio; struct saa7134_input mute; /* i2c chip info */ unsigned int tuner_type; unsigned int radio_type; unsigned char tuner_addr; unsigned char radio_addr; unsigned int tda9887_conf; /* peripheral I/O */ enum saa7134_video_out video_out; enum saa7134_mpeg_type mpeg; unsigned int vid_port_opts;};#define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name)#define card_is_empress(dev) (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg)#define card_is_dvb(dev) (SAA7134_MPEG_DVB == saa7134_boards[dev->board].mpeg)#define card_has_mpeg(dev) (SAA7134_MPEG_UNUSED != saa7134_boards[dev->board].mpeg)#define card(dev) (saa7134_boards[dev->board])#define card_in(dev,n) (saa7134_boards[dev->board].inputs[n])/* ----------------------------------------------------------- *//* device / file handle status */#define RESOURCE_OVERLAY 1#define RESOURCE_VIDEO 2#define RESOURCE_VBI 4#define INTERLACE_AUTO 0#define INTERLACE_ON 1#define INTERLACE_OFF 2#define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */struct saa7134_dev;struct saa7134_dma;/* saa7134 page table */struct saa7134_pgtable { unsigned int size; __le32 *cpu; dma_addr_t dma;};/* tvaudio thread status */struct saa7134_thread { pid_t pid; struct completion exit; wait_queue_head_t wq; unsigned int shutdown; unsigned int scan1; unsigned int scan2; unsigned int mode;};/* buffer for one video/vbi/ts frame */struct saa7134_buf { /* common v4l buffer stuff -- must be first */ struct videobuf_buffer vb; /* saa7134 specific */ struct saa7134_format *fmt; unsigned int top_seen; int (*activate)(struct saa7134_dev *dev, struct saa7134_buf *buf, struct saa7134_buf *next); /* page tables */ struct saa7134_pgtable *pt;};struct saa7134_dmaqueue { struct saa7134_dev *dev; struct saa7134_buf *curr; struct list_head queue; struct timer_list timeout; unsigned int need_two;};/* video filehandle status */struct saa7134_fh { struct saa7134_dev *dev; unsigned int radio; enum v4l2_buf_type type; unsigned int resources;#ifdef VIDIOC_G_PRIORITY enum v4l2_priority prio;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -