aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErnesto Hernández-Novich <emhn@usb.ve>2008-04-22 13:45:58 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-04-24 13:07:51 -0400
commit97275ac514c7f1131f42f8b06e073b144c744e78 (patch)
tree5f79cdd6007b2b131152c1c7f7ae5ca79aa23698
parent76e41e4851e0c8b642e348d8489d7645b8dae21e (diff)
V4L/DVB (7366): Support for a 16-channel bt878 card
I have what looks like a Geovision GV-600 (or 650) card. It has a large chip in the middle labeled CONEXANT FUSION 878A 25878-13 E345881.1 0312 TAIWAN It has an audio connector coming out from a chip labeled ATMEL 0242 AT89C2051-24PI It is identified as follows on my Debian GNU/Linux Etch (kernel 2.6.18) ... 01:0a.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11) 01:0a.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11) ... 01:0a.0 0400: 109e:036e (rev 11) Subsystem: 008a:763c Flags: bus master, medium devsel, latency 64, IRQ 58 Memory at dfffe000 (32-bit, prefetchable) [size=4K] Capabilities: [44] Vital Product Data Capabilities: [4c] Power Management version 2 01:0a.1 0480: 109e:0878 (rev 11) Subsystem: 008a:763c Flags: bus master, medium devsel, latency 64, IRQ 58 Memory at dffff000 (32-bit, prefetchable) [size=4K] Capabilities: [44] Vital Product Data Capabilities: [4c] Power Management version 2 It was being detected as a GENERIC UNKNOWN CARD both by the 2.6.18 kernel and the latest v4l-dvb drivers, but it did not work at all. The card has sixteen (16) BNC video inputs, four of them on the board itself and twelve on three daughter-cards. It has a single bt878 chip, no tuner and what looks like and audio input. After doing some research I managed to get only eight channels working by forcing card=125 and those DID NOT match channels 0-7 on the card, and no audio. Based on what was working for card=125, I added the card definition block, added a specific muxsel routine and got the card working fully with xawtv, where the sixteen channels show up as Composite0 to Composite15, matching the channel labels in the card and daughter-cards. I have made no efforts yet to get audio working, but would appreciate any pointers. Signed-off-by: Ernesto Hernández-Novich <emhn@usb.ve> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r--Documentation/video4linux/CARDLIST.bttv1
-rw-r--r--drivers/media/video/bt8xx/bttv-cards.c28
-rw-r--r--drivers/media/video/bt8xx/bttv.h1
3 files changed, 30 insertions, 0 deletions
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv
index d97cf7cc6088..17911d038765 100644
--- a/Documentation/video4linux/CARDLIST.bttv
+++ b/Documentation/video4linux/CARDLIST.bttv
@@ -148,3 +148,4 @@
148147 -> VoodooTV 200 (USA) [121a:3000] 148147 -> VoodooTV 200 (USA) [121a:3000]
149148 -> DViCO FusionHDTV 2 [dbc0:d200] 149148 -> DViCO FusionHDTV 2 [dbc0:d200]
150149 -> Typhoon TV-Tuner PCI (50684) 150149 -> Typhoon TV-Tuner PCI (50684)
151150 -> Geovision GV-600 [008a:763c]
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c
index b963bde97412..417dd552dba9 100644
--- a/drivers/media/video/bt8xx/bttv-cards.c
+++ b/drivers/media/video/bt8xx/bttv-cards.c
@@ -71,6 +71,8 @@ static void kodicom4400r_init(struct bttv *btv);
71static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input); 71static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
72static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input); 72static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);
73 73
74static void geovision_muxsel(struct bttv *btv, unsigned int input);
75
74static int terratec_active_radio_upgrade(struct bttv *btv); 76static int terratec_active_radio_upgrade(struct bttv *btv);
75static int tea5757_read(struct bttv *btv); 77static int tea5757_read(struct bttv *btv);
76static int tea5757_write(struct bttv *btv, int value); 78static int tea5757_write(struct bttv *btv, int value);
@@ -301,6 +303,7 @@ static struct CARD {
301 { 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE, "DViCO FusionHDTV 5 Lite" }, 303 { 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE, "DViCO FusionHDTV 5 Lite" },
302 { 0x00261822, BTTV_BOARD_TWINHAN_DST, "DNTV Live! Mini "}, 304 { 0x00261822, BTTV_BOARD_TWINHAN_DST, "DNTV Live! Mini "},
303 { 0xd200dbc0, BTTV_BOARD_DVICO_FUSIONHDTV_2, "DViCO FusionHDTV 2" }, 305 { 0xd200dbc0, BTTV_BOARD_DVICO_FUSIONHDTV_2, "DViCO FusionHDTV 2" },
306 { 0x763c008a, BTTV_BOARD_GEOVISION_GV600, "GeoVision GV-600" },
304 307
305 { 0, -1, NULL } 308 { 0, -1, NULL }
306}; 309};
@@ -2994,6 +2997,24 @@ struct tvcard bttv_tvcards[] = {
2994 .tuner_addr = ADDR_UNSET, 2997 .tuner_addr = ADDR_UNSET,
2995 .radio_addr = ADDR_UNSET, 2998 .radio_addr = ADDR_UNSET,
2996 }, 2999 },
3000 [BTTV_BOARD_GEOVISION_GV600] = {
3001 /* emhn@usb.ve */
3002 .name = "Geovision GV-600",
3003 .video_inputs = 16,
3004 .audio_inputs = 0,
3005 .tuner = UNSET,
3006 .svhs = UNSET,
3007 .gpiomask = 0x0,
3008 .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2,
3009 2, 2, 2, 2, 2, 2, 2, 2 },
3010 .muxsel_hook = geovision_muxsel,
3011 .gpiomux = { 0 },
3012 .no_msp34xx = 1,
3013 .pll = PLL_28,
3014 .tuner_type = UNSET,
3015 .tuner_addr = ADDR_UNSET,
3016 .radio_addr = ADDR_UNSET,
3017 },
2997}; 3018};
2998 3019
2999static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); 3020static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
@@ -3333,6 +3354,13 @@ static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input)
3333 gpio_bits( 3<<9, inmux<<9 ); 3354 gpio_bits( 3<<9, inmux<<9 );
3334} 3355}
3335 3356
3357static void geovision_muxsel(struct bttv *btv, unsigned int input)
3358{
3359 unsigned int inmux = input % 16;
3360 gpio_inout(0xf, 0xf);
3361 gpio_bits(0xf, inmux);
3362}
3363
3336/* ----------------------------------------------------------------------- */ 3364/* ----------------------------------------------------------------------- */
3337 3365
3338static void bttv_reset_audio(struct bttv *btv) 3366static void bttv_reset_audio(struct bttv *btv)
diff --git a/drivers/media/video/bt8xx/bttv.h b/drivers/media/video/bt8xx/bttv.h
index bf4c339a520c..ed0cd3b1a01e 100644
--- a/drivers/media/video/bt8xx/bttv.h
+++ b/drivers/media/video/bt8xx/bttv.h
@@ -173,6 +173,7 @@
173#define BTTV_BOARD_VOODOOTV_200 0x93 173#define BTTV_BOARD_VOODOOTV_200 0x93
174#define BTTV_BOARD_DVICO_FUSIONHDTV_2 0x94 174#define BTTV_BOARD_DVICO_FUSIONHDTV_2 0x94
175#define BTTV_BOARD_TYPHOON_TVTUNERPCI 0x95 175#define BTTV_BOARD_TYPHOON_TVTUNERPCI 0x95
176#define BTTV_BOARD_GEOVISION_GV600 0x96
176 177
177 178
178/* more card-specific defines */ 179/* more card-specific defines */