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" : "",