<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.staging.zoneminder.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jkramarz</id>
	<title>ZoneMinder Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.staging.zoneminder.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jkramarz"/>
	<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/Special:Contributions/Jkramarz"/>
	<updated>2026-04-20T05:49:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.staging.zoneminder.com/index.php?title=Digiflower&amp;diff=6503</id>
		<title>Digiflower</title>
		<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=Digiflower&amp;diff=6503"/>
		<updated>2014-12-17T01:41:59Z</updated>

		<summary type="html">&lt;p&gt;Jkramarz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&amp;#039;ve recently laid hands on a few Digi-Flower capture cards and found no indication that anyone has ever taken the time to poke at these cards with a digital multi-meter to discover how they are laid out.&lt;br /&gt;
&lt;br /&gt;
I have two versions, the DVR2000B-R02, and the DVR2510-MP2.&lt;br /&gt;
First ones were also sold as Huperlab DVR 2400 and probably Leadtek LTR-39608.&lt;br /&gt;
&lt;br /&gt;
[[Image:DVR2000B-th.jpg|Digi-Flower DVR-2000B-R02: 16 input; 4 Fusion BT878A chips]]&lt;br /&gt;
&lt;br /&gt;
The DVR2000B has four Fusion bt878A decoders and supports 16 composite inputs&lt;br /&gt;
&lt;br /&gt;
Each bt878A device controls a pair of M/D&amp;#039;ers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      GPIO[0,1,2] =&amp;gt; M/D[1][A,B,C] (select pins)&lt;br /&gt;
      GPIO[18]    =&amp;gt; M/D[1][Enable]&lt;br /&gt;
&lt;br /&gt;
      GPIO[0,1,2] =&amp;gt; M/D[2][A,B,C] (select pins)&lt;br /&gt;
      GPIO[20]    =&amp;gt; M/D[2][Enable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When an input has been routed the signal is split between the bt878A&amp;#039;s MUX0 and a 4581CS Sync Separator.  As far as I can tell the only output of the 4581CS that is used is the Odd/Even field output that is routed to GPIO[15] on the respective 878A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     74HC4051A&lt;br /&gt;
 Comp-In (1-8)  =&amp;gt; M/D[1] (X0-7) -&amp;gt; \   [ L/C/R ] (inductor/&lt;br /&gt;
                                     |= [network] capacitor/&lt;br /&gt;
 Comp-In (9-16) =&amp;gt; M/D[2] (X0-7) -&amp;gt; /             resistor)&lt;br /&gt;
&lt;br /&gt;
               4581CS Sync Separator&lt;br /&gt;
   L/C/R     /  Comp-In -&amp;gt; Odd/Even  =&amp;gt; GPIO[15]&lt;br /&gt;
 [network] =|&lt;br /&gt;
             \ 878A: MUX0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also a fifth pair of Mux/Demux chips that are used to send one of 16 inputs to an RCA jack via a 6db video amp.  This routing function is controlled by an Atmel AT89C2051 (8051 family) micro controller.  I have not determined how to talk to the micro controller at this time.  The I2C pins of the first bt878A is connected to the serial port of the micro controller.&lt;br /&gt;
&lt;br /&gt;
There is also a set of 8 external device I/O ports to send or receive On/Off signals from motion detectors or drive alarm circuits, and an on board WatchDog relay output.  These are controlled by GPIO[3-10,12-13] of the first 878A.&lt;br /&gt;
&lt;br /&gt;
Anko no longer lists these cards: http://www.anko-tech.com/&lt;br /&gt;
&lt;br /&gt;
lspci data for the DVR2000B ( these numbers seem very generic.. how can the specific card be known?)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
02:00.0 PCI bridge [0604]: Hint Corp HB6 Universal PCI-PCI bridge (non-transparent mode) [3388:0021] (rev 11)&lt;br /&gt;
03:0c.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0c.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
03:0d.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0d.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
03:0e.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0e.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
03:0f.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0f.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve been able to get the DVR2000B working with this patch on linux-2.6.32 kernel----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff -uNrp kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv-cards.c kernel-2.6.32.new/drivers/media/video/bt8xx/bttv-cards.c&lt;br /&gt;
--- kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv-cards.c	2010-03-31 18:11:38.506042269 -0600&lt;br /&gt;
+++ kernel-2.6.32.new/drivers/media/video/bt8xx/bttv-cards.c	2010-04-01 10:32:31.399044056 -0600&lt;br /&gt;
@@ -68,6 +68,8 @@ static void tibetCS16_init(struct bttv *&lt;br /&gt;
 static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
 static void kodicom4400r_init(struct bttv *btv);&lt;br /&gt;
 &lt;br /&gt;
+static void digiflower_dvr2000b_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
+&lt;br /&gt;
 static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
 static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
 &lt;br /&gt;
@@ -326,6 +328,7 @@ static struct CARD {&lt;br /&gt;
 	{ 0x763d800b, BTTV_BOARD_GEOVISION_GV800S_SL,	&amp;quot;GeoVision GV-800(S) (slave)&amp;quot; },&lt;br /&gt;
 	{ 0x763d800c, BTTV_BOARD_GEOVISION_GV800S_SL,	&amp;quot;GeoVision GV-800(S) (slave)&amp;quot; },&lt;br /&gt;
 	{ 0x763d800d, BTTV_BOARD_GEOVISION_GV800S_SL,	&amp;quot;GeoVision GV-800(S) (slave)&amp;quot; },&lt;br /&gt;
+	{ 0x00000000, BTTV_BOARD_DIGIFLOWER_DVR2000B,	&amp;quot;Digi-Flower DVR2000B&amp;quot; },&lt;br /&gt;
 &lt;br /&gt;
 	{ 0x15401830, BTTV_BOARD_PV183,         &amp;quot;Provideo PV183-1&amp;quot; },&lt;br /&gt;
 	{ 0x15401831, BTTV_BOARD_PV183,         &amp;quot;Provideo PV183-2&amp;quot; },&lt;br /&gt;
@@ -2912,6 +2915,25 @@ struct tvcard bttv_tvcards[] = {&lt;br /&gt;
 		.tuner_type     = TUNER_ABSENT,&lt;br /&gt;
 		.tuner_addr	= ADDR_UNSET,&lt;br /&gt;
 	},&lt;br /&gt;
+	[BTTV_BOARD_DIGIFLOWER_DVR2000B] = {&lt;br /&gt;
+		.name           = &amp;quot;Digi-Flower DVR2000B (master?)&amp;quot;,&lt;br /&gt;
+		.video_inputs   = 16,&lt;br /&gt;
+		/* .audio_inputs   = 0, */&lt;br /&gt;
+		/* .tuner          = UNSET, */&lt;br /&gt;
+		.svhs           = NO_SVHS,&lt;br /&gt;
+		.tuner_type	= TUNER_ABSENT,&lt;br /&gt;
+		.tuner_addr	= ADDR_UNSET,&lt;br /&gt;
+		/* .radio_addr	= ADDR_UNSET, */&lt;br /&gt;
+		.no_gpioirq	= 1,&lt;br /&gt;
+		.gpiomask2	= 0x140007,&lt;br /&gt;
+		.muxsel		= MUXSEL(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),&lt;br /&gt;
+		.muxsel_hook	= digiflower_dvr2000b_muxsel,&lt;br /&gt;
+		.gpiomux	= { 0, 0, 0, 0 }, /* card has no audio */&lt;br /&gt;
+		.no_msp34xx	= 1,&lt;br /&gt;
+		.no_tda9875	= 1,&lt;br /&gt;
+		.no_tda7432	= 1,&lt;br /&gt;
+		.pll            = PLL_28,&lt;br /&gt;
+	},&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);&lt;br /&gt;
@@ -4548,6 +4570,21 @@ static void kodicom4400r_init(struct btt&lt;br /&gt;
 	master[btv-&amp;gt;c.nr+2] = btv;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+/* DB1 = Top connector fan-out.  DB2 = Bottom connector fan-out. */&lt;br /&gt;
+#define DB1    0x100000 &lt;br /&gt;
+#define DB2    0x040000&lt;br /&gt;
+&lt;br /&gt;
+static void digiflower_dvr2000b_muxsel(struct bttv *btv, unsigned int input)&lt;br /&gt;
+{&lt;br /&gt;
+	static const int masks[] = {&lt;br /&gt;
+		DB1,   DB1|1, DB1|2, DB1|3,&lt;br /&gt;
+		DB1|4, DB1|5, DB1|6, DB1|7,&lt;br /&gt;
+		DB2,   DB2|1, DB2|2, DB2|3,&lt;br /&gt;
+		DB2|4, DB2|5, DB2|6, DB2|7,&lt;br /&gt;
+	};&lt;br /&gt;
+	gpio_write(masks[input%16]);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 /* The Grandtec X-Guard framegrabber card uses two Dual 4-channel&lt;br /&gt;
  * video multiplexers to provide up to 16 video inputs. These&lt;br /&gt;
  * multiplexers are controlled by the lower 8 GPIO pins of the&lt;br /&gt;
diff -uNrp kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv.h kernel-2.6.32.new/drivers/media/video/bt8xx/bttv.h&lt;br /&gt;
--- kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv.h	2010-03-31 23:22:03.987043302 -0600&lt;br /&gt;
+++ kernel-2.6.32.new/drivers/media/video/bt8xx/bttv.h	2010-03-31 23:21:45.412041507 -0600&lt;br /&gt;
@@ -185,6 +185,7 @@&lt;br /&gt;
 #define BTTV_BOARD_GEOVISION_GV800S	   0x9d&lt;br /&gt;
 #define BTTV_BOARD_GEOVISION_GV800S_SL	   0x9e&lt;br /&gt;
 #define BTTV_BOARD_PV183                   0x9f&lt;br /&gt;
+#define BTTV_BOARD_DIGIFLOWER_DVR2000B     0xa0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /* more card-specific defines */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DVR2510-th.jpg|Digi-Flower DVR-2510-MP2: 16 input; 2 Fusion BT878A chips]]&lt;br /&gt;
&lt;br /&gt;
The DVR2510 has two Fusion BT878A chips.  A total of 16 composite inputs that are supported.  Eight inputs are routed to each 878A chip, so only one M/D is needed for each 878A.&lt;br /&gt;
&lt;br /&gt;
The two additional M/D are used to route inputs to the composite out monitor connection.  This card differs most from its larger cousin in that the Enable pins of the M/D&amp;#039;s are connected to the Atmel micro-controller, so the card is not usable until the micro-controller has been initialized.  This won&amp;#039;t be possible until a logic analyzer can be brought to bear on the problem.&lt;/div&gt;</summary>
		<author><name>Jkramarz</name></author>
	</entry>
	<entry>
		<id>http://wiki.staging.zoneminder.com/index.php?title=Digiflower&amp;diff=6502</id>
		<title>Digiflower</title>
		<link rel="alternate" type="text/html" href="http://wiki.staging.zoneminder.com/index.php?title=Digiflower&amp;diff=6502"/>
		<updated>2014-12-17T01:40:45Z</updated>

		<summary type="html">&lt;p&gt;Jkramarz: Corrected muxsel values, as the proper range for them is &amp;lt;0,3&amp;gt;. Got all 16 channels working on Huperlab DVR 2400 card.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&amp;#039;ve recently laid hands on a few Digi-Flower capture cards and found no indication that anyone has ever taken the time to poke at these cards with a digital multi-meter to discover how they are laid out.&lt;br /&gt;
&lt;br /&gt;
I have two versions, the DVR2000B-R02, and the DVR2510-MP2.&lt;br /&gt;
&lt;br /&gt;
[[Image:DVR2000B-th.jpg|Digi-Flower DVR-2000B-R02: 16 input; 4 Fusion BT878A chips]]&lt;br /&gt;
&lt;br /&gt;
The DVR2000B has four Fusion bt878A decoders and supports 16 composite inputs&lt;br /&gt;
&lt;br /&gt;
Each bt878A device controls a pair of M/D&amp;#039;ers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      GPIO[0,1,2] =&amp;gt; M/D[1][A,B,C] (select pins)&lt;br /&gt;
      GPIO[18]    =&amp;gt; M/D[1][Enable]&lt;br /&gt;
&lt;br /&gt;
      GPIO[0,1,2] =&amp;gt; M/D[2][A,B,C] (select pins)&lt;br /&gt;
      GPIO[20]    =&amp;gt; M/D[2][Enable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When an input has been routed the signal is split between the bt878A&amp;#039;s MUX0 and a 4581CS Sync Separator.  As far as I can tell the only output of the 4581CS that is used is the Odd/Even field output that is routed to GPIO[15] on the respective 878A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     74HC4051A&lt;br /&gt;
 Comp-In (1-8)  =&amp;gt; M/D[1] (X0-7) -&amp;gt; \   [ L/C/R ] (inductor/&lt;br /&gt;
                                     |= [network] capacitor/&lt;br /&gt;
 Comp-In (9-16) =&amp;gt; M/D[2] (X0-7) -&amp;gt; /             resistor)&lt;br /&gt;
&lt;br /&gt;
               4581CS Sync Separator&lt;br /&gt;
   L/C/R     /  Comp-In -&amp;gt; Odd/Even  =&amp;gt; GPIO[15]&lt;br /&gt;
 [network] =|&lt;br /&gt;
             \ 878A: MUX0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also a fifth pair of Mux/Demux chips that are used to send one of 16 inputs to an RCA jack via a 6db video amp.  This routing function is controlled by an Atmel AT89C2051 (8051 family) micro controller.  I have not determined how to talk to the micro controller at this time.  The I2C pins of the first bt878A is connected to the serial port of the micro controller.&lt;br /&gt;
&lt;br /&gt;
There is also a set of 8 external device I/O ports to send or receive On/Off signals from motion detectors or drive alarm circuits, and an on board WatchDog relay output.  These are controlled by GPIO[3-10,12-13] of the first 878A.&lt;br /&gt;
&lt;br /&gt;
Anko no longer lists these cards: http://www.anko-tech.com/&lt;br /&gt;
&lt;br /&gt;
lspci data for the DVR2000B ( these numbers seem very generic.. how can the specific card be known?)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
02:00.0 PCI bridge [0604]: Hint Corp HB6 Universal PCI-PCI bridge (non-transparent mode) [3388:0021] (rev 11)&lt;br /&gt;
03:0c.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0c.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
03:0d.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0d.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
03:0e.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0e.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
03:0f.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)&lt;br /&gt;
03:0f.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve been able to get the DVR2000B working with this patch on linux-2.6.32 kernel----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff -uNrp kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv-cards.c kernel-2.6.32.new/drivers/media/video/bt8xx/bttv-cards.c&lt;br /&gt;
--- kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv-cards.c	2010-03-31 18:11:38.506042269 -0600&lt;br /&gt;
+++ kernel-2.6.32.new/drivers/media/video/bt8xx/bttv-cards.c	2010-04-01 10:32:31.399044056 -0600&lt;br /&gt;
@@ -68,6 +68,8 @@ static void tibetCS16_init(struct bttv *&lt;br /&gt;
 static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
 static void kodicom4400r_init(struct bttv *btv);&lt;br /&gt;
 &lt;br /&gt;
+static void digiflower_dvr2000b_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
+&lt;br /&gt;
 static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
 static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);&lt;br /&gt;
 &lt;br /&gt;
@@ -326,6 +328,7 @@ static struct CARD {&lt;br /&gt;
 	{ 0x763d800b, BTTV_BOARD_GEOVISION_GV800S_SL,	&amp;quot;GeoVision GV-800(S) (slave)&amp;quot; },&lt;br /&gt;
 	{ 0x763d800c, BTTV_BOARD_GEOVISION_GV800S_SL,	&amp;quot;GeoVision GV-800(S) (slave)&amp;quot; },&lt;br /&gt;
 	{ 0x763d800d, BTTV_BOARD_GEOVISION_GV800S_SL,	&amp;quot;GeoVision GV-800(S) (slave)&amp;quot; },&lt;br /&gt;
+	{ 0x00000000, BTTV_BOARD_DIGIFLOWER_DVR2000B,	&amp;quot;Digi-Flower DVR2000B&amp;quot; },&lt;br /&gt;
 &lt;br /&gt;
 	{ 0x15401830, BTTV_BOARD_PV183,         &amp;quot;Provideo PV183-1&amp;quot; },&lt;br /&gt;
 	{ 0x15401831, BTTV_BOARD_PV183,         &amp;quot;Provideo PV183-2&amp;quot; },&lt;br /&gt;
@@ -2912,6 +2915,25 @@ struct tvcard bttv_tvcards[] = {&lt;br /&gt;
 		.tuner_type     = TUNER_ABSENT,&lt;br /&gt;
 		.tuner_addr	= ADDR_UNSET,&lt;br /&gt;
 	},&lt;br /&gt;
+	[BTTV_BOARD_DIGIFLOWER_DVR2000B] = {&lt;br /&gt;
+		.name           = &amp;quot;Digi-Flower DVR2000B (master?)&amp;quot;,&lt;br /&gt;
+		.video_inputs   = 16,&lt;br /&gt;
+		/* .audio_inputs   = 0, */&lt;br /&gt;
+		/* .tuner          = UNSET, */&lt;br /&gt;
+		.svhs           = NO_SVHS,&lt;br /&gt;
+		.tuner_type	= TUNER_ABSENT,&lt;br /&gt;
+		.tuner_addr	= ADDR_UNSET,&lt;br /&gt;
+		/* .radio_addr	= ADDR_UNSET, */&lt;br /&gt;
+		.no_gpioirq	= 1,&lt;br /&gt;
+		.gpiomask2	= 0x140007,&lt;br /&gt;
+		.muxsel		= MUXSEL(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),&lt;br /&gt;
+		.muxsel_hook	= digiflower_dvr2000b_muxsel,&lt;br /&gt;
+		.gpiomux	= { 0, 0, 0, 0 }, /* card has no audio */&lt;br /&gt;
+		.no_msp34xx	= 1,&lt;br /&gt;
+		.no_tda9875	= 1,&lt;br /&gt;
+		.no_tda7432	= 1,&lt;br /&gt;
+		.pll            = PLL_28,&lt;br /&gt;
+	},&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);&lt;br /&gt;
@@ -4548,6 +4570,21 @@ static void kodicom4400r_init(struct btt&lt;br /&gt;
 	master[btv-&amp;gt;c.nr+2] = btv;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+/* DB1 = Top connector fan-out.  DB2 = Bottom connector fan-out. */&lt;br /&gt;
+#define DB1    0x100000 &lt;br /&gt;
+#define DB2    0x040000&lt;br /&gt;
+&lt;br /&gt;
+static void digiflower_dvr2000b_muxsel(struct bttv *btv, unsigned int input)&lt;br /&gt;
+{&lt;br /&gt;
+	static const int masks[] = {&lt;br /&gt;
+		DB1,   DB1|1, DB1|2, DB1|3,&lt;br /&gt;
+		DB1|4, DB1|5, DB1|6, DB1|7,&lt;br /&gt;
+		DB2,   DB2|1, DB2|2, DB2|3,&lt;br /&gt;
+		DB2|4, DB2|5, DB2|6, DB2|7,&lt;br /&gt;
+	};&lt;br /&gt;
+	gpio_write(masks[input%16]);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 /* The Grandtec X-Guard framegrabber card uses two Dual 4-channel&lt;br /&gt;
  * video multiplexers to provide up to 16 video inputs. These&lt;br /&gt;
  * multiplexers are controlled by the lower 8 GPIO pins of the&lt;br /&gt;
diff -uNrp kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv.h kernel-2.6.32.new/drivers/media/video/bt8xx/bttv.h&lt;br /&gt;
--- kernel-2.6.32.orig/drivers/media/video/bt8xx/bttv.h	2010-03-31 23:22:03.987043302 -0600&lt;br /&gt;
+++ kernel-2.6.32.new/drivers/media/video/bt8xx/bttv.h	2010-03-31 23:21:45.412041507 -0600&lt;br /&gt;
@@ -185,6 +185,7 @@&lt;br /&gt;
 #define BTTV_BOARD_GEOVISION_GV800S	   0x9d&lt;br /&gt;
 #define BTTV_BOARD_GEOVISION_GV800S_SL	   0x9e&lt;br /&gt;
 #define BTTV_BOARD_PV183                   0x9f&lt;br /&gt;
+#define BTTV_BOARD_DIGIFLOWER_DVR2000B     0xa0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /* more card-specific defines */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DVR2510-th.jpg|Digi-Flower DVR-2510-MP2: 16 input; 2 Fusion BT878A chips]]&lt;br /&gt;
&lt;br /&gt;
The DVR2510 has two Fusion BT878A chips.  A total of 16 composite inputs that are supported.  Eight inputs are routed to each 878A chip, so only one M/D is needed for each 878A.&lt;br /&gt;
&lt;br /&gt;
The two additional M/D are used to route inputs to the composite out monitor connection.  This card differs most from its larger cousin in that the Enable pins of the M/D&amp;#039;s are connected to the Atmel micro-controller, so the card is not usable until the micro-controller has been initialized.  This won&amp;#039;t be possible until a logic analyzer can be brought to bear on the problem.&lt;/div&gt;</summary>
		<author><name>Jkramarz</name></author>
	</entry>
</feed>