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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

Signed-off-by: Hisashi Ito <[email protected]>

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 <[email protected]>
+	   (Originally by Hiroshi Ohno <[email protected]>) */
+	.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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux