Hi, this patches - New card: Hercules SmartTV stereo (unsupported: IR, line in) - New card: Pace TV and radio card - includes the compile-fix and tvaudio oops patches Regards, Gunther
diff -ur bttv-0.7.105/CARDLIST bttv07105/CARDLIST --- bttv-0.7.105/CARDLIST Fri Feb 14 12:34:57 2003 +++ bttv07105/CARDLIST Sun Feb 16 13:54:03 2003 @@ -99,6 +99,8 @@ card=97 - Euresys Picolo card=98 - ProVideo PV150 card=99 - AD-TVK503 + card=100 - Hercules Smart TV Stereo + card=101 - Pace TV & Radio Card tuner.o type=0 - Temic PAL (4002 FH5) diff -ur bttv-0.7.105/driver/bttv-cards.c bttv07105/driver/bttv-cards.c --- bttv-0.7.105/driver/bttv-cards.c Fri Feb 14 11:43:36 2003 +++ bttv07105/driver/bttv-cards.c Sun Feb 16 13:56:22 2003 @@ -629,7 +629,7 @@ .pll = PLL_28, .tuner_type = -1, },{ - .name = "Formac iProTV", + .name = "Formac iProTV, Formac ProTV I (bt848)", .video_inputs = 4, .audio_inputs = 1, .tuner = 0, @@ -1552,7 +1552,7 @@ .needs_tvaudio = 0, .pll = PLL_28, },{ - .name = "Formac ProTV II", + .name = "Formac ProTV II (bt878)", .video_inputs = 4, .audio_inputs = 1, .tuner = 0, @@ -1628,6 +1628,45 @@ .pll = PLL_28, .tuner_type = 2, .audio_hook = adtvk503_audio, +},{ + .name = "Hercules Smart TV Stereo", + .video_inputs = 4, + .audio_inputs = 1, + .tuner = 0, + .svhs = 2, + .gpiomask = 0x00, + .muxsel = { 2, 3, 1, 1 }, + .needs_tvaudio = 1, + .no_msp34xx = 1, + .pll = PLL_28, + .tuner_type = 5, + /* Notes: + - card lacks subsystem ID + - stereo variant w/ daughter board with tda9874a @0xb0 + - Audio Routing: + always from tda9874 independent of GPIO (?) + external line in: unknown + - Other chips: em78p156elp @ 0x96 (probably IR remote control) + hef4053 (instead 4052) for unknown function + */ +},{ + .name = "Pace TV & Radio Card", + .video_inputs = 4, + .audio_inputs = 1, + .tuner = 0, + .svhs = 2, + .muxsel = { 2, 3, 1, 1}, // Tuner, CVid, SVid, CVid over SVid connector + .gpiomask = 0, + .no_tda9875 = 1, + .no_tda7432 = 1, + .tuner_type = 1, + .has_radio = 1, + .pll = PLL_28, + /* Bt878, Bt832, FI1246 tuner; no pci subsystem id + only internal line out: (4pin header) RGGL + Radio must be decoded by msp3410d (not routed through)*/ + // .digital_mode = DIGITAL_MODE_CAMERA, // todo! + }}; const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); Only in bttv-0.7.105/driver: core diff -ur bttv-0.7.105/driver/msp3400.c bttv07105/driver/msp3400.c --- bttv-0.7.105/driver/msp3400.c Fri Feb 14 11:45:04 2003 +++ bttv07105/driver/msp3400.c Sun Feb 16 11:21:02 2003 @@ -482,8 +482,7 @@ /* turn on/off nicam + stereo */ static void msp3400c_setstereo(struct i2c_client *client, int mode) { - static char *strmode[] = { - [ 0 ... 15 ] = "invalid", + static char *strmode[15] = { [ VIDEO_SOUND_MONO ] = "mono", [ VIDEO_SOUND_STEREO ] = "stereo", [ VIDEO_SOUND_LANG1 ] = "lang1", @@ -493,6 +492,11 @@ int nicam=0; /* channel source: FM/AM or nicam */ int src=0; + if(strmode[mode]==NULL) { + dprintk("msp3400 invalid mode %d\n",mode); + return; + } + /* switch demodulator */ switch (msp->mode) { case MSP_MODE_FM_TERRA: diff -ur bttv-0.7.105/driver/tvaudio.c bttv07105/driver/tvaudio.c --- bttv-0.7.105/driver/tvaudio.c Fri Jan 3 18:23:44 2003 +++ bttv07105/driver/tvaudio.c Sun Feb 16 13:31:23 2003 @@ -982,7 +982,7 @@ dprintk("tda9874a_checkit(): DIC=0x%X, SIC=0x%X.\n", dic, sic); if((dic == 0x11)||(dic == 0x07)) { - dprintk("tvaudio: found tda9874%s.\n",(dic == 0x11) ? "a (new)":"h (old)"); + printk("tvaudio: found tda9874%s.\n",(dic == 0x11) ? "a":"h"); tda9874a_dic = dic; /* remember device id. */ return 1; } @@ -991,33 +991,39 @@ static int tda9874a_initialize(struct CHIPSTATE *chip) { - if(tda9874a_SIF != -1) { - if(tda9874a_SIF == 1) - tda9874a_GCONR = 0xc0; /* sound IF input 1 */ - else if(tda9874a_SIF == 2) - tda9874a_GCONR = 0xc1; /* sound IF input 2 */ - else - printk(KERN_WARNING "tda9874a: SIF parameter must be 1 or 2.\n"); + + dprintk("tda9874a_initialize\n"); + + if(tda9874a_SIF<1 || tda9874a_SIF>2) { + printk(KERN_WARNING "tda9874a_SIF parameter must be 1 or 2. Assuming 1.\n"); + tda9874a_SIF=1; } - if(tda9874a_STD != -1) { - if((tda9874a_STD >= 0)&&(tda9874a_STD <= 8)) { - tda9874a_ESP = tda9874a_STD; - tda9874a_mode = (tda9874a_STD < 5) ? 0 : 1; - } else { - printk(KERN_WARNING "tda9874a: STD parameter must be between 0 and 8.\n"); - } + if(tda9874a_SIF == 1) + tda9874a_GCONR = 0xc0; /* sound IF input 1 */ + else if(tda9874a_SIF == 2) + tda9874a_GCONR = 0xc1; /* sound IF input 2 */ + + if(tda9874a_STD<0 || tda9874a_STD>8) { + printk(KERN_WARNING "tda9874a_STD parameter must be between 0 and 8. Assuming 0.\n"); + tda9874a_STD=0; } - if(tda9874a_AMSEL != -1) { - if(tda9874a_AMSEL == 0) - tda9874a_NCONR = 0x01; /* auto-mute: analog mono input */ - else if(tda9874a_AMSEL == 1) - tda9874a_NCONR = 0x05; /* auto-mute: 1st carrier FM or AM */ - else - printk(KERN_WARNING "tda9874a: AMSEL parameter must be 0 or 1.\n"); + if((tda9874a_STD >= 0)&&(tda9874a_STD <= 8)) { + tda9874a_ESP = tda9874a_STD; + tda9874a_mode = (tda9874a_STD < 5) ? 0 : 1; } + if(tda9874a_AMSEL<0 || tda9874a_AMSEL>1) { + printk(KERN_WARNING "tda9874a: AMSEL parameter must be 0 or 1. Assuming 0\n"); + tda9874a_AMSEL=0; + } + + if(tda9874a_AMSEL == 0) + tda9874a_NCONR = 0x01; /* auto-mute: analog mono input */ + else if(tda9874a_AMSEL == 1) + tda9874a_NCONR = 0x05; /* auto-mute: 1st carrier FM or AM */ + tda9874a_setup(chip); return 0; @@ -1358,7 +1364,7 @@ dprintk("tvaudio: no matching chip description found\n"); return -EIO; } - printk("tvaudio: found %s\n",desc->name); + printk("tvaudio: found %s @ 0x%x\n",desc->name,addr<<1); dprintk("tvaudio: matches:%s%s%s.\n", (desc->flags & CHIP_HAS_VOLUME) ? " volume" : "", (desc->flags & CHIP_HAS_BASSTREBLE) ? " bass/treble" : "",