Date: Thu, 10 Oct 2002 08:37:08 +0900 (JST) From: MOROHOSHI Akihiko <moro@remus.dti.ne.jp> To: FreeBSD-gnats-submit@FreeBSD.org Subject: i386/43879: [PATCH] bktr: add IO-DATA GV-BCTV3/PCI card support Message-ID: <200210092337.g99Nb8hh002736@chocolat.a-bao-a-que.kyagroup.com>
next in thread | raw e-mail | index | archive | help
>Number: 43879
>Category: i386
>Synopsis: [PATCH] bktr: add IO-DATA GV-BCTV3/PCI card support
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Oct 09 16:40:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: MOROHOSHI Akihiko
>Release: FreeBSD 4.7-RC i386
>Organization:
>Environment:
System: FreeBSD chocolat.a-bao-a-que.kyagroup.com 4.7-RC FreeBSD 4.7-RC #0: Mon Sep 30 10:43:41 JST 2002 moro@chocolat.a-bao-a-que.kyagroup.com:/home/obj/home/src/sys/CHOCOLAT i386
>Description:
a patch to add IO-DATA GV-BCTV3/PCI TV-tuner card support to bktr.
It is against 4.7-RC.
Changes are:
* add BCTV3/PCI entry.
* rename functions bctv_* to bctv2_* and macros BCTV_* to BCTV2_*
for coexistance of BCTV2 and BCTV3.
* rename CARD_IO_GV to CARD_TO_BCTV2.
* add auto recognition of BCTV3/PCI.
>How-To-Repeat:
>Fix:
diff -urN -x *.orig bktr.orig/bktr_audio.c bktr/bktr_audio.c
--- bktr.orig/bktr_audio.c Wed Nov 1 18:36:14 2000
+++ bktr/bktr_audio.c Wed Oct 9 09:36:08 2002
@@ -85,13 +85,11 @@
#endif
/*
- * Prototypes for the GV_BCTV specific functions.
+ * Prototypes for the GV_BCTV2 specific functions.
*/
-void set_bctv_audio( bktr_ptr_t bktr );
-void bctv_gpio_write( bktr_ptr_t bktr, int port, int val );
-/*int bctv_gpio_read( bktr_ptr_t bktr, int port );*/ /* Not used */
-
-
+void set_bctv2_audio( bktr_ptr_t bktr );
+void bctv2_gpio_write( bktr_ptr_t bktr, int port, int val );
+/*int bctv2_gpio_read( bktr_ptr_t bktr, int port );*/ /* Not used */
/*
* init_audio_devices
@@ -171,8 +169,8 @@
* audio source. The I/O_GV card has a more advanced multiplexer
* and requires special handling.
*/
- if ( bktr->bt848_card == CARD_IO_GV ) {
- set_bctv_audio( bktr );
+ if ( bktr->bt848_card == CARD_IO_BCTV2 ) {
+ set_bctv2_audio( bktr );
return( 0 );
}
@@ -315,87 +313,87 @@
}
/*
- * CARD_GV_BCTV specific functions.
+ * CARD_GV_BCTV2 specific functions.
*/
-#define BCTV_AUDIO_MAIN 0x10 /* main audio program */
-#define BCTV_AUDIO_SUB 0x20 /* sub audio program */
-#define BCTV_AUDIO_BOTH 0x30 /* main(L) + sub(R) program */
-
-#define BCTV_GPIO_REG0 1
-#define BCTV_GPIO_REG1 3
-
-#define BCTV_GR0_AUDIO_MODE 3
-#define BCTV_GR0_AUDIO_MAIN 0 /* main program */
-#define BCTV_GR0_AUDIO_SUB 3 /* sub program */
-#define BCTV_GR0_AUDIO_BOTH 1 /* main(L) + sub(R) */
-#define BCTV_GR0_AUDIO_MUTE 4 /* audio mute */
-#define BCTV_GR0_AUDIO_MONO 8 /* force mono */
+#define BCTV2_AUDIO_MAIN 0x10 /* main audio program */
+#define BCTV2_AUDIO_SUB 0x20 /* sub audio program */
+#define BCTV2_AUDIO_BOTH 0x30 /* main(L) + sub(R) program */
+
+#define BCTV2_GPIO_REG0 1
+#define BCTV2_GPIO_REG1 3
+
+#define BCTV2_GR0_AUDIO_MODE 3
+#define BCTV2_GR0_AUDIO_MAIN 0 /* main program */
+#define BCTV2_GR0_AUDIO_SUB 3 /* sub program */
+#define BCTV2_GR0_AUDIO_BOTH 1 /* main(L) + sub(R) */
+#define BCTV2_GR0_AUDIO_MUTE 4 /* audio mute */
+#define BCTV2_GR0_AUDIO_MONO 8 /* force mono */
void
-set_bctv_audio( bktr_ptr_t bktr )
+set_bctv2_audio( bktr_ptr_t bktr )
{
int data;
switch (bktr->audio_mux_select) {
case 1: /* external */
case 2: /* internal */
- bctv_gpio_write(bktr, BCTV_GPIO_REG1, 0);
+ bctv2_gpio_write(bktr, BCTV2_GPIO_REG1, 0);
break;
default: /* tuner */
- bctv_gpio_write(bktr, BCTV_GPIO_REG1, 1);
+ bctv2_gpio_write(bktr, BCTV2_GPIO_REG1, 1);
break;
}
/* switch (bktr->audio_sap_select) { */
- switch (BCTV_AUDIO_BOTH) {
- case BCTV_AUDIO_SUB:
- data = BCTV_GR0_AUDIO_SUB;
+ switch (BCTV2_AUDIO_BOTH) {
+ case BCTV2_AUDIO_SUB:
+ data = BCTV2_GR0_AUDIO_SUB;
break;
- case BCTV_AUDIO_BOTH:
- data = BCTV_GR0_AUDIO_BOTH;
+ case BCTV2_AUDIO_BOTH:
+ data = BCTV2_GR0_AUDIO_BOTH;
break;
- case BCTV_AUDIO_MAIN:
+ case BCTV2_AUDIO_MAIN:
default:
- data = BCTV_GR0_AUDIO_MAIN;
+ data = BCTV2_GR0_AUDIO_MAIN;
break;
}
if (bktr->audio_mute_state == TRUE)
- data |= BCTV_GR0_AUDIO_MUTE;
+ data |= BCTV2_GR0_AUDIO_MUTE;
- bctv_gpio_write(bktr, BCTV_GPIO_REG0, data);
+ bctv2_gpio_write(bktr, BCTV2_GPIO_REG0, data);
return;
}
/* gpio_data bit assignment */
-#define BCTV_GPIO_ADDR_MASK 0x000300
-#define BCTV_GPIO_WE 0x000400
-#define BCTV_GPIO_OE 0x000800
-#define BCTV_GPIO_VAL_MASK 0x00f000
-
-#define BCTV_GPIO_PORT_MASK 3
-#define BCTV_GPIO_ADDR_SHIFT 8
-#define BCTV_GPIO_VAL_SHIFT 12
+#define BCTV2_GPIO_ADDR_MASK 0x000300
+#define BCTV2_GPIO_WE 0x000400
+#define BCTV2_GPIO_OE 0x000800
+#define BCTV2_GPIO_VAL_MASK 0x00f000
+
+#define BCTV2_GPIO_PORT_MASK 3
+#define BCTV2_GPIO_ADDR_SHIFT 8
+#define BCTV2_GPIO_VAL_SHIFT 12
/* gpio_out_en value for read/write */
-#define BCTV_GPIO_OUT_RMASK 0x000f00
-#define BCTV_GPIO_OUT_WMASK 0x00ff00
+#define BCTV2_GPIO_OUT_RMASK 0x000f00
+#define BCTV2_GPIO_OUT_WMASK 0x00ff00
-#define BCTV_BITS 100
+#define BCTV2_BITS 100
void
-bctv_gpio_write( bktr_ptr_t bktr, int port, int val )
+bctv2_gpio_write( bktr_ptr_t bktr, int port, int val )
{
u_long data, outbits;
- port &= BCTV_GPIO_PORT_MASK;
+ port &= BCTV2_GPIO_PORT_MASK;
switch (port) {
case 1:
case 3:
- data = ((val << BCTV_GPIO_VAL_SHIFT) & BCTV_GPIO_VAL_MASK) |
- ((port << BCTV_GPIO_ADDR_SHIFT) & BCTV_GPIO_ADDR_MASK) |
- BCTV_GPIO_WE | BCTV_GPIO_OE;
- outbits = BCTV_GPIO_OUT_WMASK;
+ data = ((val << BCTV2_GPIO_VAL_SHIFT) & BCTV2_GPIO_VAL_MASK) |
+ ((port << BCTV2_GPIO_ADDR_SHIFT) & BCTV2_GPIO_ADDR_MASK) |
+ BCTV2_GPIO_WE | BCTV2_GPIO_OE;
+ outbits = BCTV2_GPIO_OUT_WMASK;
break;
default:
return;
@@ -403,28 +401,28 @@
OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
OUTL(bktr, BKTR_GPIO_DATA, data);
OUTL(bktr, BKTR_GPIO_OUT_EN, outbits);
- DELAY(BCTV_BITS);
- OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV_GPIO_WE);
- DELAY(BCTV_BITS);
+ DELAY(BCTV2_BITS);
+ OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV2_GPIO_WE);
+ DELAY(BCTV2_BITS);
OUTL(bktr, BKTR_GPIO_DATA, data);
- DELAY(BCTV_BITS);
+ DELAY(BCTV2_BITS);
OUTL(bktr, BKTR_GPIO_DATA, ~0);
OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
}
/* Not yet used
int
-bctv_gpio_read( bktr_ptr_t bktr, int port )
+bctv2_gpio_read( bktr_ptr_t bktr, int port )
{
u_long data, outbits, ret;
- port &= BCTV_GPIO_PORT_MASK;
+ port &= BCTV2_GPIO_PORT_MASK;
switch (port) {
case 1:
case 3:
- data = ((port << BCTV_GPIO_ADDR_SHIFT) & BCTV_GPIO_ADDR_MASK) |
- BCTV_GPIO_WE | BCTV_GPIO_OE;
- outbits = BCTV_GPIO_OUT_RMASK;
+ data = ((port << BCTV2_GPIO_ADDR_SHIFT) & BCTV2_GPIO_ADDR_MASK) |
+ BCTV2_GPIO_WE | BCTV2_GPIO_OE;
+ outbits = BCTV2_GPIO_OUT_RMASK;
break;
default:
return( -1 );
@@ -432,16 +430,16 @@
OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
OUTL(bktr, BKTR_GPIO_DATA, data);
OUTL(bktr, BKTR_GPIO_OUT_EN, outbits);
- DELAY(BCTV_BITS);
- OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV_GPIO_OE);
- DELAY(BCTV_BITS);
+ DELAY(BCTV2_BITS);
+ OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV2_GPIO_OE);
+ DELAY(BCTV2_BITS);
ret = INL(bktr, BKTR_GPIO_DATA);
- DELAY(BCTV_BITS);
+ DELAY(BCTV2_BITS);
OUTL(bktr, BKTR_GPIO_DATA, data);
- DELAY(BCTV_BITS);
+ DELAY(BCTV2_BITS);
OUTL(bktr, BKTR_GPIO_DATA, ~0);
OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
- return( (ret & BCTV_GPIO_VAL_MASK) >> BCTV_GPIO_VAL_SHIFT );
+ return( (ret & BCTV2_GPIO_VAL_MASK) >> BCTV2_GPIO_VAL_SHIFT );
}
*/
diff -urN -x *.orig bktr.orig/bktr_card.c bktr/bktr_card.c
--- bktr.orig/bktr_card.c Wed Nov 1 18:36:14 2000
+++ bktr/bktr_card.c Wed Oct 9 09:38:50 2002
@@ -245,7 +245,7 @@
{ 0x01, 0x02, 0x01, 0x00, 1 }, /* audio MUX values */
0x0f }, /* GPIO mask */
- { CARD_IO_GV, /* the card id */
+ { CARD_IO_BCTV2, /* the card id */
"I/O DATA GV-BCTV2/PCI", /* the 'name' */
NULL, /* the tuner */
0, /* the tuner i2c address */
@@ -342,11 +342,24 @@
{ 0x20000, 0x00000, 0x30000, 0x40000, 1 }, /* audio MUX values*/
0x70000 }, /* GPIO mask */
+ { CARD_IO_BCTV3, /* the card id */
+ "I/O DATA GV-BCTV3/PCI", /* the 'name' */
+ NULL, /* the tuner */
+ 0, /* the tuner i2c address */
+ 0, /* dbx is optional */
+ 0,
+ 0,
+ 0, /* EEProm type */
+ 0, /* EEProm size */
+ /* Tuner, Extern, Intern, Mute, Enabled */
+ { 0x10000, 0, 0x10000, 0, 1 }, /* audio MUX values */
+ 0x10f00 }, /* GPIO mask */
+
};
struct bt848_card_sig bt848_card_signature[1]= {
/* IMS TURBO TV : card 5 */
- { 5,9, {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 02, 00, 00, 00}}
+ { 5,9, {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 02, 00, 00, 00, 00}}
};
@@ -540,7 +553,9 @@
#define PCI_VENDOR_FLYVIDEO 0x1851
#define PCI_VENDOR_FLYVIDEO_2 0x1852
#define PCI_VENDOR_PINNACLE_ALT 0xBD11
+#define PCI_VENDOR_IODATA 0x10fc
+#define MODEL_IODATA_GV_BCTV3_PCI 0x4020
void
probeCard( bktr_ptr_t bktr, int verbose, int unit )
@@ -674,6 +689,14 @@
goto checkTuner;
}
+ if (subsystem_vendor_id == 0x10fc &&
+ subsystem_id == 0x4020) {
+ bktr->card = cards[ (card = CARD_IO_BCTV3) ];
+ bktr->card.eepromAddr = eeprom_i2c_address;
+ bktr->card.eepromSize = (u_char)(256 / EEPROMBLOCKSIZE);
+ goto checkTuner;
+ }
+
/* Vendor is unknown. We will use the standard probe code */
/* which may not give best results */
printf("%s: Warning - card vendor 0x%04x (model 0x%04x) unknown.\n",
@@ -1083,6 +1106,11 @@
select_tuner( bktr, PHILIPS_FR1236_NTSC );
#endif
goto checkDBX;
+ break;
+
+ case CARD_IO_BCTV3:
+ select_tuner( bktr, ALPS_TSCH5 ); /* ALPS_TSCH6, in fact. */
+ goto checkDBX;
break;
} /* end switch(card) */
diff -urN -x *.orig bktr.orig/bktr_card.h bktr/bktr_card.h
--- bktr.orig/bktr_card.h Mon Sep 11 16:59:57 2000
+++ bktr/bktr_card.h Sat Oct 5 18:32:02 2002
@@ -68,7 +68,7 @@
#define CARD_AVER_MEDIA 6
#define CARD_OSPREY 7
#define CARD_NEC_PK 8
-#define CARD_IO_GV 9
+#define CARD_IO_BCTV2 9
#define CARD_FLYVIDEO 10
#define CARD_ZOLTRIX 11
#define CARD_KISS 12
@@ -76,7 +76,8 @@
#define CARD_ASKEY_DYNALINK_MAGIC_TVIEW 14
#define CARD_LEADTEK 15
#define CARD_TERRATVPLUS 16
-#define Bt848_MAX_CARD 17
+#define CARD_IO_BCTV3 17
+#define Bt848_MAX_CARD 18
int signCard( bktr_ptr_t bktr, int offset, int count, u_char* sig );
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200210092337.g99Nb8hh002736>
