Many years ago when the 2.6 kernel was all the rage I had a working
patch to support this card:
https://wiki.zoneminder.com/Digiflower
With the latest Fedora 26 kernel sources with the following patch
applied, the wired input and logical source are scrambled and I don't
know what changed.
Fanout Fanout
Input Camera Source Input Camera Source
1 ..... videoX(??) 9 ..... videoX(??)
2 ..... videoX(4) 10 ..... videoX(12)
3 porch videoX(3) 11 solar videoX(11)
4 ..... videoX(2) 12 ..... videoX(10)
5 ..... videoX(1) 13 ..... videoX(9)
6 ..... videoX(0) 14 ..... videoX(8)
7 ..... videoX(6) 15 south videoX(13)
8 north videoX(5) 16 ..... videoX(14)
Inputs 1 and 9 (Source 7 and 15) simply don't work at all, and they are
all out of order.
What am I not doing, or what changed?
Any help will be much appreciated!
--- media_build/linux/drivers/media/pci/bt8xx/bttv-cards.c 2016-12-24
19:07:32.963090964 -0600
+++ media_build.digiflower/linux/drivers/media/pci/bt8xx/bttv-cards.c
2016-12-24 16:58:34.689715697 -0600
@@ -90,6 +90,8 @@ static void identify_by_eeprom(struct bt
unsigned char eeprom_data[256]);
static int pvr_boot(struct bttv *btv);
+static void digiflower_dvr2000b_muxsel(struct bttv *btv, unsigned int
input);
+
/* config variables */
static unsigned int triton1;
static unsigned int vsfx;
@@ -344,6 +346,7 @@ static struct CARD {
{ 0x15401837, BTTV_BOARD_PV183, "Provideo PV183-8" },
{ 0x3116f200, BTTV_BOARD_TVT_TD3116, "Tongwei Video Technology
TD-3116" },
{ 0x02280279, BTTV_BOARD_APOSONIC_WDVR, "Aposonic W-DVR" },
+ { 0x00000000, BTTV_BOARD_DIGIFLOWER_DVR2000B, "Digi-Flower DVR2000B" },
{ 0, -1, NULL }
};
@@ -2885,6 +2888,25 @@ struct tvcard bttv_tvcards[] = {
.no_tda7432 = 1,
.pll = PLL_35,
},
+ [BTTV_BOARD_DIGIFLOWER_DVR2000B] = {
+ .name = "Digi-Flower DVR2000B (master?)",
+ .video_inputs = 16,
+ /* .audio_inputs = 0, */
+ /* .tuner = UNSET, */
+ .svhs = NO_SVHS,
+ .tuner_type = TUNER_ABSENT,
+ .tuner_addr = ADDR_UNSET,
+ /* .radio_addr = ADDR_UNSET, */
+ .no_gpioirq = 1,
+// .gpiomask = 0x0,
+ .gpiomask2 = 0x140007,
+ .muxsel = MUXSEL ( 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2 ),
+ .muxsel_hook = digiflower_dvr2000b_muxsel,
+ .gpiomux = { 0, 0, 0, 0 }, /* card has no audio */
+ .no_msp34xx = 1,
+ .no_tda7432 = 1,
+ .pll = PLL_28,
+ },
};
static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
@@ -4868,6 +4894,21 @@ static void gv800s_init(struct bttv *btv
master[btv->c.nr+3] = btv;
}
+/* DB1 = Top connector fan-out. DB2 = Bottom connector fan-out. */
+#define DB1 0x100000
+#define DB2 0x040000
+
+static void digiflower_dvr2000b_muxsel(struct bttv *btv, unsigned int
input)
+{
+ static const int masks[] = {
+ DB1, DB1|1, DB1|2, DB1|3,
+ DB1|4, DB1|5, DB1|6, DB1|7,
+ DB2, DB2|1, DB2|2, DB2|3,
+ DB2|4, DB2|5, DB2|6, DB2|7,
+ };
+ gpio_write(masks[input%16]);
+}
+
/*
----------------------------------------------------------------------- */
/* motherboard chipset specific
stuff */
--- media_build/linux/drivers/media/pci/bt8xx/bttv.h 2016-08-22
03:58:36.000000000 -0500
+++ media_build.digiflower/linux/drivers/media/pci/bt8xx/bttv.h
2016-12-24 16:59:38.365786180 -0600
@@ -190,6 +190,7 @@
#define BTTV_BOARD_CYBERVISION_CV06 0xa4
#define BTTV_BOARD_KWORLD_VSTREAM_XPERT 0xa5
#define BTTV_BOARD_PCI_8604PW 0xa6
+#define BTTV_BOARD_DIGIFLOWER_DVR2000B 0xa7
/* more card-specific defines */
#define PT2254_L_CHANNEL 0x10