1/* 2 * 3 * v4l2 device driver for philips saa7134 based TV cards 4 * 5 * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 */ 21 22#include <linux/version.h> 23#define SAA7134_VERSION_CODE KERNEL_VERSION(0, 2, 16) 24 25#include <linux/pci.h> 26#include <linux/i2c.h> 27#include <linux/videodev2.h> 28#include <linux/kdev_t.h> 29#include <linux/input.h> 30#include <linux/notifier.h> 31#include <linux/delay.h> 32#include <linux/mutex.h> 33 34#include <asm/io.h> 35 36#include <media/v4l2-common.h> 37#include <media/v4l2-ioctl.h> 38#include <media/v4l2-device.h> 39#include <media/tuner.h> 40#include <media/ir-common.h> 41#include <media/ir-kbd-i2c.h> 42#include <media/videobuf-dma-sg.h> 43#include <sound/core.h> 44#include <sound/pcm.h> 45#if defined(CONFIG_VIDEO_SAA7134_DVB) || defined(CONFIG_VIDEO_SAA7134_DVB_MODULE) 46#include <media/videobuf-dvb.h> 47#endif 48 49#define UNSET (-1U) 50 51/* ----------------------------------------------------------- */ 52/* enums */ 53 54enum saa7134_tvaudio_mode { 55 TVAUDIO_FM_MONO = 1, 56 TVAUDIO_FM_BG_STEREO = 2, 57 TVAUDIO_FM_SAT_STEREO = 3, 58 TVAUDIO_FM_K_STEREO = 4, 59 TVAUDIO_NICAM_AM = 5, 60 TVAUDIO_NICAM_FM = 6, 61}; 62 63enum saa7134_audio_in { 64 TV = 1, 65 LINE1 = 2, 66 LINE2 = 3, 67 LINE2_LEFT, 68}; 69 70enum saa7134_video_out { 71 CCIR656 = 1, 72}; 73 74/* ----------------------------------------------------------- */ 75/* static data */ 76 77struct saa7134_tvnorm { 78 char *name; 79 v4l2_std_id id; 80 81 /* video decoder */ 82 unsigned int sync_control; 83 unsigned int luma_control; 84 unsigned int chroma_ctrl1; 85 unsigned int chroma_gain; 86 unsigned int chroma_ctrl2; 87 unsigned int vgate_misc; 88 89 /* video scaler */ 90 unsigned int h_start; 91 unsigned int h_stop; 92 unsigned int video_v_start; 93 unsigned int video_v_stop; 94 unsigned int vbi_v_start_0; 95 unsigned int vbi_v_stop_0; 96 unsigned int src_timing; 97 unsigned int vbi_v_start_1; 98}; 99 100struct saa7134_tvaudio { 101 char *name; 102 v4l2_std_id std; 103 enum saa7134_tvaudio_mode mode; 104 int carr1; 105 int carr2; 106}; 107 108struct saa7134_format { 109 char *name; 110 unsigned int fourcc; 111 unsigned int depth; 112 unsigned int pm; 113 unsigned int vshift; /* vertical downsampling (for planar yuv) */ 114 unsigned int hshift; /* horizontal downsampling (for planar yuv) */ 115 unsigned int bswap:1; 116 unsigned int wswap:1; 117 unsigned int yuv:1; 118 unsigned int planar:1; 119 unsigned int uvswap:1; 120}; 121 122/* ----------------------------------------------------------- */ 123/* card configuration */ 124 125#define SAA7134_BOARD_NOAUTO UNSET 126#define SAA7134_BOARD_UNKNOWN 0 127#define SAA7134_BOARD_PROTEUS_PRO 1 128#define SAA7134_BOARD_FLYVIDEO3000 2 129#define SAA7134_BOARD_FLYVIDEO2000 3 130#define SAA7134_BOARD_EMPRESS 4 131#define SAA7134_BOARD_MONSTERTV 5 132#define SAA7134_BOARD_MD9717 6 133#define SAA7134_BOARD_TVSTATION_RDS 7 134#define SAA7134_BOARD_CINERGY400 8 135#define SAA7134_BOARD_MD5044 9 136#define SAA7134_BOARD_KWORLD 10 137#define SAA7134_BOARD_CINERGY600 11 138#define SAA7134_BOARD_MD7134 12 139#define SAA7134_BOARD_TYPHOON_90031 13 140#define SAA7134_BOARD_ELSA 14 141#define SAA7134_BOARD_ELSA_500TV 15 142#define SAA7134_BOARD_ASUSTeK_TVFM7134 16 143#define SAA7134_BOARD_VA1000POWER 17 144#define SAA7134_BOARD_BMK_MPEX_NOTUNER 18 145#define SAA7134_BOARD_VIDEOMATE_TV 19 146#define SAA7134_BOARD_CRONOS_PLUS 20 147#define SAA7134_BOARD_10MOONSTVMASTER 21 148#define SAA7134_BOARD_MD2819 22 149#define SAA7134_BOARD_BMK_MPEX_TUNER 23 150#define SAA7134_BOARD_TVSTATION_DVR 24 151#define SAA7134_BOARD_ASUSTEK_TVFM7133 25 152#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26 153#define SAA7134_BOARD_MANLI_MTV002 27 154#define SAA7134_BOARD_MANLI_MTV001 28 155#define SAA7134_BOARD_TG3000TV 29 156#define SAA7134_BOARD_ECS_TVP3XP 30 157#define SAA7134_BOARD_ECS_TVP3XP_4CB5 31 158#define SAA7134_BOARD_AVACSSMARTTV 32 159#define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33 160#define SAA7134_BOARD_NOVAC_PRIMETV7133 34 161#define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35 162#define SAA7134_BOARD_UPMOST_PURPLE_TV 36 163#define SAA7134_BOARD_ITEMS_MTV005 37 164#define SAA7134_BOARD_CINERGY200 38 165#define SAA7134_BOARD_FLYTVPLATINUM_MINI 39 166#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40 167#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41 168#define SAA7134_BOARD_SABRENT_SBTTVFM 42 169#define SAA7134_BOARD_ZOLID_XPERT_TV7134 43 170#define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44 171#define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45 172#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46 173#define SAA7134_BOARD_CINERGY400_CARDBUS 47 174#define SAA7134_BOARD_CINERGY600_MK3 48 175#define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49 176#define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50 177#define SAA7134_BOARD_PROVIDEO_PV952 51 178#define SAA7134_BOARD_AVERMEDIA_305 52 179#define SAA7134_BOARD_ASUSTeK_TVFM7135 53 180#define SAA7134_BOARD_FLYTVPLATINUM_FM 54 181#define SAA7134_BOARD_FLYDVBTDUO 55 182#define SAA7134_BOARD_AVERMEDIA_307 56 183#define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57 184#define SAA7134_BOARD_ADS_INSTANT_TV 58 185#define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59 186#define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60 187#define SAA7134_BOARD_PHILIPS_TOUGH 61 188#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62 189#define SAA7134_BOARD_KWORLD_XPERT 63 190#define SAA7134_BOARD_FLYTV_DIGIMATRIX 64 191#define SAA7134_BOARD_KWORLD_TERMINATOR 65 192#define SAA7134_BOARD_YUAN_TUN900 66 193#define SAA7134_BOARD_BEHOLD_409FM 67 194#define SAA7134_BOARD_GOTVIEW_7135 68 195#define SAA7134_BOARD_PHILIPS_EUROPA 69 196#define SAA7134_BOARD_VIDEOMATE_DVBT_300 70 197#define SAA7134_BOARD_VIDEOMATE_DVBT_200 71 198#define SAA7134_BOARD_RTD_VFG7350 72 199#define SAA7134_BOARD_RTD_VFG7330 73 200#define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74 201#define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75 202#define SAA7134_BOARD_MONSTERTV_MOBILE 76 203#define SAA7134_BOARD_PINNACLE_PCTV_110i 77 204#define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78 205#define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS 79 206#define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80 207#define SAA7134_BOARD_PHILIPS_TIGER 81 208#define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS 82 209#define SAA7134_BOARD_CINERGY250PCI 83 210#define SAA7134_BOARD_FLYDVB_TRIO 84 211#define SAA7134_BOARD_AVERMEDIA_777 85 212#define SAA7134_BOARD_FLYDVBT_LR301 86 213#define SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331 87 214#define SAA7134_BOARD_TEVION_DVBT_220RF 88 215#define SAA7134_BOARD_ELSA_700TV 89 216#define SAA7134_BOARD_KWORLD_ATSC110 90 217#define SAA7134_BOARD_AVERMEDIA_A169_B 91 218#define SAA7134_BOARD_AVERMEDIA_A169_B1 92 219#define SAA7134_BOARD_MD7134_BRIDGE_2 93 220#define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94 221#define SAA7134_BOARD_FLYVIDEO3000_NTSC 95 222#define SAA7134_BOARD_MEDION_MD8800_QUADRO 96 223#define SAA7134_BOARD_FLYDVBS_LR300 97 224#define SAA7134_BOARD_PROTEUS_2309 98 225#define SAA7134_BOARD_AVERMEDIA_A16AR 99 226#define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100 227#define SAA7134_BOARD_PINNACLE_PCTV_310i 101 228#define SAA7134_BOARD_AVERMEDIA_STUDIO_507 102 229#define SAA7134_BOARD_VIDEOMATE_DVBT_200A 103 230#define SAA7134_BOARD_HAUPPAUGE_HVR1110 104 231#define SAA7134_BOARD_CINERGY_HT_PCMCIA 105 232#define SAA7134_BOARD_ENCORE_ENLTV 106 233#define SAA7134_BOARD_ENCORE_ENLTV_FM 107 234#define SAA7134_BOARD_CINERGY_HT_PCI 108 235#define SAA7134_BOARD_PHILIPS_TIGER_S 109 236#define SAA7134_BOARD_AVERMEDIA_M102 110 237#define SAA7134_BOARD_ASUS_P7131_4871 111 238#define SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA 112 239#define SAA7134_BOARD_ECS_TVP3XP_4CB6 113 240#define SAA7134_BOARD_KWORLD_DVBT_210 114 241#define SAA7134_BOARD_SABRENT_TV_PCB05 115 242#define SAA7134_BOARD_10MOONSTVMASTER3 116 243#define SAA7134_BOARD_AVERMEDIA_SUPER_007 117 244#define SAA7134_BOARD_BEHOLD_401 118 245#define SAA7134_BOARD_BEHOLD_403 119 246#define SAA7134_BOARD_BEHOLD_403FM 120 247#define SAA7134_BOARD_BEHOLD_405 121 248#define SAA7134_BOARD_BEHOLD_405FM 122 249#define SAA7134_BOARD_BEHOLD_407 123 250#define SAA7134_BOARD_BEHOLD_407FM 124 251#define SAA7134_BOARD_BEHOLD_409 125 252#define SAA7134_BOARD_BEHOLD_505FM 126 253#define SAA7134_BOARD_BEHOLD_507_9FM 127 254#define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128 255#define SAA7134_BOARD_BEHOLD_607FM_MK3 129 256#define SAA7134_BOARD_BEHOLD_M6 130 257#define SAA7134_BOARD_TWINHAN_DTV_DVB_3056 131 258#define SAA7134_BOARD_GENIUS_TVGO_A11MCE 132 259#define SAA7134_BOARD_PHILIPS_SNAKE 133 260#define SAA7134_BOARD_CREATIX_CTX953 134 261#define SAA7134_BOARD_MSI_TVANYWHERE_AD11 135 262#define SAA7134_BOARD_AVERMEDIA_CARDBUS_506 136 263#define SAA7134_BOARD_AVERMEDIA_A16D 137 264#define SAA7134_BOARD_AVERMEDIA_M115 138 265#define SAA7134_BOARD_VIDEOMATE_T750 139 266#define SAA7134_BOARD_AVERMEDIA_A700_PRO 140 267#define SAA7134_BOARD_AVERMEDIA_A700_HYBRID 141 268#define SAA7134_BOARD_BEHOLD_H6 142 269#define SAA7134_BOARD_BEHOLD_M63 143 270#define SAA7134_BOARD_BEHOLD_M6_EXTRA 144 271#define SAA7134_BOARD_AVERMEDIA_M103 145 272#define SAA7134_BOARD_ASUSTeK_P7131_ANALOG 146 273#define SAA7134_BOARD_ASUSTeK_TIGER_3IN1 147 274#define SAA7134_BOARD_ENCORE_ENLTV_FM53 148 275#define SAA7134_BOARD_AVERMEDIA_M135A 149 276#define SAA7134_BOARD_REAL_ANGEL_220 150 277#define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI 151 278#define SAA7134_BOARD_ASUSTeK_TIGER 152 279#define SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG 153 280#define SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS 154 281#define SAA7134_BOARD_HAUPPAUGE_HVR1150 155 282#define SAA7134_BOARD_HAUPPAUGE_HVR1120 156 283#define SAA7134_BOARD_AVERMEDIA_STUDIO_507UA 157 284#define SAA7134_BOARD_AVERMEDIA_CARDBUS_501 158 285#define SAA7134_BOARD_BEHOLD_505RDS_MK5 159 286#define SAA7134_BOARD_BEHOLD_507RDS_MK3 160 287#define SAA7134_BOARD_BEHOLD_507RDS_MK5 161 288#define SAA7134_BOARD_BEHOLD_607FM_MK5 162 289#define SAA7134_BOARD_BEHOLD_609FM_MK3 163 290#define SAA7134_BOARD_BEHOLD_609FM_MK5 164 291#define SAA7134_BOARD_BEHOLD_607RDS_MK3 165 292#define SAA7134_BOARD_BEHOLD_607RDS_MK5 166 293#define SAA7134_BOARD_BEHOLD_609RDS_MK3 167 294#define SAA7134_BOARD_BEHOLD_609RDS_MK5 168 295#define SAA7134_BOARD_VIDEOMATE_S350 169 296#define SAA7134_BOARD_AVERMEDIA_STUDIO_505 170 297#define SAA7134_BOARD_BEHOLD_X7 171 298#define SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM 172 299#define SAA7134_BOARD_ZOLID_HYBRID_PCI 173 300#define SAA7134_BOARD_ASUS_EUROPA_HYBRID 174 301#define SAA7134_BOARD_LEADTEK_WINFAST_DTV1000S 175 302#define SAA7134_BOARD_BEHOLD_505RDS_MK3 176 303#define SAA7134_BOARD_HAWELL_HW_404M7 177 304#define SAA7134_BOARD_BEHOLD_H7 178 305#define SAA7134_BOARD_BEHOLD_A7 179 306#define SAA7134_BOARD_AVERMEDIA_M733A 180 307#define SAA7134_BOARD_TECHNOTREND_BUDGET_T3000 181 308 309#define SAA7134_MAXBOARDS 32 310#define SAA7134_INPUT_MAX 8 311 312/* ----------------------------------------------------------- */ 313/* Since we support 2 remote types, lets tell them apart */ 314 315#define SAA7134_REMOTE_GPIO 1 316#define SAA7134_REMOTE_I2C 2 317 318/* ----------------------------------------------------------- */ 319/* Video Output Port Register Initialization Options */ 320 321#define SET_T_CODE_POLARITY_NON_INVERTED (1 << 0) 322#define SET_CLOCK_NOT_DELAYED (1 << 1) 323#define SET_CLOCK_INVERTED (1 << 2) 324#define SET_VSYNC_OFF (1 << 3) 325 326struct saa7134_input { 327 char *name; 328 unsigned int vmux; 329 enum saa7134_audio_in amux; 330 unsigned int gpio; 331 unsigned int tv:1; 332}; 333 334enum saa7134_mpeg_type { 335 SAA7134_MPEG_UNUSED, 336 SAA7134_MPEG_EMPRESS, 337 SAA7134_MPEG_DVB, 338}; 339 340enum saa7134_mpeg_ts_type { 341 SAA7134_MPEG_TS_PARALLEL = 0, 342 SAA7134_MPEG_TS_SERIAL, 343}; 344 345struct saa7134_board { 346 char *name; 347 unsigned int audio_clock; 348 349 /* input switching */ 350 unsigned int gpiomask; 351 struct saa7134_input inputs[SAA7134_INPUT_MAX]; 352 struct saa7134_input radio; 353 struct saa7134_input mute; 354 355 /* i2c chip info */ 356 unsigned int tuner_type; 357 unsigned int radio_type; 358 unsigned char tuner_addr; 359 unsigned char radio_addr; 360 unsigned char empress_addr; 361 unsigned char rds_addr; 362 363 unsigned int tda9887_conf; 364 unsigned int tuner_config; 365 366 /* peripheral I/O */ 367 enum saa7134_video_out video_out; 368 enum saa7134_mpeg_type mpeg; 369 enum saa7134_mpeg_ts_type ts_type; 370 unsigned int vid_port_opts; 371 unsigned int ts_force_val:1; 372}; 373 374#define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name) 375#define card_is_empress(dev) (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg) 376#define card_is_dvb(dev) (SAA7134_MPEG_DVB == saa7134_boards[dev->board].mpeg) 377#define card_has_mpeg(dev) (SAA7134_MPEG_UNUSED != saa7134_boards[dev->board].mpeg) 378#define card(dev) (saa7134_boards[dev->board]) 379#define card_in(dev,n) (saa7134_boards[dev->board].inputs[n]) 380 381/* ----------------------------------------------------------- */ 382/* device / file handle status */ 383 384#define RESOURCE_OVERLAY 1 385#define RESOURCE_VIDEO 2 386#define RESOURCE_VBI 4 387 388#define INTERLACE_AUTO 0 389#define INTERLACE_ON 1 390#define INTERLACE_OFF 2 391 392#define BUFFER_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */ 393#define TS_BUFFER_TIMEOUT msecs_to_jiffies(1000) /* 1 second */ 394 395struct saa7134_dev; 396struct saa7134_dma; 397 398/* saa7134 page table */ 399struct saa7134_pgtable { 400 unsigned int size; 401 __le32 *cpu; 402 dma_addr_t dma; 403}; 404 405/* tvaudio thread status */ 406struct saa7134_thread { 407 struct task_struct *thread; 408 unsigned int scan1; 409 unsigned int scan2; 410 unsigned int mode; 411 unsigned int stopped; 412}; 413 414/* buffer for one video/vbi/ts frame */ 415struct saa7134_buf { 416 /* common v4l buffer stuff -- must be first */ 417 struct videobuf_buffer vb; 418 419 /* saa7134 specific */ 420 struct saa7134_format *fmt; 421 unsigned int top_seen; 422 int (*activate)(struct saa7134_dev *dev, 423 struct saa7134_buf *buf, 424 struct saa7134_buf *next); 425 426 /* page tables */ 427 struct saa7134_pgtable *pt; 428}; 429 430struct saa7134_dmaqueue { 431 struct saa7134_dev *dev; 432 struct saa7134_buf *curr; 433 struct list_head queue; 434 struct timer_list timeout; 435 unsigned int need_two; 436}; 437 438/* video filehandle status */ 439struct saa7134_fh { 440 struct saa7134_dev *dev; 441 unsigned int radio; 442 enum v4l2_buf_type type; 443 unsigned int resources; 444 enum v4l2_priority prio; 445 446 /* video overlay */ 447 struct v4l2_window win; 448 struct v4l2_clip clips[8]; 449 unsigned int nclips; 450 451 /* video capture */ 452 struct saa7134_format *fmt; 453 unsigned int width,height; 454 struct videobuf_queue cap; 455 struct saa7134_pgtable pt_cap; 456 457 /* vbi capture */ 458 struct videobuf_queue vbi; 459 struct saa7134_pgtable pt_vbi; 460}; 461 462/* dmasound dsp status */ 463struct saa7134_dmasound { 464 struct mutex lock; 465 int minor_mixer; 466 int minor_dsp; 467 unsigned int users_dsp; 468 469 /* mixer */ 470 enum saa7134_audio_in input; 471 unsigned int count; 472 unsigned int line1; 473 unsigned int line2; 474 475 /* dsp */ 476 unsigned int afmt; 477 unsigned int rate; 478 unsigned int channels; 479 unsigned int recording_on; 480 unsigned int dma_running; 481 unsigned int blocks; 482 unsigned int blksize; 483 unsigned int bufsize; 484 struct saa7134_pgtable pt; 485 struct videobuf_dmabuf dma; 486 unsigned int dma_blk; 487 unsigned int read_offset; 488 unsigned int read_count; 489 void * priv_data; 490 struct snd_pcm_substream *substream; 491}; 492 493/* ts/mpeg status */ 494struct saa7134_ts { 495 /* TS capture */ 496 struct saa7134_pgtable pt_ts; 497 int nr_packets; 498 int nr_bufs; 499}; 500 501/* ts/mpeg ops */ 502struct saa7134_mpeg_ops { 503 enum saa7134_mpeg_type type; 504 struct list_head next; 505 int (*init)(struct saa7134_dev *dev); 506 int (*fini)(struct saa7134_dev *dev); 507 void (*signal_change)(struct saa7134_dev *dev); 508}; 509 510/* global device status */ 511struct saa7134_dev { 512 struct list_head devlist; 513 struct mutex lock; 514 spinlock_t slock; 515 struct v4l2_prio_state prio; 516 struct v4l2_device v4l2_dev; 517 /* workstruct for loading modules */ 518 struct work_struct request_module_wk; 519 520 /* insmod option/autodetected */ 521 int autodetected; 522 523 /* various device info */ 524 unsigned int resources; 525 struct video_device *video_dev; 526 struct video_device *radio_dev; 527 struct video_device *vbi_dev; 528 struct saa7134_dmasound dmasound; 529 530 /* infrared remote */ 531 int has_remote; 532 struct card_ir *remote; 533 534 /* pci i/o */ 535 char name[32]; 536 int nr; 537 struct pci_dev *pci; 538 unsigned char pci_rev,pci_lat; 539 __u32 __iomem *lmmio; 540 __u8 __iomem *bmmio; 541 542 /* config info */ 543 unsigned int board; 544 unsigned int tuner_type; 545 unsigned int radio_type; 546 unsigned char tuner_addr; 547 unsigned char radio_addr; 548 549 unsigned int tda9887_conf; 550 unsigned int gpio_value; 551 552 /* i2c i/o */ 553 struct i2c_adapter i2c_adap; 554 struct i2c_client i2c_client; 555 unsigned char eedata[256]; 556 int has_rds; 557 558 /* video overlay */ 559 struct v4l2_framebuffer ovbuf; 560 struct saa7134_format *ovfmt; 561 unsigned int ovenable; 562 enum v4l2_field ovfield; 563 564 /* video+ts+vbi capture */ 565 struct saa7134_dmaqueue video_q; 566 struct saa7134_dmaqueue vbi_q; 567 unsigned int video_fieldcount; 568 unsigned int vbi_fieldcount; 569 570 /* various v4l controls */ 571 struct saa7134_tvnorm *tvnorm; /* video */ 572 struct saa7134_tvaudio *tvaudio; 573 unsigned int ctl_input; 574 int ctl_bright; 575 int ctl_contrast; 576 int ctl_hue; 577 int ctl_saturation; 578 int ctl_freq; 579 int ctl_mute; /* audio */ 580 int ctl_volume; 581 int ctl_invert; /* private */ 582 int ctl_mirror; 583 int ctl_y_odd; 584 int ctl_y_even; 585 int ctl_automute; 586 587 /* crop */ 588 struct v4l2_rect crop_bounds; 589 struct v4l2_rect crop_defrect; 590 struct v4l2_rect crop_current; 591 592 /* other global state info */ 593 unsigned int automute; 594 struct saa7134_thread thread; 595 struct saa7134_input *input; 596 struct saa7134_input *hw_input; 597 unsigned int hw_mute; 598 int last_carrier; 599 int nosignal; 600 unsigned int insuspend; 601 602 /* I2C keyboard data */ 603 struct IR_i2c_init_data init_data; 604 605 /* SAA7134_MPEG_* */ 606 struct saa7134_ts ts; 607 struct saa7134_dmaqueue ts_q; 608 int ts_started; 609 struct saa7134_mpeg_ops *mops; 610 611 /* SAA7134_MPEG_EMPRESS only */ 612 struct video_device *empress_dev; 613 struct videobuf_queue empress_tsq; 614 atomic_t empress_users; 615 struct work_struct empress_workqueue; 616 int empress_started; 617 618#if defined(CONFIG_VIDEO_SAA7134_DVB) || defined(CONFIG_VIDEO_SAA7134_DVB_MODULE) 619 /* SAA7134_MPEG_DVB only */ 620 struct videobuf_dvb_frontends frontends; 621 int (*original_demod_sleep)(struct dvb_frontend *fe); 622 int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage); 623 int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg); 624#endif 625 void (*gate_ctrl)(struct saa7134_dev *dev, int open); 626}; 627 628/* ----------------------------------------------------------- */ 629 630#define saa_readl(reg) readl(dev->lmmio + (reg)) 631#define saa_writel(reg,value) writel((value), dev->lmmio + (reg)); 632#define saa_andorl(reg,mask,value) \ 633 writel((readl(dev->lmmio+(reg)) & ~(mask)) |\ 634 ((value) & (mask)), dev->lmmio+(reg)) 635#define saa_setl(reg,bit) saa_andorl((reg),(bit),(bit)) 636#define saa_clearl(reg,bit) saa_andorl((reg),(bit),0) 637 638#define saa_readb(reg) readb(dev->bmmio + (reg)) 639#define saa_writeb(reg,value) writeb((value), dev->bmmio + (reg)); 640#define saa_andorb(reg,mask,value) \ 641 writeb((readb(dev->bmmio+(reg)) & ~(mask)) |\ 642 ((value) & (mask)), dev->bmmio+(reg)) 643#define saa_setb(reg,bit) saa_andorb((reg),(bit),(bit)) 644#define saa_clearb(reg,bit) saa_andorb((reg),(bit),0) 645 646#define saa_wait(us) { udelay(us); } 647 648#define SAA7134_NORMS (\ 649 V4L2_STD_PAL | V4L2_STD_PAL_N | \ 650 V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \ 651 V4L2_STD_NTSC | V4L2_STD_PAL_M | \ 652 V4L2_STD_PAL_60) 653 654#define GRP_EMPRESS (1) 655#define saa_call_all(dev, o, f, args...) do { \ 656 if (dev->gate_ctrl) \ 657 dev->gate_ctrl(dev, 1); \ 658 v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args); \ 659 if (dev->gate_ctrl) \ 660 dev->gate_ctrl(dev, 0); \ 661} while (0) 662 663#define saa_call_empress(dev, o, f, args...) ({ \ 664 long _rc; \ 665 if (dev->gate_ctrl) \ 666 dev->gate_ctrl(dev, 1); \ 667 _rc = v4l2_device_call_until_err(&(dev)->v4l2_dev, \ 668 GRP_EMPRESS, o, f , ##args); \ 669 if (dev->gate_ctrl) \ 670 dev->gate_ctrl(dev, 0); \ 671 _rc; \ 672}) 673 674/* ----------------------------------------------------------- */ 675/* saa7134-core.c */ 676 677extern struct list_head saa7134_devlist; 678extern struct mutex saa7134_devlist_lock; 679extern int saa7134_no_overlay; 680 681void saa7134_track_gpio(struct saa7134_dev *dev, char *msg); 682void saa7134_set_gpio(struct saa7134_dev *dev, int bit_no, int value); 683 684#define SAA7134_PGTABLE_SIZE 4096 685 686int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt); 687int saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt, 688 struct scatterlist *list, unsigned int length, 689 unsigned int startpage); 690void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt); 691 692int saa7134_buffer_count(unsigned int size, unsigned int count); 693int saa7134_buffer_startpage(struct saa7134_buf *buf); 694unsigned long saa7134_buffer_base(struct saa7134_buf *buf); 695 696int saa7134_buffer_queue(struct saa7134_dev *dev, struct saa7134_dmaqueue *q, 697 struct saa7134_buf *buf); 698void saa7134_buffer_finish(struct saa7134_dev *dev, struct saa7134_dmaqueue *q, 699 unsigned int state); 700void saa7134_buffer_next(struct saa7134_dev *dev, struct saa7134_dmaqueue *q); 701void saa7134_buffer_timeout(unsigned long data); 702void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf); 703 704int saa7134_set_dmabits(struct saa7134_dev *dev); 705 706extern int (*saa7134_dmasound_init)(struct saa7134_dev *dev); 707extern int (*saa7134_dmasound_exit)(struct saa7134_dev *dev); 708 709 710/* ----------------------------------------------------------- */ 711/* saa7134-cards.c */ 712 713extern struct saa7134_board saa7134_boards[]; 714extern const unsigned int saa7134_bcount; 715extern struct pci_device_id __devinitdata saa7134_pci_tbl[]; 716 717extern int saa7134_board_init1(struct saa7134_dev *dev); 718extern int saa7134_board_init2(struct saa7134_dev *dev); 719int saa7134_tuner_callback(void *priv, int component, int command, int arg); 720 721 722/* ----------------------------------------------------------- */ 723/* saa7134-i2c.c */ 724 725int saa7134_i2c_register(struct saa7134_dev *dev); 726int saa7134_i2c_unregister(struct saa7134_dev *dev); 727 728 729/* ----------------------------------------------------------- */ 730/* saa7134-video.c */ 731 732extern unsigned int video_debug; 733extern struct video_device saa7134_video_template; 734extern struct video_device saa7134_radio_template; 735 736int saa7134_s_ctrl_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, struct v4l2_control *c); 737int saa7134_g_ctrl_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, struct v4l2_control *c); 738int saa7134_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *c); 739int saa7134_s_std_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, v4l2_std_id *id); 740 741int saa7134_videoport_init(struct saa7134_dev *dev); 742void saa7134_set_tvnorm_hw(struct saa7134_dev *dev); 743 744int saa7134_video_init1(struct saa7134_dev *dev); 745int saa7134_video_init2(struct saa7134_dev *dev); 746void saa7134_irq_video_signalchange(struct saa7134_dev *dev); 747void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status); 748 749 750/* ----------------------------------------------------------- */ 751/* saa7134-ts.c */ 752 753#define TS_PACKET_SIZE 188 /* TS packets 188 bytes */ 754 755extern struct videobuf_queue_ops saa7134_ts_qops; 756 757int saa7134_ts_init1(struct saa7134_dev *dev); 758int saa7134_ts_fini(struct saa7134_dev *dev); 759void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status); 760 761int saa7134_ts_register(struct saa7134_mpeg_ops *ops); 762void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops); 763 764int saa7134_ts_init_hw(struct saa7134_dev *dev); 765 766int saa7134_ts_start(struct saa7134_dev *dev); 767int saa7134_ts_stop(struct saa7134_dev *dev); 768 769/* ----------------------------------------------------------- */ 770/* saa7134-vbi.c */ 771 772extern struct videobuf_queue_ops saa7134_vbi_qops; 773extern struct video_device saa7134_vbi_template; 774 775int saa7134_vbi_init1(struct saa7134_dev *dev); 776int saa7134_vbi_fini(struct saa7134_dev *dev); 777void saa7134_irq_vbi_done(struct saa7134_dev *dev, unsigned long status); 778 779 780/* ----------------------------------------------------------- */ 781/* saa7134-tvaudio.c */ 782 783int saa7134_tvaudio_rx2mode(u32 rx); 784 785void saa7134_tvaudio_setmute(struct saa7134_dev *dev); 786void saa7134_tvaudio_setinput(struct saa7134_dev *dev, 787 struct saa7134_input *in); 788void saa7134_tvaudio_setvolume(struct saa7134_dev *dev, int level); 789int saa7134_tvaudio_getstereo(struct saa7134_dev *dev); 790 791void saa7134_tvaudio_init(struct saa7134_dev *dev); 792int saa7134_tvaudio_init2(struct saa7134_dev *dev); 793int saa7134_tvaudio_fini(struct saa7134_dev *dev); 794int saa7134_tvaudio_do_scan(struct saa7134_dev *dev); 795 796int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value); 797 798void saa7134_enable_i2s(struct saa7134_dev *dev); 799 800/* ----------------------------------------------------------- */ 801/* saa7134-oss.c */ 802 803extern const struct file_operations saa7134_dsp_fops; 804extern const struct file_operations saa7134_mixer_fops; 805 806int saa7134_oss_init1(struct saa7134_dev *dev); 807int saa7134_oss_fini(struct saa7134_dev *dev); 808void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status); 809 810/* ----------------------------------------------------------- */ 811/* saa7134-input.c */ 812 813int saa7134_input_init1(struct saa7134_dev *dev); 814void saa7134_input_fini(struct saa7134_dev *dev); 815void saa7134_input_irq(struct saa7134_dev *dev); 816void saa7134_probe_i2c_ir(struct saa7134_dev *dev); 817int saa7134_ir_start(struct saa7134_dev *dev); 818void saa7134_ir_stop(struct saa7134_dev *dev); 819 820 821/* 822 * Local variables: 823 * c-basic-offset: 8 824 * End: 825 */ 826