From f34c3c16c93820c250856d4f2c833fc12a51e146 Mon Sep 17 00:00:00 2001 From: roger Date: Sat, 13 Nov 1999 14:54:00 +0000 Subject: [PATCH] Update to driver 2.05 Make tuner on French SECAM Hauppauge cards work Submitted by: Cyrille Lefevre Fix clipping bugs ready for Xv support in XFree86 4.0 Submitted by: Thomas Mueller Fix the 'feature' where /dev/vbi needed to be opened before /dev/bktr when using Teletext with Alevt and FXTV. Requested by: Randall Hopper --- sys/dev/bktr/CHANGELOG.TXT | 15 ++++++++++++--- sys/dev/bktr/bktr_card.c | 20 ++++++++++++-------- sys/dev/bktr/bktr_core.c | 28 +++++++++++----------------- sys/dev/bktr/bktr_tuner.c | 4 ++-- 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/sys/dev/bktr/CHANGELOG.TXT b/sys/dev/bktr/CHANGELOG.TXT index 9e64f7a2d16..d2201157ff2 100755 --- a/sys/dev/bktr/CHANGELOG.TXT +++ b/sys/dev/bktr/CHANGELOG.TXT @@ -254,7 +254,7 @@ and MSP34xx Audio chip. Fixed i2c read error. Hauppauge supplied details of new Tuner Types. Danny Braniss submitted Bt878 - AverMedia detection with PCI subsystem vendor id. + AVerMedia detection with PCI subsystem vendor id. 1.57 26 Jan 1999 Roger Hardiman Support for MSP3410D / MSP3415D Stereo/Mono audio @@ -418,10 +418,19 @@ Found FM radio bug mute introduced in release 2.00 2.04 20 Oct 1999 Roger Hardiman - Updated AverMedia audio sources to support FM and Line In - sources properly. (Based on info supplied by AverMedia) + Updated AVerMedia audio sources to support FM and Line In + sources properly. (Based on info supplied by AVerMedia) Make PLL mode the default for Bt878 chips. This means PAL Bt878 users no longer need the BKTR_USE_PLL kernel option. Detect and auto-configure Dolby Surround Sound DPL3518A chip on Hauppauge WinTV Theater. From Frank Nobis +2.05 8 Nov 1999 Update tuner control codes for Philips SECAM. Submitted by + Cyrille Lefevre + Updated clipping code, ready for Xv support in XFree86 4.0, + submitted by Thomas Mueller + Thomas also has information on a LynxOS port of this driver. + Phase out the rgb_prog RISC program and use rgb_vbi_prog as + the default. Now you no longer have to open /dev/vbi + before /dev/bktr. - Roger Hardiman + diff --git a/sys/dev/bktr/bktr_card.c b/sys/dev/bktr/bktr_card.c index f9d69675fd4..63659459f42 100644 --- a/sys/dev/bktr/bktr_card.c +++ b/sys/dev/bktr/bktr_card.c @@ -800,12 +800,12 @@ probeCard( bktr_ptr_t bktr, int verbose, int unit ) 1 EXTERNAL 2 OTHER 3 Philips FI1216 BG - 4 Philips FI1216MF BGLL' + 4 Philips FI1216MF BGLL' PHILIPS_SECAM 5 Philips FI1236 MN PHILIPS_NTSC 6 Philips FI1246 I PHILIPS_PALI 7 Philips FI1256 DK 8 Philips FI1216 MK2 BG PHILIPS_PALI - 9 Philips FI1216MF MK2 BGLL' + 9 Philips FI1216MF MK2 BGLL' PHILIPS_SECAM a Philips FI1236 MK2 MN PHILIPS_NTSC b Philips FI1246 MK2 I PHILIPS_PALI c Philips FI1256 MK2 DK @@ -813,12 +813,12 @@ probeCard( bktr_ptr_t bktr, int verbose, int unit ) e Temic 4002FH5 BG TEMIC_PAL f Temic 4062FY5 I TEMIC_PALI 10 Philips FR1216 MK2 BG - 11 Philips FR1216MF MK2 BGLL' + 11 Philips FR1216MF MK2 BGLL' PHILIPS_FR1236_SECAM 12 Philips FR1236 MK2 MN PHILIPS_FR1236_NTSC 13 Philips FR1246 MK2 I 14 Philips FR1256 MK2 DK 15 Philips FM1216 BG PHILIPS_FR1216_PAL - 16 Philips FM1216MF BGLL' + 16 Philips FM1216MF BGLL' PHILIPS_FR1236_SECAM 17 Philips FM1236 MN PHILIPS_FR1236_NTSC 18 Philips FM1246 I 19 Philips FM1256 DK @@ -857,10 +857,14 @@ probeCard( bktr_ptr_t bktr, int verbose, int unit ) tuner_code = eeprom[9]; switch (tuner_code) { - case 0x5: - case 0x0a: - case 0x1a: - select_tuner( bktr, PHILIPS_NTSC ); + case 0x4: + case 0x9: + select_tuner( bktr, PHILIPS_SECAM ); + goto checkDBX; + + case 0x11: + case 0x16: + select_tuner( bktr, PHILIPS_FR1236_SECAM ); goto checkDBX; case 0x12: diff --git a/sys/dev/bktr/bktr_core.c b/sys/dev/bktr/bktr_core.c index e55e6f2e4e6..a6158c59a1a 100644 --- a/sys/dev/bktr/bktr_core.c +++ b/sys/dev/bktr/bktr_core.c @@ -702,11 +702,11 @@ common_bktr_intr( void *arg ) /* - * Process the VBI data if it is being captured. We do this once + * Process the VBI data if /dev/vbi is open. We do this after * both Odd and Even VBI data is captured. Therefore we do this * in the Even field interrupt handler. */ - if ((bktr->vbiflags & VBI_CAPTURE)&&(field==EVEN_F)) { + if ((bktr->vbiflags & VBI_OPEN)&&(field==EVEN_F)) { /* Put VBI data into circular buffer */ vbidecode(bktr); @@ -2527,7 +2527,8 @@ static bool_t split(bktr_reg_t * bktr, volatile u_long **dma_prog, int width , flag = OP_SOL | OP_EOL; } else if (bktr->current_col == 0 ) { flag = OP_SOL; - } else if (bktr->current_col == cols) { + } else if (bktr->current_col == cols + || bktr->current_col + width >= cols) { flag = OP_EOL; } else flag = 0; @@ -2553,7 +2554,8 @@ static bool_t split(bktr_reg_t * bktr, volatile u_long **dma_prog, int width , } else if (bktr->current_col == 0 ) { flag = OP_SOL; flag2 = 0; - } else if (bktr->current_col >= cols) { + } else if (bktr->current_col >= cols + || bktr->current_col + width >= cols) { flag = 0; flag2 = OP_EOL; } else { @@ -2676,7 +2678,7 @@ rgb_vbi_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) *dma_prog++ = OP_SYNC | BKTR_FM1; *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 0; i < (rows/interlace); i++) { + for (i = 0; i < rows; i += interlace) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -2733,7 +2735,7 @@ rgb_vbi_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) *dma_prog++ = OP_SYNC | BKTR_FM1; *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 0; i < (rows/interlace); i++) { + for (i = 1; i < rows; i += interlace) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -2834,7 +2836,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) /* sync, mode indicator packed data */ *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 0; i < (rows/interlace); i++) { + for (i = 0; i < rows; i += interlace) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -2900,7 +2902,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) *dma_prog++ = OP_SYNC | BKTR_RESYNC | BKTR_FM1; *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 0; i < (rows/interlace); i++) { + for (i = 1; i < rows; i += interlace) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -3448,18 +3450,10 @@ build_dma_prog( bktr_ptr_t bktr, char i_flag ) rows = bktr->rows; cols = bktr->cols; - bktr->vbiflags &= ~VBI_CAPTURE; /* default - no vbi capture */ - /* If /dev/vbi is already open, then use the rgb_vbi RISC program */ - if ( (pf_int->public.type == METEOR_PIXTYPE_RGB) - &&(bktr->vbiflags & VBI_OPEN) ) { - if (i_flag==1) bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_EVEN; - if (i_flag==2) bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_ODD; - if (i_flag==3) bktr->bktr_cap_ctl |= - BT848_CAP_CTL_VBI_EVEN | BT848_CAP_CTL_VBI_ODD; + if (pf_int->public.type == METEOR_PIXTYPE_RGB) { bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_EVEN | BT848_CAP_CTL_VBI_ODD; - bktr->vbiflags |= VBI_CAPTURE; rgb_vbi_prog(bktr, i_flag, cols, rows, interlace); return; } diff --git a/sys/dev/bktr/bktr_tuner.c b/sys/dev/bktr/bktr_tuner.c index 04db92fcb13..6f67fbb9187 100644 --- a/sys/dev/bktr/bktr_tuner.c +++ b/sys/dev/bktr/bktr_tuner.c @@ -186,7 +186,7 @@ static const struct TUNER tuners[] = { TSA552x_SCONTROL, 0x00 }, { 0x00, 0x00 }, /* band-switch crosspoints */ - { 0xa0, 0x90, 0x30, 0x00 } }, /* the band-switch values */ + { 0xa7, 0x97, 0x37, 0x00 } }, /* the band-switch values */ /* TEMIC_PAL I */ { "Temic PAL I", /* the 'name' */ @@ -236,7 +236,7 @@ static const struct TUNER tuners[] = { TSA552x_FCONTROL, TSA552x_RADIO }, { 0x00, 0x00 }, /* band-switch crosspoints */ - { 0xa0, 0x90, 0x30, 0xa4 } }, /* the band-switch values */ + { 0xa7, 0x97, 0x37, 0xa4 } }, /* the band-switch values */ /* ALPS TSCH5 NTSC */ { "ALPS TSCH5 NTSC FM", /* the 'name' */ -- 2.45.2