[PATCH] Add initial support for DViCO FusionHDTV DVB-T Dual Express

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

 



Add initial support for DViCO FusionHDTV DVB-T Dual Express

From: Stephen Backway <stev391@xxxxxxxxx>

Add initial support (Note: Only one tuner is activated, due to issues with the
SRAM definitions. Once fixed this will be enabled).  The analog portion of the
card is not configured.  Original work to support this card was completed by
Chris Pascoe, however this was never merged into the main tree.  Minor changes
were required to ensure that the card worked correctly, namely the callback
function, kernel config and various debugging messages.

Signed-off-by: Stephen Backway <stev391@xxxxxxxxx>

diff -Naur v4l-dvb/linux/Documentation/video4linux/CARDLIST.cx23885 v4l-dvb_dev/linux/Documentation/video4linux/CARDLIST.cx23885
--- v4l-dvb/linux/Documentation/video4linux/CARDLIST.cx23885    2008-06-09 14:13:20.000000000 +1000
+++ v4l-dvb_dev/linux/Documentation/video4linux/CARDLIST.cx23885    2008-06-30 21:06:19.000000000 +1000
@@ -9,3 +9,4 @@
   8 -> Hauppauge WinTV-HVR1700                             [0070:8101]
   9 -> Hauppauge WinTV-HVR1400                             [0070:8010]
  10 -> DViCO FusionHDTV7 Dual Express                      [18ac:d618]
+ 11 -> DViCO FusionHDTV DVB-T Dual Express                 [18ac:db78]
diff -Naur v4l-dvb/linux/drivers/media/video/cx23885/cx23885-cards.c v4l-dvb_dev/linux/drivers/media/video/cx23885/cx23885-cards.c
--- v4l-dvb/linux/drivers/media/video/cx23885/cx23885-cards.c    2008-06-09 14:13:21.000000000 +1000
+++ v4l-dvb_dev/linux/drivers/media/video/cx23885/cx23885-cards.c    2008-06-30 21:08:18.000000000 +1000
@@ -151,6 +151,13 @@
 #endif
         .portc        = CX23885_MPEG_DVB,
     },
+    [CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP] = {
+        .name        = "DViCO FusionHDTV DVB-T Dual Express",
+#if 0
+        .portb        = CX23885_MPEG_DVB,
+#endif
+        .portc        = CX23885_MPEG_DVB,
+    },
 };
 const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
 
@@ -222,7 +229,11 @@
         .subvendor = 0x18ac,
         .subdevice = 0xd618,
         .card      = CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP,
-    },
+    }, {
+        .subvendor = 0x18ac,
+        .subdevice = 0xdb78,
+        .card      = CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP,
+     },
 };
 const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
 
@@ -439,6 +450,13 @@
         mdelay(20);
         cx_set(GP0_IO, 0x00050005);
         break;
+    case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
+        /* GPIO-0 portb xc3028 reset */
+        /* GPIO-1 portb zl10353 reset */
+        /* GPIO-2 portc xc3028 reset */
+        /* GPIO-3 portc zl10353 reset */
+        cx_write(GP0_IO, 0x002f1000);
+        break;
     }
 }
 
@@ -453,7 +471,10 @@
     case CX23885_BOARD_HAUPPAUGE_HVR1400:
         /* FIXME: Implement me */
         break;
-    }
+    case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
+        request_module("ir-kbd-i2c");
+        break;
+     }
 
     return 0;
 }
@@ -490,6 +511,7 @@
 
     switch (dev->board) {
     case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
+    case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
         ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
         ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
         ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
diff -Naur v4l-dvb/linux/drivers/media/video/cx23885/cx23885-dvb.c v4l-dvb_dev/linux/drivers/media/video/cx23885/cx23885-dvb.c
--- v4l-dvb/linux/drivers/media/video/cx23885/cx23885-dvb.c    2008-06-09 14:13:21.000000000 +1000
+++ v4l-dvb_dev/linux/drivers/media/video/cx23885/cx23885-dvb.c    2008-06-30 21:06:19.000000000 +1000
@@ -36,9 +36,11 @@
 #include "tda8290.h"
 #include "tda18271.h"
 #include "lgdt330x.h"
+#include "zl10353.h"
 #include "xc5000.h"
 #include "tda10048.h"
 #include "tuner-xc2028.h"
+#include "tuner-xc2028-types.h"
 #include "tuner-simple.h"
 #include "dib7000p.h"
 #include "dibx000_common.h"
@@ -155,6 +157,44 @@
     .serial_mpeg = 0x40,
 };
 
+static int cx23885_dvico_xc2028_callback(void *ptr, int command, int arg)
+{
+    struct cx23885_tsport *port = ptr;
+    struct cx23885_dev *dev = port->dev;
+    u32 reset_mask = 0;
+
+    switch (command) {
+    case XC2028_TUNER_RESET:
+        dprintk(1, "%s: XC2028_TUNER_RESET %d, port %d\n", __func__,
+            arg, port->nr);
+
+        if (port->nr == 0)
+            reset_mask = 0x0101;
+        else if (port->nr == 1)
+            reset_mask = 0x0404;
+
+        cx_clear(GP0_IO, reset_mask);
+        mdelay(5);
+        cx_set(GP0_IO, reset_mask);
+        break;
+    case XC2028_RESET_CLK:
+        dprintk(1, "%s: XC2028_RESET_CLK %d\n", __func__, arg);
+        break;
+    default:
+        dprintk(1, "%s: unknown command %d, arg %d\n", __func__,
+               command, arg);
+        return -EINVAL;
+    }
+
+    return 0;
+}
+
+static struct zl10353_config dvico_fusionhdtv_xc3028 = {
+    .demod_address = 0x0f,
+    .if2           = 45600,
+    .no_tuner      = 1,
+};
+
 static struct s5h1409_config hauppauge_hvr1500q_config = {
     .demod_address = 0x32 >> 1,
     .output_mode   = S5H1409_SERIAL_OUTPUT,
@@ -481,7 +521,39 @@
                 &i2c_bus->i2c_adap,
                 &dvico_xc5000_tunerconfig, i2c_bus);
         break;
-    default:
+    case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
+        i2c_bus = &dev->i2c_bus[port->nr - 1];
+
+        /* Take demod and tuner out of reset */
+        if (port->nr == 1)
+            cx_set(GP0_IO, 0x0303);
+        else if (port->nr == 2)
+            cx_set(GP0_IO, 0x0c0c);
+        mdelay(5);
+        port->dvb.frontend = dvb_attach(zl10353_attach,
+                           &dvico_fusionhdtv_xc3028,
+                           &i2c_bus->i2c_adap);
+        if (port->dvb.frontend != NULL) {
+            struct dvb_frontend      *fe;
+            struct xc2028_config      cfg = {
+                .i2c_adap  = &i2c_bus->i2c_adap,
+                .i2c_addr  = 0x61,
+                .video_dev = port,
+                .callback  = cx23885_dvico_xc2028_callback,
+            };
+            static struct xc2028_ctrl ctl = {
+                .fname       = "xc3028-v27.fw",
+                .max_len     = 64,
+                .demod       = XC3028_FE_ZARLINK456,
+            };
+
+            fe = dvb_attach(xc2028_attach, port->dvb.frontend,
+                    &cfg);
+            if (fe != NULL && fe->ops.tuner_ops.set_config != NULL)
+                fe->ops.tuner_ops.set_config(fe, &ctl);
+        }
+        break;
+     default:
         printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",
                dev->name);
         break;
diff -Naur v4l-dvb/linux/drivers/media/video/cx23885/cx23885.h v4l-dvb_dev/linux/drivers/media/video/cx23885/cx23885.h
--- v4l-dvb/linux/drivers/media/video/cx23885/cx23885.h    2008-06-09 14:13:21.000000000 +1000
+++ v4l-dvb_dev/linux/drivers/media/video/cx23885/cx23885.h    2008-06-30 21:06:19.000000000 +1000
@@ -67,6 +67,7 @@
 #define CX23885_BOARD_HAUPPAUGE_HVR1700        8
 #define CX23885_BOARD_HAUPPAUGE_HVR1400        9
 #define CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP 10
+#define CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP 11
 
 /* Currently unsupported by the driver: PAL/H, NTSC/Kr, SECAM B/G/H/LC */
 #define CX23885_NORMS (\
diff -Naur v4l-dvb/linux/drivers/media/video/cx23885/Kconfig v4l-dvb_dev/linux/drivers/media/video/cx23885/Kconfig
--- v4l-dvb/linux/drivers/media/video/cx23885/Kconfig    2008-05-15 19:47:08.000000000 +1000
+++ v4l-dvb_dev/linux/drivers/media/video/cx23885/Kconfig    2008-06-30 21:06:19.000000000 +1000
@@ -15,6 +15,7 @@
     select MEDIA_TUNER_MT2131 if !DVB_FE_CUSTOMISE
     select DVB_S5H1409 if !DVB_FE_CUSTOMISE
     select DVB_LGDT330X if !DVB_FE_CUSTOMISE
+     select DVB_ZL10353 if !DVB_FE_CUSTOMISE
     select MEDIA_TUNER_XC2028 if !DVB_FE_CUSTOMIZE
     select MEDIA_TUNER_TDA8290 if !DVB_FE_CUSTOMIZE
     select MEDIA_TUNER_TDA18271 if !DVB_FE_CUSTOMIZE


--
Be Yourself @ mail.com!
Choose From 200+ Email Addresses
Get a Free Account at www.mail.com!
_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux