[PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI

From: ITO N. Hisashi
Date: Sat Dec 03 2005 - 21:12:07 EST


Add support for IO-DATA GV-BCTV/PCI and IO-DATA GV-BCTV2/PCI.

Signed-off-by: Hisashi Ito <kuro@xxxxxxx>

diff -U 5 -rpN linux-2.6.14.3-vanilla/drivers/media/video/bttv-cards.c linux-2.6.14.3/drivers/media/video/bttv-cards.c
--- linux-2.6.14.3-vanilla/drivers/media/video/bttv-cards.c 2005-11-25 07:10:21.000000000 +0900
+++ linux-2.6.14.3/drivers/media/video/bttv-cards.c 2005-12-04 09:56:50.000000000 +0900
@@ -54,10 +54,11 @@ static void lt9415_audio(struct bttv *bt
static void avermedia_tvphone_audio(struct bttv *btv, struct video_audio *v,
int set);
static void avermedia_tv_stereo_audio(struct bttv *btv, struct video_audio *v,
int set);
static void terratv_audio(struct bttv *btv, struct video_audio *v, int set);
+static void gvbctv2pci_audio(struct bttv *btv, struct video_audio *v, int set);
static void gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set);
static void gvbctv5pci_audio(struct bttv *btv, struct video_audio *v, int set);
static void winfast2000_audio(struct bttv *btv, struct video_audio *v, int set);
static void pvbt878p9b_audio(struct bttv *btv, struct video_audio *v, int set);
static void fv2000s_audio(struct bttv *btv, struct video_audio *v, int set);
@@ -81,10 +82,15 @@ static void kodicom4400r_muxsel(struct b
static void kodicom4400r_init(struct bttv *btv);

static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);

+static void gvbctv2pci_write(struct bttv *btv, int data);
+static int gvbctv2pci_read(struct bttv *btv);
+static void gvbctv2pci_muxsel(struct bttv *btv, unsigned int input);
+static void gvbctv2pci_init(struct bttv *btv);
+
static int terratec_active_radio_upgrade(struct bttv *btv);
static int tea5757_read(struct bttv *btv);
static int tea5757_write(struct bttv *btv, int value);
static void identify_by_eeprom(struct bttv *btv,
unsigned char eeprom_data[256]);
@@ -2416,10 +2422,27 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1,
.pll = PLL_28,
.tuner_type = TUNER_YMEC_TVF66T5_B_DFF,
.tuner_addr = 0xc1 >>1,
.has_radio = 1,
+},{
+ /* Hisashi Ito <kuro@xxxxxxx>
+ (Originally by Hiroshi Ohno <hiroshi@xxxxxxxxxxxx>) */
+ .name = "IODATA GV-BCTV2/PCI",
+ .video_inputs = 3,
+ .audio_inputs = 1,
+ .tuner = 0,
+ .svhs = 2,
+ .muxsel = {2, 3, 1},
+ .no_msp34xx = 1,
+ .no_tda9875 = 1,
+ .no_tda7432 = 1,
+ .pll = PLL_28,
+ .tuner_type = TUNER_ALPS_TSBH1_NTSC,
+ .tuner_addr = ADDR_UNSET,
+ .muxsel_hook = gvbctv2pci_muxsel,
+ .audio_hook = gvbctv2pci_audio,
}};

static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);

/* ----------------------------------------------------------------------- */
@@ -2749,10 +2772,52 @@ static void sigmaSLC_muxsel(struct bttv
unsigned int inmux = input % 4;
gpio_inout( 3<<9, 3<<9 );
gpio_bits( 3<<9, inmux<<9 );
}

+static void
+gvbctv2pci_write(struct bttv *btv, int data)
+{
+ btwrite(0, BT848_GPIO_OUT_EN);
+ btwrite(data, BT848_GPIO_DATA);
+ btwrite(0xff00, BT848_GPIO_OUT_EN);
+ data &= ~0x400;
+ btwrite(data, BT848_GPIO_DATA);
+ data |= 0x400;
+ btwrite(data, BT848_GPIO_DATA);
+ btwrite(0xff00, BT848_GPIO_DATA);
+ btwrite(0, BT848_GPIO_OUT_EN);
+}
+
+static int
+gvbctv2pci_read(struct bttv *btv)
+{
+ int data;
+
+ btwrite(0, BT848_GPIO_OUT_EN);
+ btwrite(0x0d00, BT848_GPIO_DATA);
+ btwrite(0x0f00, BT848_GPIO_OUT_EN);
+ btwrite(0x0500, BT848_GPIO_DATA);
+ data = btread(BT848_GPIO_DATA);
+ btwrite(0x0d00, BT848_GPIO_DATA);
+ btwrite(0x0f00, BT848_GPIO_DATA);
+ btwrite(0, BT848_GPIO_OUT_EN);
+ return data;
+}
+
+static void
+gvbctv2pci_muxsel(struct bttv *btv, unsigned int input)
+{
+ static const int masks[] = {0x1f00, 0x0f00, 0x0f00};
+ gvbctv2pci_write(btv, masks[input]);
+}
+
+static void
+gvbctv2pci_init(struct bttv *btv)
+{
+ gvbctv2pci_write(btv, 0x4d00); /* mute */
+}
/* ----------------------------------------------------------------------- */

static void bttv_reset_audio(struct bttv *btv)
{
/*
@@ -2911,10 +2976,13 @@ void __devinit bttv_init_card2(struct bt
tibetCS16_init(btv);
break;
case BTTV_KODICOM_4400R:
kodicom4400r_init(btv);
break;
+ case BTTV_GVBCTV2PCI:
+ gvbctv2pci_init(btv);
+ break;
}

/* pll configuration */
if (!(btv->id==848 && btv->revision==0x11)) {
/* defaults from card list */
@@ -3740,10 +3808,49 @@ void winview_audio(struct bttv *btv, str
/* ----------------------------------------------------------------------- */
/* mono/stereo control for various cards (which don't use i2c chips but */
/* connect something to the GPIO pins */

static void
+gvbctv2pci_audio(struct bttv *btv, struct video_audio *v, int set)
+{
+ if (set) {
+ int con = 0x0d00;
+
+ if (v->mode & VIDEO_SOUND_LANG2) {
+ con = 0x3d00; /* LANG2 */
+ if (v->mode & VIDEO_SOUND_LANG1)
+ con = 0x1d00; /* LANG1+LANG2 */
+ }
+ /* Set BCTV2 mute here since we can't do via direct gpio. */
+ if (v->flags & VIDEO_AUDIO_MUTE)
+ con = 0x4d00;
+ gvbctv2pci_write(btv, con);
+ } else {
+ switch (gvbctv2pci_read(btv) & 0x7000) {
+ case 0x3000:
+ v->mode = VIDEO_SOUND_STEREO;
+ break;
+ case 0x4000:
+ v->mode = VIDEO_SOUND_LANG1|VIDEO_SOUND_LANG2;
+ break;
+ case 0x5000:
+ v->mode = VIDEO_SOUND_LANG2;
+ break;
+ case 0x6000:
+ v->mode = VIDEO_SOUND_LANG1;
+ break;
+ case 0x7000:
+ v->mode = VIDEO_SOUND_MONO;
+ break;
+ default:
+ v->mode = VIDEO_SOUND_MONO | VIDEO_SOUND_STEREO |
+ VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2;
+ }
+ }
+}
+
+static void
gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set)
{
unsigned int con = 0;

if (set) {
diff -U 5 -rpN linux-2.6.14.3-vanilla/drivers/media/video/bttv.h linux-2.6.14.3/drivers/media/video/bttv.h
--- linux-2.6.14.3-vanilla/drivers/media/video/bttv.h 2005-11-25 07:10:21.000000000 +0900
+++ linux-2.6.14.3/drivers/media/video/bttv.h 2005-12-04 09:08:20.000000000 +0900
@@ -135,10 +135,11 @@
#define BTTV_TIBET_CS16 0x83
#define BTTV_KODICOM_4400R 0x84
#define BTTV_ADLINK_RTV24 0x86
#define BTTV_DVICO_FUSIONHDTV_5_LITE 0x87
#define BTTV_ACORP_Y878F 0x88
+#define BTTV_GVBCTV2PCI 0x89

/* i2c address list */
#define I2C_TSA5522 0xc2
#define I2C_TDA7432 0x8a
#define I2C_BT832_ALT1 0x88
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/