Spite the Geniatech X8000-MT dvb card is added long time ago to the
kernel, it never worked. I have one of this cards branded as notOnlyTV
LV3H http://www.linuxtv.org/wiki/index.php/NotOnlyTV_LV3H and it seems
the gpios are wrong among other things. As I wrote in the linuxtv wiki
entry this card works passing the options to work as a Leadtek WinFast
DTV1800 Hybrid. Not fully tested but the important part (DVB) works
fine with minor issues like dmesg floods with the message "Calling
XC2028/3028 callback", but I don't know if this problem exists with
other cards.

This is the board
http://www.linuxtv.org/wiki/images/4/4a/X8000T-DVBT-PCI.jpg exactly
the same as mine, and other boards like X3M HPC2000, or Jactek JH-600.
I insist with the current code none of this boards work, all forums I
visited people reported the card doesn't work. I tested the patch
against 3.2.0-39 (my card is installed in a machine with Ubuntu
12.04.2 LTS), but I made the patch for what's currently in linux-tv
git.

Signed-off-by: Daniel Gonzalez <dgcbueu< at >gmail.com>
--- a/drivers/media/pci/cx88/cx88-cards.c
+++ b/drivers/media/pci/cx88/cx88-cards.c
@@ -1753,37 +1753,38 @@
        },
        [CX88_BOARD_GENIATECH_X8000_MT] = {
                /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */
+               /* Works like Leadtek WinFast DTV1800 Hybrid */
                .name           = "Geniatech X8000-MT DVBT",
                .tuner_type     = TUNER_XC2028,
                .tuner_addr     = 0x61,
                .input          = { {
                        .type   = CX88_VMUX_TELEVISION,
                        .vmux   = 0,
-                       .gpio0  = 0x00000000,
-                       .gpio1  = 0x00e3e341,
-                       .gpio2  = 0x00000000,
-                       .gpio3  = 0x00000000,
+                       .gpio0  = 0x0400,
+                       .gpio1  = 0x6040,
+                       .gpio2  = 0x0000,
+                       .gpio3  = 0x0000,
                }, {
                        .type   = CX88_VMUX_COMPOSITE1,
                        .vmux   = 1,
-                       .gpio0  = 0x00000000,
-                       .gpio1  = 0x00e3e361,
-                       .gpio2  = 0x00000000,
-                       .gpio3  = 0x00000000,
+                       .gpio0  = 0x0400,
+                       .gpio1  = 0x6060,
+                       .gpio2  = 0x0000,
+                       .gpio3  = 0x0000,
                }, {
                        .type   = CX88_VMUX_SVIDEO,
                        .vmux   = 2,
-                       .gpio0  = 0x00000000,
-                       .gpio1  = 0x00e3e361,
-                       .gpio2  = 0x00000000,
-                       .gpio3  = 0x00000000,
+                       .gpio0  = 0x0400,
+                       .gpio1  = 0x6060,
+                       .gpio2  = 0x0000,
+                       .gpio3  = 0x0000,
                } },
                .radio = {
                        .type   = CX88_RADIO,
-                       .gpio0  = 0x00000000,
-                       .gpio1  = 0x00e3e341,
-                       .gpio2  = 0x00000000,
-                       .gpio3  = 0x00000000,
+                       .gpio0  = 0x0400,
+                       .gpio1  = 0x6000,
+                       .gpio2  = 0x0000,
+                       .gpio3  = 0x0000,
                },
                .mpeg           = CX88_MPEG_DVB,
        },
@@ -3114,7 +3115,6 @@
        /* Board-specific callbacks */
        switch (core->boardnr) {
        case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
-       case CX88_BOARD_GENIATECH_X8000_MT:
        case CX88_BOARD_KWORLD_ATSC_120:
                return cx88_xc3028_geniatech_tuner_callback(core,
                                                        command, arg);
@@ -3124,6 +3124,7 @@
        case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
        case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
                return cx88_dvico_xc2028_callback(core, command, arg);
+       case CX88_BOARD_GENIATECH_X8000_MT:
        case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
        case CX88_BOARD_WINFAST_DTV1800H:
                return cx88_xc3028_winfast1800h_callback(core, command, arg);
@@ -3333,6 +3334,7 @@
                udelay(1000);
                break;

+       case CX88_BOARD_GENIATECH_X8000_MT:
        case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
        case CX88_BOARD_WINFAST_DTV1800H:
                cx88_xc3028_winfast1800h_callback(core, XC2028_TUNER_RESET, 0);
@@ -3380,11 +3382,12 @@
                ctl->demod = XC3028_FE_OREN538;
                break;
        case CX88_BOARD_GENIATECH_X8000_MT:
-               /* FIXME: For this board, the xc3028 never recovers after being
-                  powered down (the reset GPIO probably is not set properly).
-                  We don't have access to the hardware so we cannot determine
-                  which GPIO is used for xc3028, so just disable power xc3028
-                  power management for now */
+               ctl->demod = XC3028_FE_ZARLINK456;
+               if (core->i2c_algo.udelay < 16)
+                       core->i2c_algo.udelay = 16;
+               /* FIXME: this avoids the kernel message:
+                xc2028 2-0061: Error on line 1212: -6
+                (the reset GPIO probably is not set properly)*/
                ctl->disable_power_mgmt = 1;
                break;
        case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
--- a/drivers/media/pci/cx88/cx88-dvb.c
+++ b/drivers/media/pci/cx88/cx88-dvb.c
@@ -544,7 +544,8 @@
 static const struct zl10353_config cx88_geniatech_x8000_mt = {
        .demod_address = (0x1e >> 1),
        .no_tuner = 1,
-       .disable_i2c_gate_ctrl = 1,
+       //.disable_i2c_gate_ctrl = 1,
+       .if2           = 45600,
 };

 static const struct s5h1411_config dvico_fusionhdtv7_config = {
@@ -1365,13 +1366,15 @@
                }
                break;
        case CX88_BOARD_GENIATECH_X8000_MT:
-               dev->ts_gen_cntrl = 0x00;

                fe0->dvb.frontend = dvb_attach(zl10353_attach,
                                               &cx88_geniatech_x8000_mt,
                                               &core->i2c_adap);
-               if (attach_xc3028(0x61, dev) < 0)
-                       goto frontend_detach;
+               if (fe0->dvb.frontend) {
+                       fe0->dvb.frontend->ops.i2c_gate_ctrl = NULL;
+                       if (attach_xc3028(0x61, dev) < 0)
+                               goto frontend_detach;
+               }
                break;
         case CX88_BOARD_KWORLD_ATSC_120:
                fe0->dvb.frontend = dvb_attach(s5h1409_attach,
--- a/drivers/media/pci/cx88/cx88-input.c
+++ b/drivers/media/pci/cx88/cx88-input.c
@@ -98,6 +98,7 @@
                /* Take out the parity part */
                gpio=(gpio & 0x7fd) + (auxgpio & 0xef);
                break;
+       case CX88_BOARD_GENIATECH_X8000_MT:
        case CX88_BOARD_WINFAST_DTV1000:
        case CX88_BOARD_WINFAST_DTV1800H:
        case CX88_BOARD_WINFAST_DTV1800H_XC4000:
@@ -290,6 +291,7 @@
                ir_codes = RC_MAP_HAUPPAUGE;
                ir->sampling = 1;
                break;
+       case CX88_BOARD_GENIATECH_X8000_MT:
        case CX88_BOARD_WINFAST_DTV2000H:
        case CX88_BOARD_WINFAST_DTV2000H_J:
        case CX88_BOARD_WINFAST_DTV1800H:
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to