From 72a5c5c4434c19ce0026b5c06d1a1c479593783b Mon Sep 17 00:00:00 2001 From: orion Date: Sun, 2 Feb 2003 17:46:00 +0000 Subject: [PATCH] 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. PR: i386/43879 Submitted by: MOROHOSHI Akihiko Approved by: roger MFC after: 6 days --- sys/dev/bktr/bktr_audio.c | 124 +++++++++++++++++++------------------- sys/dev/bktr/bktr_card.c | 32 +++++++++- sys/dev/bktr/bktr_card.h | 6 +- 3 files changed, 95 insertions(+), 67 deletions(-) diff --git a/sys/dev/bktr/bktr_audio.c b/sys/dev/bktr/bktr_audio.c index 8508eb1a0a98..66af91025ab8 100644 --- a/sys/dev/bktr/bktr_audio.c +++ b/sys/dev/bktr/bktr_audio.c @@ -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 @@ set_audio( bktr_ptr_t bktr, int cmd ) * 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 @@ set_BTSC( bktr_ptr_t bktr, int control ) } /* - * 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 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 BCTV_GPIO_REG0 1 -#define BCTV_GPIO_REG1 3 +#define BCTV2_GPIO_REG0 1 +#define BCTV2_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_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 BCTV2_GPIO_ADDR_MASK 0x000300 +#define BCTV2_GPIO_WE 0x000400 +#define BCTV2_GPIO_OE 0x000800 +#define BCTV2_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_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 @@ bctv_gpio_write( bktr_ptr_t bktr, int port, int val ) 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 @@ bctv_gpio_read( bktr_ptr_t bktr, int port ) 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 --git a/sys/dev/bktr/bktr_card.c b/sys/dev/bktr/bktr_card.c index 39cd7337f553..a37a070e237c 100644 --- a/sys/dev/bktr/bktr_card.c +++ b/sys/dev/bktr/bktr_card.c @@ -245,7 +245,7 @@ static const struct CARDTYPE cards[] = { { 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 @@ static const struct CARDTYPE cards[] = { { 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 @@ static int locate_eeprom_address( bktr_ptr_t bktr) { #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 @@ probeCard( bktr_ptr_t bktr, int verbose, int unit ) 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", @@ -1086,6 +1109,11 @@ checkTuner: goto checkDBX; break; + case CARD_IO_BCTV3: + select_tuner( bktr, ALPS_TSCH5 ); /* ALPS_TSCH6, in fact. */ + goto checkDBX; + break; + } /* end switch(card) */ diff --git a/sys/dev/bktr/bktr_card.h b/sys/dev/bktr/bktr_card.h index 41ec198ec1bb..b36802e68026 100644 --- a/sys/dev/bktr/bktr_card.h +++ b/sys/dev/bktr/bktr_card.h @@ -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,8 +76,10 @@ #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 +#define CARD_IO_GV CARD_IO_BCTV2 int signCard( bktr_ptr_t bktr, int offset, int count, u_char* sig ); void probeCard( bktr_ptr_t bktr, int verbose, int unit);