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,14) 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/tuner.h> 38#include <media/ir-common.h> 39#include <media/ir-kbd-i2c.h> 40#include <media/video-buf.h> 41#include <sound/driver.h> 42#include <sound/core.h> 43#include <sound/pcm.h> 44#if defined(CONFIG_VIDEO_BUF_DVB) || defined(CONFIG_VIDEO_BUF_DVB_MODULE) 45#include <media/video-buf-dvb.h> 46#endif 47 48#define UNSET (-1U) 49 50/* ----------------------------------------------------------- */ 51/* enums */ 52 53enum saa7134_tvaudio_mode { 54 TVAUDIO_FM_MONO = 1, 55 TVAUDIO_FM_BG_STEREO = 2, 56 TVAUDIO_FM_SAT_STEREO = 3, 57 TVAUDIO_FM_K_STEREO = 4, 58 TVAUDIO_NICAM_AM = 5, 59 TVAUDIO_NICAM_FM = 6, 60}; 61 62enum saa7134_audio_in { 63 TV = 1, 64 LINE1 = 2, 65 LINE2 = 3, 66 LINE2_LEFT, 67}; 68 69enum saa7134_video_out { 70 CCIR656 = 1, 71}; 72 73/* ----------------------------------------------------------- */ 74/* static data */ 75 76struct saa7134_tvnorm { 77 char *name; 78 v4l2_std_id id; 79 80 /* video decoder */ 81 unsigned int sync_control; 82 unsigned int luma_control; 83 unsigned int chroma_ctrl1; 84 unsigned int chroma_gain; 85 unsigned int chroma_ctrl2; 86 unsigned int vgate_misc; 87 88 /* video scaler */ 89 unsigned int h_start; 90 unsigned int h_stop; 91 unsigned int video_v_start; 92 unsigned int video_v_stop; 93 unsigned int vbi_v_start_0; 94 unsigned int vbi_v_stop_0; 95 unsigned int src_timing; 96 unsigned int vbi_v_start_1; 97}; 98 99struct saa7134_tvaudio { 100 char *name; 101 v4l2_std_id std; 102 enum saa7134_tvaudio_mode mode; 103 int carr1; 104 int carr2; 105}; 106 107struct saa7134_format { 108 char *name; 109 unsigned int fourcc; 110 unsigned int depth; 111 unsigned int pm; 112 unsigned int vshift; /* vertical downsampling (for planar yuv) */ 113 unsigned int hshift; /* horizontal downsampling (for planar yuv) */ 114 unsigned int bswap:1; 115 unsigned int wswap:1; 116 unsigned int yuv:1; 117 unsigned int planar:1; 118 unsigned int uvswap:1; 119}; 120 121/* ----------------------------------------------------------- */ 122/* card configuration */ 123 124#define SAA7134_BOARD_NOAUTO UNSET 125#define SAA7134_BOARD_UNKNOWN 0 126#define SAA7134_BOARD_PROTEUS_PRO 1 127#define SAA7134_BOARD_FLYVIDEO3000 2 128#define SAA7134_BOARD_FLYVIDEO2000 3 129#define SAA7134_BOARD_EMPRESS 4 130#define SAA7134_BOARD_MONSTERTV 5 131#define SAA7134_BOARD_MD9717 6 132#define SAA7134_BOARD_TVSTATION_RDS 7 133#define SAA7134_BOARD_CINERGY400 8 134#define SAA7134_BOARD_MD5044 9 135#define SAA7134_BOARD_KWORLD 10 136#define SAA7134_BOARD_CINERGY600 11 137#define SAA7134_BOARD_MD7134 12 138#define SAA7134_BOARD_TYPHOON_90031 13 139#define SAA7134_BOARD_ELSA 14 140#define SAA7134_BOARD_ELSA_500TV 15 141#define SAA7134_BOARD_ASUSTeK_TVFM7134 16 142#define SAA7134_BOARD_VA1000POWER 17 143#define SAA7134_BOARD_BMK_MPEX_NOTUNER 18 144#define SAA7134_BOARD_VIDEOMATE_TV 19 145#define SAA7134_BOARD_CRONOS_PLUS 20 146#define SAA7134_BOARD_10MOONSTVMASTER 21 147#define SAA7134_BOARD_MD2819 22 148#define SAA7134_BOARD_BMK_MPEX_TUNER 23 149#define SAA7134_BOARD_TVSTATION_DVR 24 150#define SAA7134_BOARD_ASUSTEK_TVFM7133 25 151#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26 152#define SAA7134_BOARD_MANLI_MTV002 27 153#define SAA7134_BOARD_MANLI_MTV001 28 154#define SAA7134_BOARD_TG3000TV 29 155#define SAA7134_BOARD_ECS_TVP3XP 30 156#define SAA7134_BOARD_ECS_TVP3XP_4CB5 31 157#define SAA7134_BOARD_AVACSSMARTTV 32 158#define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33 159#define SAA7134_BOARD_NOVAC_PRIMETV7133 34 160#define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35 161#define SAA7134_BOARD_UPMOST_PURPLE_TV 36 162#define SAA7134_BOARD_ITEMS_MTV005 37 163#define SAA7134_BOARD_CINERGY200 38 164#define SAA7134_BOARD_FLYTVPLATINUM_MINI 39 165#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40 166#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41 167#define SAA7134_BOARD_SABRENT_SBTTVFM 42 168#define SAA7134_BOARD_ZOLID_XPERT_TV7134 43 169#define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44 170#define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45 171#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46 172#define SAA7134_BOARD_CINERGY400_CARDBUS 47 173#define SAA7134_BOARD_CINERGY600_MK3 48 174#define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49 175#define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50 176#define SAA7134_BOARD_PROVIDEO_PV952 51 177#define SAA7134_BOARD_AVERMEDIA_305 52 178#define SAA7134_BOARD_ASUSTeK_TVFM7135 53 179#define SAA7134_BOARD_FLYTVPLATINUM_FM 54 180#define SAA7134_BOARD_FLYDVBTDUO 55 181#define SAA7134_BOARD_AVERMEDIA_307 56 182#define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57 183#define SAA7134_BOARD_ADS_INSTANT_TV 58 184#define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59 185#define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60 186#define SAA7134_BOARD_PHILIPS_TOUGH 61 187#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62 188#define SAA7134_BOARD_KWORLD_XPERT 63 189#define SAA7134_BOARD_FLYTV_DIGIMATRIX 64 190#define SAA7134_BOARD_KWORLD_TERMINATOR 65 191#define SAA7134_BOARD_YUAN_TUN900 66 192#define SAA7134_BOARD_BEHOLD_409FM 67 193#define SAA7134_BOARD_GOTVIEW_7135 68 194#define SAA7134_BOARD_PHILIPS_EUROPA 69 195#define SAA7134_BOARD_VIDEOMATE_DVBT_300 70 196#define SAA7134_BOARD_VIDEOMATE_DVBT_200 71 197#define SAA7134_BOARD_RTD_VFG7350 72 198#define SAA7134_BOARD_RTD_VFG7330 73 199#define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74 200#define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75 201#define SAA7134_BOARD_MONSTERTV_MOBILE 76 202#define SAA7134_BOARD_PINNACLE_PCTV_110i 77 203#define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78 204#define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS 79 205#define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80 206#define SAA7134_BOARD_PHILIPS_TIGER 81 207#define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS 82 208#define SAA7134_BOARD_CINERGY250PCI 83 209#define SAA7134_BOARD_FLYDVB_TRIO 84 210#define SAA7134_BOARD_AVERMEDIA_777 85 211#define SAA7134_BOARD_FLYDVBT_LR301 86 212#define SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331 87 213#define SAA7134_BOARD_TEVION_DVBT_220RF 88 214#define SAA7134_BOARD_ELSA_700TV 89 215#define SAA7134_BOARD_KWORLD_ATSC110 90 216#define SAA7134_BOARD_AVERMEDIA_A169_B 91 217#define SAA7134_BOARD_AVERMEDIA_A169_B1 92 218#define SAA7134_BOARD_MD7134_BRIDGE_2 93 219#define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94 220#define SAA7134_BOARD_FLYVIDEO3000_NTSC 95 221#define SAA7134_BOARD_MEDION_MD8800_QUADRO 96 222#define SAA7134_BOARD_FLYDVBS_LR300 97 223#define SAA7134_BOARD_PROTEUS_2309 98 224#define SAA7134_BOARD_AVERMEDIA_A16AR 99 225#define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100 226#define SAA7134_BOARD_PINNACLE_PCTV_310i 101 227#define SAA7134_BOARD_AVERMEDIA_STUDIO_507 102 228#define SAA7134_BOARD_VIDEOMATE_DVBT_200A 103 229#define SAA7134_BOARD_HAUPPAUGE_HVR1110 104 230#define SAA7134_BOARD_CINERGY_HT_PCMCIA 105 231#define SAA7134_BOARD_ENCORE_ENLTV 106 232#define SAA7134_BOARD_ENCORE_ENLTV_FM 107 233#define SAA7134_BOARD_CINERGY_HT_PCI 108 234#define SAA7134_BOARD_PHILIPS_TIGER_S 109 235#define SAA7134_BOARD_AVERMEDIA_M102 110 236#define SAA7134_BOARD_ASUS_P7131_4871 111 237#define SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA 112 238#define SAA7134_BOARD_ECS_TVP3XP_4CB6 113 239#define SAA7134_BOARD_KWORLD_DVBT_210 114 240#define SAA7134_BOARD_SABRENT_TV_PCB05 115 241 242#define SAA7134_MAXBOARDS 8 243#define SAA7134_INPUT_MAX 8 244 245/* ----------------------------------------------------------- */ 246/* Since we support 2 remote types, lets tell them apart */ 247 248#define SAA7134_REMOTE_GPIO 1 249#define SAA7134_REMOTE_I2C 2 250 251/* ----------------------------------------------------------- */ 252/* Video Output Port Register Initialization Options */ 253 254#define SET_T_CODE_POLARITY_NON_INVERTED (1 << 0) 255#define SET_CLOCK_NOT_DELAYED (1 << 1) 256#define SET_CLOCK_INVERTED (1 << 2) 257#define SET_VSYNC_OFF (1 << 3) 258 259struct saa7134_input { 260 char *name; 261 unsigned int vmux; 262 enum saa7134_audio_in amux; 263 unsigned int gpio; 264 unsigned int tv:1; 265}; 266 267enum saa7134_mpeg_type { 268 SAA7134_MPEG_UNUSED, 269 SAA7134_MPEG_EMPRESS, 270 SAA7134_MPEG_DVB, 271}; 272 273struct saa7134_board { 274 char *name; 275 unsigned int audio_clock; 276 277 /* input switching */ 278 unsigned int gpiomask; 279 struct saa7134_input inputs[SAA7134_INPUT_MAX]; 280 struct saa7134_input radio; 281 struct saa7134_input mute; 282 283 /* i2c chip info */ 284 unsigned int tuner_type; 285 unsigned int radio_type; 286 unsigned char tuner_addr; 287 unsigned char radio_addr; 288 289 unsigned int tda9887_conf; 290 unsigned int tuner_config; 291 292 /* peripheral I/O */ 293 enum saa7134_video_out video_out; 294 enum saa7134_mpeg_type mpeg; 295 unsigned int vid_port_opts; 296}; 297 298#define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name) 299#define card_is_empress(dev) (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg) 300#define card_is_dvb(dev) (SAA7134_MPEG_DVB == saa7134_boards[dev->board].mpeg) 301#define card_has_mpeg(dev) (SAA7134_MPEG_UNUSED != saa7134_boards[dev->board].mpeg) 302#define card(dev) (saa7134_boards[dev->board]) 303#define card_in(dev,n) (saa7134_boards[dev->board].inputs[n]) 304 305/* ----------------------------------------------------------- */ 306/* device / file handle status */ 307 308#define RESOURCE_OVERLAY 1 309#define RESOURCE_VIDEO 2 310#define RESOURCE_VBI 4 311 312#define INTERLACE_AUTO 0 313#define INTERLACE_ON 1 314#define INTERLACE_OFF 2 315 316#define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */ 317 318struct saa7134_dev; 319struct saa7134_dma; 320 321/* saa7134 page table */ 322struct saa7134_pgtable { 323 unsigned int size; 324 __le32 *cpu; 325 dma_addr_t dma; 326}; 327 328/* tvaudio thread status */ 329struct saa7134_thread { 330 pid_t pid; 331 struct completion exit; 332 wait_queue_head_t wq; 333 unsigned int shutdown; 334 unsigned int scan1; 335 unsigned int scan2; 336 unsigned int mode; 337}; 338 339/* buffer for one video/vbi/ts frame */ 340struct saa7134_buf { 341 /* common v4l buffer stuff -- must be first */ 342 struct videobuf_buffer vb; 343 344 /* saa7134 specific */ 345 struct saa7134_format *fmt; 346 unsigned int top_seen; 347 int (*activate)(struct saa7134_dev *dev, 348 struct saa7134_buf *buf, 349 struct saa7134_buf *next); 350 351 /* page tables */ 352 struct saa7134_pgtable *pt; 353}; 354 355struct saa7134_dmaqueue { 356 struct saa7134_dev *dev; 357 struct saa7134_buf *curr; 358 struct list_head queue; 359 struct timer_list timeout; 360 unsigned int need_two; 361}; 362 363/* video filehandle status */ 364struct saa7134_fh { 365 struct saa7134_dev *dev; 366 unsigned int radio; 367 enum v4l2_buf_type type; 368 unsigned int resources; 369#ifdef VIDIOC_G_PRIORITY 370 enum v4l2_priority prio; 371#endif 372 373 /* video overlay */ 374 struct v4l2_window win; 375 struct v4l2_clip clips[8]; 376 unsigned int nclips; 377 378 /* video capture */ 379 struct saa7134_format *fmt; 380 unsigned int width,height; 381 struct videobuf_queue cap; 382 struct saa7134_pgtable pt_cap; 383 384 /* vbi capture */ 385 struct videobuf_queue vbi; 386 struct saa7134_pgtable pt_vbi; 387}; 388 389/* dmasound dsp status */ 390struct saa7134_dmasound { 391 struct mutex lock; 392 int minor_mixer; 393 int minor_dsp; 394 unsigned int users_dsp; 395 396 /* mixer */ 397 enum saa7134_audio_in input; 398 unsigned int count; 399 unsigned int line1; 400 unsigned int line2; 401 402 /* dsp */ 403 unsigned int afmt; 404 unsigned int rate; 405 unsigned int channels; 406 unsigned int recording_on; 407 unsigned int dma_running; 408 unsigned int blocks; 409 unsigned int blksize; 410 unsigned int bufsize; 411 struct saa7134_pgtable pt; 412 struct videobuf_dmabuf dma; 413 wait_queue_head_t wq; 414 unsigned int dma_blk; 415 unsigned int read_offset; 416 unsigned int read_count; 417 void * priv_data; 418 struct snd_pcm_substream *substream; 419}; 420 421/* ts/mpeg status */ 422struct saa7134_ts { 423 /* TS capture */ 424 struct saa7134_pgtable pt_ts; 425 int nr_packets; 426 int nr_bufs; 427}; 428 429/* ts/mpeg ops */ 430struct saa7134_mpeg_ops { 431 enum saa7134_mpeg_type type; 432 struct list_head next; 433 int (*init)(struct saa7134_dev *dev); 434 int (*fini)(struct saa7134_dev *dev); 435 void (*signal_change)(struct saa7134_dev *dev); 436}; 437 438/* global device status */ 439struct saa7134_dev { 440 struct list_head devlist; 441 struct mutex lock; 442 spinlock_t slock; 443#ifdef VIDIOC_G_PRIORITY 444 struct v4l2_prio_state prio; 445#endif 446 /* workstruct for loading modules */ 447 struct work_struct request_module_wk; 448 449 /* insmod option/autodetected */ 450 int autodetected; 451 452 /* various device info */ 453 unsigned int resources; 454 struct video_device *video_dev; 455 struct video_device *radio_dev; 456 struct video_device *vbi_dev; 457 struct saa7134_dmasound dmasound; 458 459 /* infrared remote */ 460 int has_remote; 461 struct card_ir *remote; 462 463 /* pci i/o */ 464 char name[32]; 465 int nr; 466 struct pci_dev *pci; 467 unsigned char pci_rev,pci_lat; 468 __u32 __iomem *lmmio; 469 __u8 __iomem *bmmio; 470 471 /* config info */ 472 unsigned int board; 473 unsigned int tuner_type; 474 unsigned int radio_type; 475 unsigned char tuner_addr; 476 unsigned char radio_addr; 477 478 unsigned int tda9887_conf; 479 unsigned int gpio_value; 480 481 /* i2c i/o */ 482 struct i2c_adapter i2c_adap; 483 struct i2c_client i2c_client; 484 unsigned char eedata[128]; 485 486 /* video overlay */ 487 struct v4l2_framebuffer ovbuf; 488 struct saa7134_format *ovfmt; 489 unsigned int ovenable; 490 enum v4l2_field ovfield; 491 492 /* video+ts+vbi capture */ 493 struct saa7134_dmaqueue video_q; 494 struct saa7134_dmaqueue vbi_q; 495 unsigned int video_fieldcount; 496 unsigned int vbi_fieldcount; 497 498 /* various v4l controls */ 499 struct saa7134_tvnorm *tvnorm; /* video */ 500 struct saa7134_tvaudio *tvaudio; 501 unsigned int ctl_input; 502 int ctl_bright; 503 int ctl_contrast; 504 int ctl_hue; 505 int ctl_saturation; 506 int ctl_freq; 507 int ctl_mute; /* audio */ 508 int ctl_volume; 509 int ctl_invert; /* private */ 510 int ctl_mirror; 511 int ctl_y_odd; 512 int ctl_y_even; 513 int ctl_automute; 514 515 /* crop */ 516 struct v4l2_rect crop_bounds; 517 struct v4l2_rect crop_defrect; 518 struct v4l2_rect crop_current; 519 520 /* other global state info */ 521 unsigned int automute; 522 struct saa7134_thread thread; 523 struct saa7134_input *input; 524 struct saa7134_input *hw_input; 525 unsigned int hw_mute; 526 int last_carrier; 527 int nosignal; 528 529 /* SAA7134_MPEG_* */ 530 struct saa7134_ts ts; 531 struct saa7134_dmaqueue ts_q; 532 struct saa7134_mpeg_ops *mops; 533 534 /* SAA7134_MPEG_EMPRESS only */ 535 struct video_device *empress_dev; 536 struct videobuf_queue empress_tsq; 537 unsigned int empress_users; 538 struct work_struct empress_workqueue; 539 int empress_started; 540 541#if defined(CONFIG_VIDEO_BUF_DVB) || defined(CONFIG_VIDEO_BUF_DVB_MODULE) 542 /* SAA7134_MPEG_DVB only */ 543 struct videobuf_dvb dvb; 544 int (*original_demod_sleep)(struct dvb_frontend* fe); 545#endif 546}; 547 548/* ----------------------------------------------------------- */ 549 550#define saa_readl(reg) readl(dev->lmmio + (reg)) 551#define saa_writel(reg,value) writel((value), dev->lmmio + (reg)); 552#define saa_andorl(reg,mask,value) \ 553 writel((readl(dev->lmmio+(reg)) & ~(mask)) |\ 554 ((value) & (mask)), dev->lmmio+(reg)) 555#define saa_setl(reg,bit) saa_andorl((reg),(bit),(bit)) 556#define saa_clearl(reg,bit) saa_andorl((reg),(bit),0) 557 558#define saa_readb(reg) readb(dev->bmmio + (reg)) 559#define saa_writeb(reg,value) writeb((value), dev->bmmio + (reg)); 560#define saa_andorb(reg,mask,value) \ 561 writeb((readb(dev->bmmio+(reg)) & ~(mask)) |\ 562 ((value) & (mask)), dev->bmmio+(reg)) 563#define saa_setb(reg,bit) saa_andorb((reg),(bit),(bit)) 564#define saa_clearb(reg,bit) saa_andorb((reg),(bit),0) 565 566#define saa_wait(us) { udelay(us); } 567 568/* ----------------------------------------------------------- */ 569/* saa7134-core.c */ 570 571extern struct list_head saa7134_devlist; 572extern int saa7134_no_overlay; 573 574void saa7134_track_gpio(struct saa7134_dev *dev, char *msg); 575void saa7134_set_gpio(struct saa7134_dev *dev, int bit_no, int value); 576int saa7134_tuner_callback(void *ptr, int command, int arg); 577 578#define SAA7134_PGTABLE_SIZE 4096 579 580int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt); 581int saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt, 582 struct scatterlist *list, unsigned int length, 583 unsigned int startpage); 584void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt); 585 586int saa7134_buffer_count(unsigned int size, unsigned int count); 587int saa7134_buffer_startpage(struct saa7134_buf *buf); 588unsigned long saa7134_buffer_base(struct saa7134_buf *buf); 589 590int saa7134_buffer_queue(struct saa7134_dev *dev, struct saa7134_dmaqueue *q, 591 struct saa7134_buf *buf); 592void saa7134_buffer_finish(struct saa7134_dev *dev, struct saa7134_dmaqueue *q, 593 unsigned int state); 594void saa7134_buffer_next(struct saa7134_dev *dev, struct saa7134_dmaqueue *q); 595void saa7134_buffer_timeout(unsigned long data); 596void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf); 597 598int saa7134_set_dmabits(struct saa7134_dev *dev); 599 600extern int (*saa7134_dmasound_init)(struct saa7134_dev *dev); 601extern int (*saa7134_dmasound_exit)(struct saa7134_dev *dev); 602 603 604/* ----------------------------------------------------------- */ 605/* saa7134-cards.c */ 606 607extern struct saa7134_board saa7134_boards[]; 608extern const unsigned int saa7134_bcount; 609extern struct pci_device_id __devinitdata saa7134_pci_tbl[]; 610 611extern int saa7134_board_init1(struct saa7134_dev *dev); 612extern int saa7134_board_init2(struct saa7134_dev *dev); 613 614 615/* ----------------------------------------------------------- */ 616/* saa7134-i2c.c */ 617 618int saa7134_i2c_register(struct saa7134_dev *dev); 619int saa7134_i2c_unregister(struct saa7134_dev *dev); 620void saa7134_i2c_call_clients(struct saa7134_dev *dev, 621 unsigned int cmd, void *arg); 622 623 624/* ----------------------------------------------------------- */ 625/* saa7134-video.c */ 626 627extern struct video_device saa7134_video_template; 628extern struct video_device saa7134_radio_template; 629 630int saa7134_common_ioctl(struct saa7134_dev *dev, 631 unsigned int cmd, void *arg); 632 633int saa7134_video_init1(struct saa7134_dev *dev); 634int saa7134_video_init2(struct saa7134_dev *dev); 635void saa7134_irq_video_intl(struct saa7134_dev *dev); 636void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status); 637 638 639/* ----------------------------------------------------------- */ 640/* saa7134-ts.c */ 641 642#define TS_PACKET_SIZE 188 /* TS packets 188 bytes */ 643 644extern struct videobuf_queue_ops saa7134_ts_qops; 645 646int saa7134_ts_init1(struct saa7134_dev *dev); 647int saa7134_ts_fini(struct saa7134_dev *dev); 648void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status); 649 650int saa7134_ts_register(struct saa7134_mpeg_ops *ops); 651void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops); 652 653/* ----------------------------------------------------------- */ 654/* saa7134-vbi.c */ 655 656extern struct videobuf_queue_ops saa7134_vbi_qops; 657extern struct video_device saa7134_vbi_template; 658 659int saa7134_vbi_init1(struct saa7134_dev *dev); 660int saa7134_vbi_fini(struct saa7134_dev *dev); 661void saa7134_irq_vbi_done(struct saa7134_dev *dev, unsigned long status); 662 663 664/* ----------------------------------------------------------- */ 665/* saa7134-tvaudio.c */ 666 667int saa7134_tvaudio_rx2mode(u32 rx); 668 669void saa7134_tvaudio_setmute(struct saa7134_dev *dev); 670void saa7134_tvaudio_setinput(struct saa7134_dev *dev, 671 struct saa7134_input *in); 672void saa7134_tvaudio_setvolume(struct saa7134_dev *dev, int level); 673int saa7134_tvaudio_getstereo(struct saa7134_dev *dev); 674 675int saa7134_tvaudio_init2(struct saa7134_dev *dev); 676int saa7134_tvaudio_fini(struct saa7134_dev *dev); 677int saa7134_tvaudio_do_scan(struct saa7134_dev *dev); 678 679int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value); 680 681/* ----------------------------------------------------------- */ 682/* saa7134-oss.c */ 683 684extern const struct file_operations saa7134_dsp_fops; 685extern const struct file_operations saa7134_mixer_fops; 686 687int saa7134_oss_init1(struct saa7134_dev *dev); 688int saa7134_oss_fini(struct saa7134_dev *dev); 689void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status); 690 691/* ----------------------------------------------------------- */ 692/* saa7134-input.c */ 693 694int saa7134_input_init1(struct saa7134_dev *dev); 695void saa7134_input_fini(struct saa7134_dev *dev); 696void saa7134_input_irq(struct saa7134_dev *dev); 697void saa7134_set_i2c_ir(struct saa7134_dev *dev, struct IR_i2c *ir); 698 699 700/* 701 * Local variables: 702 * c-basic-offset: 8 703 * End: 704 */ 705