From: Gerd Knorr - some cleanups merged. - use new tveeprom module to configure Hauppauge cards. - add new tv cards. Signed-off-by: Gerd Knorr Signed-off-by: Andrew Morton --- 25-akpm/drivers/media/video/Kconfig | 1 25-akpm/drivers/media/video/btcx-risc.c | 3 25-akpm/drivers/media/video/bttv-cards.c | 203 +++++++++++++++--------------- 25-akpm/drivers/media/video/bttv-driver.c | 17 +- 25-akpm/drivers/media/video/bttv-i2c.c | 23 --- 25-akpm/drivers/media/video/bttv-if.c | 14 +- 25-akpm/drivers/media/video/bttv-risc.c | 2 25-akpm/drivers/media/video/bttv-vbi.c | 5 25-akpm/drivers/media/video/bttv.h | 5 25-akpm/drivers/media/video/bttvp.h | 8 - 10 files changed, 145 insertions(+), 136 deletions(-) diff -puN drivers/media/video/btcx-risc.c~v4l-bttv-update drivers/media/video/btcx-risc.c --- 25/drivers/media/video/btcx-risc.c~v4l-bttv-update 2005-01-22 18:44:45.156360256 -0800 +++ 25-akpm/drivers/media/video/btcx-risc.c 2005-01-22 18:44:45.173357672 -0800 @@ -1,5 +1,5 @@ /* - $Id: btcx-risc.c,v 1.4 2004/11/07 13:17:14 kraxel Exp $ + $Id: btcx-risc.c,v 1.5 2004/12/10 12:33:39 kraxel Exp $ btcx-risc.c @@ -24,6 +24,7 @@ */ #include +#include #include #include #include diff -puN drivers/media/video/bttv-cards.c~v4l-bttv-update drivers/media/video/bttv-cards.c --- 25/drivers/media/video/bttv-cards.c~v4l-bttv-update 2005-01-22 18:44:45.157360104 -0800 +++ 25-akpm/drivers/media/video/bttv-cards.c 2005-01-22 18:44:45.178356912 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttv-cards.c,v 1.32 2004/11/07 13:17:14 kraxel Exp $ + $Id: bttv-cards.c,v 1.42 2005/01/13 17:22:33 kraxel Exp $ bttv-cards.c @@ -29,18 +29,19 @@ #include #include #include +#include #include #include #include #include -#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE) -# include -#endif +#include #include #include "bttvp.h" +#if 0 /* not working yet */ #include "bt832.h" +#endif /* fwd decl */ static void boot_msp34xx(struct bttv *btv, int pin); @@ -76,6 +77,9 @@ static void PXC200_muxsel(struct bttv *b static void picolo_tetra_muxsel(struct bttv *btv, unsigned int input); static void picolo_tetra_init(struct bttv *btv); +static void tibetCS16_muxsel(struct bttv *btv, unsigned int input); +static void tibetCS16_init(struct bttv *btv); + static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input); static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input); @@ -84,12 +88,13 @@ static int tea5757_read(struct bttv *btv static int tea5757_write(struct bttv *btv, int value); static void identify_by_eeprom(struct bttv *btv, unsigned char eeprom_data[256]); +static int __devinit pvr_boot(struct bttv *btv); /* config variables */ static unsigned int triton1=0; static unsigned int vsfx=0; static unsigned int latency = UNSET; -unsigned int no_overlay=-1; +static unsigned int no_overlay=-1; static unsigned int card[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; static unsigned int pll[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; @@ -283,12 +288,12 @@ static struct CARD { // DVB cards (using pci function .1 for mpeg data xfer) { 0x01010071, BTTV_NEBULA_DIGITV, "Nebula Electronics DigiTV" }, - { 0x07611461, BTTV_AVDVBT_761, "AverMedia AverTV DVB-T" }, + { 0x07611461, BTTV_AVDVBT_761, "AverMedia AverTV DVB-T 761" }, { 0x001c11bd, BTTV_PINNACLESAT, "Pinnacle PCTV Sat" }, { 0x002611bd, BTTV_TWINHAN_DST, "Pinnacle PCTV SAT CI" }, { 0x00011822, BTTV_TWINHAN_DST, "Twinhan VisionPlus DVB-T" }, { 0xfc00270f, BTTV_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" }, - { 0x07711461, BTTV_AVDVBT_771, "AVermedia DVB-T 771" }, + { 0x07711461, BTTV_AVDVBT_771, "AVermedia AverTV DVB-T 771" }, { 0xdb1018ac, BTTV_DVICO_DVBT_LITE, "DVICO FusionHDTV DVB-T Lite" }, { 0, -1, NULL } @@ -2156,6 +2161,33 @@ struct tvcard bttv_tvcards[] = { .tuner_type = TUNER_PHILIPS_NTSC_M, .has_radio = 0, // .has_remote = 1, +},{ + /* Rick C */ + .name = "Super TV Tuner", + .video_inputs = 4, + .audio_inputs = 1, + .tuner = 0, + .svhs = 2, + .muxsel = { 2, 3, 1, 0}, + .tuner_type = TUNER_PHILIPS_NTSC, + .gpiomask = 0x008007, + .audiomux = { 0, 0x000001,0,0, 0}, + .needs_tvaudio = 1, + .has_radio = 1, +},{ + /* Chris Fanning */ + .name = "Tibet Systems 'Progress DVR' CS16", + .video_inputs = 16, + .audio_inputs = 0, + .tuner = -1, + .svhs = -1, + .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, + .pll = PLL_28, + .no_msp34xx = 1, + .no_tda9875 = 1, + .no_tda7432 = 1, + .tuner_type = -1, + .muxsel_hook = tibetCS16_muxsel, }}; static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); @@ -2499,7 +2531,7 @@ static void sigmaSLC_muxsel(struct bttv /* ----------------------------------------------------------------------- */ -void bttv_reset_audio(struct bttv *btv) +static void bttv_reset_audio(struct bttv *btv) { /* * BT878A has a audio-reset register. @@ -2542,6 +2574,8 @@ void __devinit bttv_init_card1(struct bt btv->use_i2c_hw = 1; break; } + if (!bttv_tvcards[btv->c.type].has_dvb) + bttv_reset_audio(btv); } /* initialization part two -- after registering i2c bus */ @@ -2645,6 +2679,9 @@ void __devinit bttv_init_card2(struct bt case BTTV_LMLBT4: init_lmlbt4x(btv); break; + case BTTV_TIBET_CS16: + tibetCS16_init(btv); + break; } /* pll configuration */ @@ -2681,6 +2718,8 @@ void __devinit bttv_init_card2(struct bt } btv->pll.pll_current = -1; + bttv_reset_audio(btv); + /* tuner configuration (from card list / autodetect / insmod option) */ if (UNSET != bttv_tvcards[btv->c.type].tuner_type) if(UNSET == btv->tuner_type) @@ -2745,7 +2784,10 @@ void __devinit bttv_init_card2(struct bt if (0 == tda9887 && 0 == bttv_tvcards[btv->c.type].has_dvb && bttv_I2CRead(btv, I2C_TDA9887, "TDA9887") >=0) tda9887 = 1; - if (tda9887) + if((btv->tuner_type == TUNER_PHILIPS_FM1216ME_MK3) || + (btv->tuner_type == TUNER_PHILIPS_FM1236_MK3) || + (btv->tuner_type == TUNER_PHILIPS_FM1256_IH3) || + tda9887) request_module("tda9887"); if (btv->tuner_type != UNSET) request_module("tuner"); @@ -2753,67 +2795,6 @@ void __devinit bttv_init_card2(struct bt /* ----------------------------------------------------------------------- */ -/* some hauppauge specific stuff */ - -static struct HAUPPAUGE_TUNER -{ - int id; - char *name; -} -hauppauge_tuner[] __devinitdata = -{ - { TUNER_ABSENT, "" }, - { TUNER_ABSENT, "External" }, - { TUNER_ABSENT, "Unspecified" }, - { TUNER_PHILIPS_PAL, "Philips FI1216" }, - { TUNER_PHILIPS_SECAM, "Philips FI1216MF" }, - { TUNER_PHILIPS_NTSC, "Philips FI1236" }, - { TUNER_PHILIPS_PAL_I, "Philips FI1246" }, - { TUNER_PHILIPS_PAL_DK,"Philips FI1256" }, - { TUNER_PHILIPS_PAL, "Philips FI1216 MK2" }, - { TUNER_PHILIPS_SECAM, "Philips FI1216MF MK2" }, - { TUNER_PHILIPS_NTSC, "Philips FI1236 MK2" }, - { TUNER_PHILIPS_PAL_I, "Philips FI1246 MK2" }, - { TUNER_PHILIPS_PAL_DK,"Philips FI1256 MK2" }, - { TUNER_TEMIC_NTSC, "Temic 4032FY5" }, - { TUNER_TEMIC_PAL, "Temic 4002FH5" }, - { TUNER_TEMIC_PAL_I, "Temic 4062FY5" }, - { TUNER_PHILIPS_PAL, "Philips FR1216 MK2" }, - { TUNER_PHILIPS_SECAM, "Philips FR1216MF MK2" }, - { TUNER_PHILIPS_NTSC, "Philips FR1236 MK2" }, - { TUNER_PHILIPS_PAL_I, "Philips FR1246 MK2" }, - { TUNER_PHILIPS_PAL_DK,"Philips FR1256 MK2" }, - { TUNER_PHILIPS_PAL, "Philips FM1216" }, - { TUNER_PHILIPS_SECAM, "Philips FM1216MF" }, - { TUNER_PHILIPS_NTSC, "Philips FM1236" }, - { TUNER_PHILIPS_PAL_I, "Philips FM1246" }, - { TUNER_PHILIPS_PAL_DK,"Philips FM1256" }, - { TUNER_TEMIC_4036FY5_NTSC, "Temic 4036FY5" }, - { TUNER_ABSENT, "Samsung TCPN9082D" }, - { TUNER_ABSENT, "Samsung TCPM9092P" }, - { TUNER_TEMIC_4006FH5_PAL, "Temic 4006FH5" }, - { TUNER_ABSENT, "Samsung TCPN9085D" }, - { TUNER_ABSENT, "Samsung TCPB9085P" }, - { TUNER_ABSENT, "Samsung TCPL9091P" }, - { TUNER_TEMIC_4039FR5_NTSC, "Temic 4039FR5" }, - { TUNER_PHILIPS_FQ1216ME, "Philips FQ1216 ME" }, - { TUNER_TEMIC_4066FY5_PAL_I, "Temic 4066FY5" }, - { TUNER_PHILIPS_NTSC, "Philips TD1536" }, - { TUNER_PHILIPS_NTSC, "Philips TD1536D" }, - { TUNER_PHILIPS_NTSC, "Philips FMR1236" }, /* mono radio */ - { TUNER_ABSENT, "Philips FI1256MP" }, - { TUNER_ABSENT, "Samsung TCPQ9091P" }, - { TUNER_TEMIC_4006FN5_MULTI_PAL, "Temic 4006FN5" }, - { TUNER_TEMIC_4009FR5_PAL, "Temic 4009FR5" }, - { TUNER_TEMIC_4046FM5, "Temic 4046FM5" }, - { TUNER_TEMIC_4009FN5_MULTI_PAL_FM, "Temic 4009FN5" }, - { TUNER_ABSENT, "Philips TD1536D_FH_44"}, - { TUNER_LG_NTSC_FM, "LG TPI8NSR01F"}, - { TUNER_LG_PAL_FM, "LG TPI8PSB01D"}, - { TUNER_LG_PAL, "LG TPI8PSB11D"}, - { TUNER_LG_PAL_I_FM, "LG TAPC-I001D"}, - { TUNER_LG_PAL_I, "LG TAPC-I701D"} -}; static void modtec_eeprom(struct bttv *btv) { @@ -2837,31 +2818,11 @@ static void modtec_eeprom(struct bttv *b static void __devinit hauppauge_eeprom(struct bttv *btv) { - unsigned int blk2,tuner,radio,model; + struct tveeprom tv; - if (eeprom_data[0] != 0x84 || eeprom_data[2] != 0) - printk(KERN_WARNING "bttv%d: Hauppauge eeprom: invalid\n", - btv->c.nr); - - /* Block 2 starts after len+3 bytes header */ - blk2 = eeprom_data[1] + 3; - - /* decode + use some config infos */ - model = eeprom_data[12] << 8 | eeprom_data[11]; - tuner = eeprom_data[9]; - radio = eeprom_data[blk2-1] & 0x01; - - if (tuner < ARRAY_SIZE(hauppauge_tuner)) - btv->tuner_type = hauppauge_tuner[tuner].id; - if (radio) - btv->has_radio = 1; - - if (bttv_verbose) - printk(KERN_INFO "bttv%d: Hauppauge eeprom: model=%d, " - "tuner=%s (%d), radio=%s\n", - btv->c.nr, model, (tuner < ARRAY_SIZE(hauppauge_tuner) - ? hauppauge_tuner[tuner].name : "?"), - btv->tuner_type, radio ? "yes" : "no"); + tveeprom_hauppauge_analog(&tv, eeprom_data); + btv->tuner_type = tv.tuner_type; + btv->has_radio = tv.has_radio; } static int terratec_active_radio_upgrade(struct bttv *btv) @@ -2947,7 +2908,7 @@ static int __devinit pvr_altera_load(str return 0; } -int __devinit pvr_boot(struct bttv *btv) +static int __devinit pvr_boot(struct bttv *btv) { const struct firmware *fw_entry; int rc; @@ -3077,7 +3038,8 @@ static int tuner_0_table[] = { TUNER_PHILIPS_PAL, TUNER_PHILIPS_PAL /* PAL-I*/, TUNER_PHILIPS_PAL, TUNER_PHILIPS_PAL, TUNER_PHILIPS_SECAM, TUNER_PHILIPS_SECAM, - TUNER_PHILIPS_SECAM, TUNER_PHILIPS_PAL}; + TUNER_PHILIPS_SECAM, TUNER_PHILIPS_PAL, + TUNER_PHILIPS_FM1216ME_MK3 }; #if 0 int tuner_0_fm_table[] = { PHILIPS_FR1236_NTSC, PHILIPS_FR1216_PAL, @@ -3104,12 +3066,16 @@ static void __devinit avermedia_eeprom(s btv->has_remote = (eeprom_data[0x42] & 0x01); if (tuner_make == 0 || tuner_make == 2) - if(tuner_format <=9) + if(tuner_format <=0x0a) tuner = tuner_0_table[tuner_format]; if (tuner_make == 1) if(tuner_format <=9) tuner = tuner_1_table[tuner_format]; + if (tuner_make == 4) + if(tuner_format == 0x09) + tuner = TUNER_LG_NTSC_NEW_TAPC; // TAPC-G702P + printk(KERN_INFO "bttv%d: Avermedia eeprom[0x%02x%02x]: tuner=", btv->c.nr,eeprom_data[0x41],eeprom_data[0x42]); if(tuner) { @@ -3167,6 +3133,7 @@ static void __devinit boot_msp34xx(struc static void __devinit boot_bt832(struct bttv *btv) { +#if 0 /* not working yet */ int resetbit=0; switch (btv->c.type) { @@ -3195,6 +3162,7 @@ static void __devinit boot_bt832(struct // bt832 on pixelview changes from i2c 0x8a to 0x88 after // being reset as above. So we must follow by this: bttv_call_i2c_clients(btv, BT832_REATTACH, NULL); +#endif } /* ----------------------------------------------------------------------- */ @@ -3885,6 +3853,47 @@ static void rv605_muxsel(struct bttv *bt mdelay(1); } +/* Tibet Systems 'Progress DVR' CS16 muxsel helper [Chris Fanning] + * + * The CS16 (available on eBay cheap) is a PCI board with four Fusion + * 878A chips, a PCI bridge, an Atmel microcontroller, four sync seperator + * chips, ten eight input analog multiplexors, a not chip and a few + * other components. + * + * 16 inputs on a secondary bracket are provided and can be selected + * from each of the four capture chips. Two of the eight input + * multiplexors are used to select from any of the 16 input signals. + * + * Unsupported hardware capabilities: + * . A video output monitor on the secondary bracket can be selected from + * one of the 878A chips. + * . Another passthrough but I haven't spent any time investigating it. + * . Digital I/O (logic level connected to GPIO) is available from an + * onboard header. + * + * The on chip input mux should always be set to 2. + * GPIO[16:19] - Video input selection + * GPIO[0:3] - Video output monitor select (only available from one 878A) + * GPIO[?:?] - Digital I/O. + * + * There is an ATMEL microcontroller with an 8031 core on board. I have not + * determined what function (if any) it provides. With the microcontroller + * and sync seperator chips a guess is that it might have to do with video + * switching and maybe some digital I/O. + */ +static void tibetCS16_muxsel(struct bttv *btv, unsigned int input) +{ + /* video mux */ + gpio_bits(0x0f0000, input << 16); +} + +static void tibetCS16_init(struct bttv *btv) +{ + /* enable gpio bits, mask obtained via btSpy */ + gpio_inout(0xffffff, 0x0f7fff); + gpio_write(0x0f7fff); +} + // The Grandtec X-Guard framegrabber card uses two Dual 4-channel // video multiplexers to provide up to 16 video inputs. These // multiplexers are controlled by the lower 8 GPIO pins of the diff -puN drivers/media/video/bttv-driver.c~v4l-bttv-update drivers/media/video/bttv-driver.c --- 25/drivers/media/video/bttv-driver.c~v4l-bttv-update 2005-01-22 18:44:45.159359800 -0800 +++ 25-akpm/drivers/media/video/bttv-driver.c 2005-01-22 18:44:45.182356304 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttv-driver.c,v 1.27 2004/11/07 14:44:59 kraxel Exp $ + $Id: bttv-driver.c,v 1.34 2005/01/07 13:11:19 kraxel Exp $ bttv - Bt848 frame grabber driver @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -105,6 +106,7 @@ module_param(adc_crush, int, 044 module_param(whitecrush_upper, int, 0444); module_param(whitecrush_lower, int, 0444); module_param(vcr_hack, int, 0444); + module_param_array(radio, int, NULL, 0444); MODULE_PARM_DESC(radio,"The TV card supports radio, default is 0 (no)"); @@ -1063,7 +1065,7 @@ static void init_bt848(struct bttv *btv) init_irqreg(btv); } -void bttv_reinit_bt848(struct bttv *btv) +static void bttv_reinit_bt848(struct bttv *btv) { unsigned long flags; @@ -1267,7 +1269,7 @@ void bttv_gpio_tracking(struct bttv *btv btv->c.nr,outbits,data & outbits, data & ~outbits, comment); } -void bttv_field_count(struct bttv *btv) +static void bttv_field_count(struct bttv *btv) { int need_count = 0; @@ -1467,7 +1469,7 @@ static const char *v4l1_ioctls[] = { "SMICROCODE", "GVBIFMT", "SVBIFMT" }; #define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls) -int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg) +static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg) { switch (cmd) { case BTTV_VERSION: @@ -2531,9 +2533,11 @@ static int bttv_do_ioctl(struct inode *i V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY | V4L2_CAP_VBI_CAPTURE | - V4L2_CAP_TUNER | V4L2_CAP_READWRITE | V4L2_CAP_STREAMING; + if (bttv_tvcards[btv->c.type].tuner != UNSET && + bttv_tvcards[btv->c.type].tuner != TUNER_ABSENT) + cap->capabilities |= V4L2_CAP_TUNER; return 0; } @@ -2988,6 +2992,9 @@ static int bttv_release(struct inode *in free_btres(btv,fh,RESOURCE_VBI); } + /* free stuff */ + videobuf_mmap_free(&fh->cap); + videobuf_mmap_free(&fh->vbi); v4l2_prio_close(&btv->prio,&fh->prio); file->private_data = NULL; kfree(fh); diff -puN drivers/media/video/bttv.h~v4l-bttv-update drivers/media/video/bttv.h --- 25/drivers/media/video/bttv.h~v4l-bttv-update 2005-01-22 18:44:45.161359496 -0800 +++ 25-akpm/drivers/media/video/bttv.h 2005-01-22 18:44:45.182356304 -0800 @@ -1,5 +1,5 @@ /* - * $Id: bttv.h,v 1.10 2004/10/13 10:39:00 kraxel Exp $ + * $Id: bttv.h,v 1.14 2005/01/07 13:11:19 kraxel Exp $ * * bttv - Bt848 frame grabber driver * @@ -133,6 +133,7 @@ #define BTTV_MATRIX_VISIONSLC 0x7e #define BTTV_APAC_VIEWCOMP 0x7f #define BTTV_DVICO_DVBT_LITE 0x80 +#define BTTV_TIBET_CS16 0x83 /* i2c address list */ #define I2C_TSA5522 0xc2 @@ -149,7 +150,7 @@ #define I2C_VHX 0xc0 #define I2C_MSP3400 0x80 #define I2C_MSP3400_ALT 0x88 -#define I2C_TEA6300 0x80 +#define I2C_TEA6300 0x80 /* also used by 6320 */ #define I2C_DPL3518 0x84 #define I2C_TDA9887 0x86 diff -puN drivers/media/video/bttv-i2c.c~v4l-bttv-update drivers/media/video/bttv-i2c.c --- 25/drivers/media/video/bttv-i2c.c~v4l-bttv-update 2005-01-22 18:44:45.163359192 -0800 +++ 25-akpm/drivers/media/video/bttv-i2c.c 2005-01-22 18:44:45.183356152 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttv-i2c.c,v 1.13 2004/11/07 13:17:15 kraxel Exp $ + $Id: bttv-i2c.c,v 1.17 2004/12/14 15:33:30 kraxel Exp $ bttv-i2c.c -- all the i2c code is here @@ -26,6 +26,7 @@ */ #include +#include #include #include #include @@ -327,13 +328,6 @@ void bttv_call_i2c_clients(struct bttv * i2c_clients_command(&btv->c.i2c_adap, cmd, arg); } -void bttv_i2c_call(unsigned int card, unsigned int cmd, void *arg) -{ - if (card >= bttv_num) - return; - bttv_call_i2c_clients(&bttvs[card], cmd, arg); -} - static struct i2c_client bttv_i2c_client_template = { I2C_DEVNAME("bttv internal"), }; @@ -384,19 +378,8 @@ int bttv_I2CWrite(struct bttv *btv, unsi /* read EEPROM content */ void __devinit bttv_readee(struct bttv *btv, unsigned char *eedata, int addr) { - int i; - - if (bttv_I2CWrite(btv, addr, 0, -1, 0)<0) { - printk(KERN_WARNING "bttv: readee error\n"); - return; - } btv->i2c_client.addr = addr >> 1; - for (i=0; i<256; i+=16) { - if (16 != i2c_master_recv(&btv->i2c_client,eedata+i,16)) { - printk(KERN_WARNING "bttv: readee error\n"); - break; - } - } + tveeprom_read(&btv->i2c_client, eedata, 256); } static char *i2c_devs[128] = { diff -puN drivers/media/video/bttv-if.c~v4l-bttv-update drivers/media/video/bttv-if.c --- 25/drivers/media/video/bttv-if.c~v4l-bttv-update 2005-01-22 18:44:45.164359040 -0800 +++ 25-akpm/drivers/media/video/bttv-if.c 2005-01-22 18:44:45.183356152 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttv-if.c,v 1.3 2004/10/13 10:39:00 kraxel Exp $ + $Id: bttv-if.c,v 1.4 2004/11/17 18:47:47 kraxel Exp $ bttv-if.c -- old gpio interface to other kernel modules don't use in new code, will go away in 2.7 @@ -50,6 +50,8 @@ EXPORT_SYMBOL(bttv_i2c_call); int bttv_get_cardinfo(unsigned int card, int *type, unsigned *cardid) { + printk("The bttv_* interface is obsolete and will go away,\n" + "please use the new, sysfs based interface instead.\n"); if (card >= bttv_num) { return -1; } @@ -67,7 +69,8 @@ struct pci_dev* bttv_get_pcidev(unsigned int bttv_get_id(unsigned int card) { - printk("bttv_get_id is obsolete, use bttv_get_cardinfo instead\n"); + printk("The bttv_* interface is obsolete and will go away,\n" + "please use the new, sysfs based interface instead.\n"); if (card >= bttv_num) { return -1; } @@ -143,6 +146,13 @@ wait_queue_head_t* bttv_get_gpio_queue(u return &btv->gpioq; } +void bttv_i2c_call(unsigned int card, unsigned int cmd, void *arg) +{ + if (card >= bttv_num) + return; + bttv_call_i2c_clients(&bttvs[card], cmd, arg); +} + /* * Local variables: * c-basic-offset: 8 diff -puN drivers/media/video/bttvp.h~v4l-bttv-update drivers/media/video/bttvp.h --- 25/drivers/media/video/bttvp.h~v4l-bttv-update 2005-01-22 18:44:45.165358888 -0800 +++ 25-akpm/drivers/media/video/bttvp.h 2005-01-22 18:44:45.184356000 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttvp.h,v 1.12 2004/10/25 11:26:36 kraxel Exp $ + $Id: bttvp.h,v 1.15 2004/12/14 15:33:30 kraxel Exp $ bttv - Bt848 frame grabber driver @@ -43,6 +43,7 @@ #include #include #include +#include #include #include "bt848.h" @@ -221,11 +222,6 @@ extern unsigned int bttv_gpio; extern void bttv_gpio_tracking(struct bttv *btv, char *comment); extern int init_bttv_i2c(struct bttv *btv); extern int fini_bttv_i2c(struct bttv *btv); -extern int pvr_boot(struct bttv *btv); - -extern int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg); -extern void bttv_reinit_bt848(struct bttv *btv); -extern void bttv_field_count(struct bttv *btv); #define vprintk if (bttv_verbose) printk #define dprintk if (bttv_debug >= 1) printk diff -puN drivers/media/video/bttv-risc.c~v4l-bttv-update drivers/media/video/bttv-risc.c --- 25/drivers/media/video/bttv-risc.c~v4l-bttv-update 2005-01-22 18:44:45.167358584 -0800 +++ 25-akpm/drivers/media/video/bttv-risc.c 2005-01-22 18:44:45.185355848 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttv-risc.c,v 1.9 2004/10/13 10:39:00 kraxel Exp $ + $Id: bttv-risc.c,v 1.10 2004/11/19 18:07:12 kraxel Exp $ bttv-risc.c -- interfaces to other kernel modules diff -puN drivers/media/video/bttv-vbi.c~v4l-bttv-update drivers/media/video/bttv-vbi.c --- 25/drivers/media/video/bttv-vbi.c~v4l-bttv-update 2005-01-22 18:44:45.168358432 -0800 +++ 25-akpm/drivers/media/video/bttv-vbi.c 2005-01-22 18:44:45.185355848 -0800 @@ -1,5 +1,5 @@ /* - $Id: bttv-vbi.c,v 1.7 2004/11/07 13:17:15 kraxel Exp $ + $Id: bttv-vbi.c,v 1.9 2005/01/13 17:22:33 kraxel Exp $ bttv - Bt848 frame grabber driver vbi interface @@ -22,6 +22,7 @@ */ #include +#include #include #include #include @@ -182,7 +183,7 @@ void bttv_vbi_try_fmt(struct bttv_fh *fh case 2: /* SECAM */ default: start0 = 7; - start1 = 319; + start1 = 320; } count0 = (f->fmt.vbi.start[0] + f->fmt.vbi.count[0]) - start0; diff -puN drivers/media/video/Kconfig~v4l-bttv-update drivers/media/video/Kconfig --- 25/drivers/media/video/Kconfig~v4l-bttv-update 2005-01-22 18:44:45.170358128 -0800 +++ 25-akpm/drivers/media/video/Kconfig 2005-01-22 18:44:45.186355696 -0800 @@ -16,6 +16,7 @@ config VIDEO_BT848 select VIDEO_BUF select VIDEO_IR select VIDEO_TUNER + select VIDEO_TVEEPROM ---help--- Support for BT848 based frame grabber/overlay boards. This includes the Miro, Hauppauge and STB boards. Please read the material in _