leadtek dtv1800 h support

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

 



Hi,
a few months ago Miroslav Sustek created a patch for this card against Markus Rechberger's v4l repository. This patch is attached as dtv1800.patch. A patched and compiled set of drivers fails on ubuntu hardy heron 8.04 with lots of symbol errors. Hardy is running 2.6.24.19. I have attempted to backport this patch to the current v4l tree with limited success. The driver loads however fails to do anything useful. My patch is attached as dtv1800h-v4l.patch.

I *think* the issue is with loading firmware. The tuner-xc2028.c function check_firmware is passed a frontend without the firmware name - producing the error shown in the dmesg listing below. If I hack the function and hardcode the firmware file name, it attempts to load the firmware but fails when it tries to read back.

Now that I am totally out of my depth I am not sure what to try next. Any help will be gratefully received.

Cheers Paul

dmesg:

[   28.783219] Linux agpgart interface v0.102
[   28.888020] i2c-adapter i2c-0: nForce2 SMBus adapter at 0x600
[   28.888048] i2c-adapter i2c-1: nForce2 SMBus adapter at 0x700
[   29.925721] Linux video capture interface: v2.00
[   30.130841] input: PC Speaker as /devices/platform/pcspkr/input/input5
[   30.214305] cx88/2: cx2388x MPEG-TS Driver Manager version 0.0.6 loaded
[ 30.214405] cx88[0]: subsystem: 107d:6654, board: LeadTek Winfast DTV1800 Hybrid [card=65,autodetected]
[   30.214408] cx88[0]: TV tuner type 71, Radio tuner type 0
[   30.305188] cx88/0: cx2388x v4l2 driver version 0.0.6 loaded
[   31.206991] parport_pc 00:06: reported by Plug and Play ACPI
[ 31.207113] parport0: PC-style at 0x378 (0x778), irq 7, dma 3 [PCSPP,TRISTATE,COMPAT,EPP,ECP,DMA]
[   31.924986] cx88[0]: i2c register ok
[   31.964435] cx88[0]/2: cx2388x 8802 Driver Manager
[   31.964761] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 19
[ 31.964772] ACPI: PCI Interrupt 0000:04:09.2[A] -> Link [LNKB] -> GSI 19 (level, low) -> IRQ 20 [ 31.964781] cx88[0]/2: found at 0000:04:09.2, rev: 5, irq: 20, latency: 64, mmio: 0xf9000000 [ 31.964830] ACPI: PCI Interrupt 0000:04:09.0[A] -> Link [LNKB] -> GSI 19 (level, low) -> IRQ 20 [ 31.964838] cx88[0]/0: found at 0000:04:09.0, rev: 5, irq: 20, latency: 64, mmio: 0xf7000000
[   32.223609] cx88/2: cx2388x dvb driver version 0.0.6 loaded
[   32.223614] cx88/2: registering cx8802 driver, type: dvb access: shared
[ 32.223618] cx88[0]/2: subsystem: 107d:6654, board: LeadTek Winfast DTV1800 Hybrid [card=65]
[   32.223621] cx88[0]/2-dvb: cx8802_dvb_probe
[ 32.223623] cx88[0]/2-dvb: ->being probed by Card=65 Name=cx88[0], PCI 04:09
[   32.223625] cx88[0]/2: cx2388x based DVB/ATSC card
[   32.364033] xc2028: Xcv2028/3028 init called!
[   32.364038] xc2028 2-0061: type set to XCeive xc2028/xc3028 tuner
[   32.366880] tuner' 2-0061: chip found @ 0xc2 (cx88[0])
[   32.366901] cx88[0]: tuner' i2c attach [addr=0x61,client=(tuner unset)]
[   32.366904] xc2028: Xcv2028/3028 init called!
[   32.366907] xc2028 2-0061: type set to XCeive xc2028/xc3028 tuner
[   32.366910] xc2028 2-0061: xc2028_set_analog_freq called
[   32.366912] xc2028 2-0061: generic_set_freq called
[   32.366914] xc2028 2-0061: should set frequency 400000 kHz
[   32.366918] xc2028 2-0061: check_firmware called
[   32.366920] xc2028 2-0061: xc2028/3028 firmware name not set!
[   32.373091] xc2028 2-0061: xc2028_sleep called
[   32.377853] cx88[0]/0: registered device video0 [v4l2]
[   32.377871] cx88[0]/0: registered device vbi0
[   32.377885] cx88[0]/0: registered device radio0
[   32.378262] xc2028 2-0061: xc2028_set_analog_freq called
[   32.378265] xc2028 2-0061: generic_set_freq called
[   32.386753] DVB: registering new adapter (cx88[0])
[   32.386758] dvb_register_frontend
[   32.386761] DVB: registering frontend 0 (Zarlink ZL10353 DVB-T)...
[   32.387035] xc2028 2-0061: should set frequency 400000 kHz
[   32.387039] xc2028 2-0061: check_firmware called
[   32.387041] xc2028 2-0061: xc2028/3028 firmware name not set!
[   32.389074] ACPI: PCI Interrupt Link [LAZA] enabled at IRQ 23
[ 32.389080] ACPI: PCI Interrupt 0000:00:10.1[B] -> Link [LAZA] -> GSI 23 (level, low) -> IRQ 16
[   32.389101] PCI: Setting latency timer of device 0000:00:10.1 to 64
[   33.774579] lp0: using parport0 (interrupt-driven).
[   33.914661] NET: Registered protocol family 10
[   33.914892] lo: Disabled Privacy Extensions
[ 34.192244] Adding 1317288k swap on /dev/sda5. Priority:-1 extents:1 across:1317288k
[   34.850791] EXT3 FS on sda1, internal journal
[   37.379550] No dock devices found.
[ 37.807328] powernow-k8: Found 1 AMD Athlon(tm) 64 Processor 3200+ processors (1 cpu cores) (version 2.20.00)
[   37.807362] powernow-k8:    0 : fid 0xc (2000 MHz), vid 0x8
[   37.807364] powernow-k8:    1 : fid 0xa (1800 MHz), vid 0x8
[   37.807366] powernow-k8:    2 : fid 0x2 (1000 MHz), vid 0x12
[   40.505929] apm: BIOS version 1.2 Flags 0x03 (Driver version 1.16ac)
[   40.505935] apm: overridden by ACPI.
[   44.131140] eth0: no IPv6 routers present
[   45.324947] xc2028 2-0061: xc2028_sleep called
[   91.100371] Marking TSC unstable due to: cpufreq changes.
[   91.108149] Time: acpi_pm clocksource has been installed.
[   91.226100] dvb_frontend_open
[   91.226112] cx88[0]/2-dvb: cx8802_dvb_advise_acquire
[   91.226116] dvb_frontend_start
[   91.228838] dvb_frontend_ioctl
[   91.228849] dvb_frontend_thread
[   91.228853] DVB: initialising frontend 0 (Zarlink ZL10353 DVB-T)...
[   91.231486] dvb_frontend_release
[   91.231493] cx88[0]/2-dvb: cx8802_dvb_advise_release
[   91.231551] dvb_frontend_open
[   91.231554] cx88[0]/2-dvb: cx8802_dvb_advise_acquire
[   91.231558] dvb_frontend_start
[   91.231563] dvb_frontend_ioctl
[   91.231568] dvb_frontend_release
[   91.231572] cx88[0]/2-dvb: cx8802_dvb_advise_release
[   91.231631] dvb_frontend_open
[   91.231642] cx88[0]/2-dvb: cx8802_dvb_advise_acquire
[   91.231645] dvb_frontend_start
[   91.231649] dvb_frontend_ioctl
[   91.500033] Clocksource tsc unstable (delta = -199997434 ns)
[   92.328714] xc2028 2-0061: xc2028_set_analog_freq called
[   92.328725] xc2028 2-0061: generic_set_freq called
[   92.328729] xc2028 2-0061: should set frequency 87500 kHz
[   92.328737] xc2028 2-0061: check_firmware called
[   92.328741] xc2028 2-0061: xc2028/3028 firmware name not set!
[   92.343976] xc2028 2-0061: xc2028_sleep called

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

diff -r 55d60e988b89 linux/drivers/media/video/cx88/cx88-cards.c
--- a/linux/drivers/media/video/cx88/cx88-cards.c	Fri Oct 12 01:03:30 2007 +0200
+++ b/linux/drivers/media/video/cx88/cx88-cards.c	Sun Feb 24 22:07:35 2008 +0100
@@ -1549,6 +1549,36 @@ struct cx88_board cx88_boards[] = {
 			.gpio0  = 0x07fa,
 		}},
 	},
+	[CX88_BOARD_WINFAST_DTV1800H] = {
+		.name           = "LeadTek Winfast DTV1800 Hybrid",
+		.tuner_type     = TUNER_XCEIVE_XC3028,
+		.radio_type     = TUNER_XCEIVE_XC3028,
+		.tuner_addr     = 0x61,
+		.radio_addr     = 0x61,
+		.input          = {{
+			.type   = CX88_VMUX_TELEVISION,
+			.vmux   = 0,
+			.gpio0  = 0x0400,       //pin 2:mute = 0 (off)
+			.gpio1  = 0x6040,       //pin 13:audio = 0 (tuner), pin 14:FM = 1 (off?)
+			.gpio2  = 0x0000,
+		},{
+			.type   = CX88_VMUX_COMPOSITE1,
+			.vmux   = 1,
+			.gpio0  = 0x0400,       //pin 2:mute = 0 (off)
+			.gpio1  = 0x6060,       //pin 13:audio = 1 (line), pin 14:FM = 1 (off?)
+			.gpio2  = 0x0000,
+		},{
+			.type   = CX88_VMUX_SVIDEO,
+			.vmux   = 2,
+		}},
+		.radio = {
+			.type   = CX88_RADIO,
+			.gpio0  = 0x0400,       //pin 2:mute = 0 (off)
+			.gpio1  = 0x6000,       //pin 13:audio = 0? (tuner), pin 14:FM = 0? (on?)
+			.gpio2  = 0x0000,
+		},
+		.mpeg           = CX88_MPEG_DVB,
+	},
 };
 const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
 
@@ -1868,6 +1898,10 @@ struct cx88_subid cx88_subids[] = {
 		.subdevice = 0x6f18,
 		.card      = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL,
 	},{
+		.subvendor = 0x107d,
+		.subdevice = 0x6654,
+		.card      = CX88_BOARD_WINFAST_DTV1800H,
+	},{
 		.subvendor = 0x14f1,
 		.subdevice = 0x8852,
 		.card      = CX88_BOARD_GENIATECH_X8000_MT,
@@ -2087,6 +2121,14 @@ void cx88_card_setup_pre_i2c(struct cx88
 		cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
 		udelay(1000);
 		break;
+	case CX88_BOARD_WINFAST_DTV1800H:
+		cx_write(MO_GP1_IO, 0x101010);  //gpio 12 = 1: powerup XC3028
+		mdelay(250);
+		cx_write(MO_GP1_IO, 0x101000);  //gpio 12 = 0: powerdown XC3028
+		mdelay(250);
+		cx_write(MO_GP1_IO, 0x101010);  //gpio 12 = 1: powerup XC3028
+		mdelay(250);
+		break;
 	}
 }
 
diff -r 55d60e988b89 linux/drivers/media/video/cx88/cx88-dvb.c
--- a/linux/drivers/media/video/cx88/cx88-dvb.c	Fri Oct 12 01:03:30 2007 +0200
+++ b/linux/drivers/media/video/cx88/cx88-dvb.c	Sun Feb 24 22:07:35 2008 +0100
@@ -314,6 +314,12 @@ static struct zl10353_config cx88_geniat
 	.r5c_clk_mpegts_output = 0x75,
 };
 
+static struct zl10353_config cx88_winfast_dtv1800h = {
+	.demod_address = (0x1e >> 1),
+	.no_tuner = 1,
+	.input_frequency = 0xe609,
+};
+
 static int nxt200x_set_ts_param(struct dvb_frontend* fe, int is_punctured)
 {
 	struct cx8802_dev *dev= fe->dvb->priv;
@@ -386,7 +392,9 @@ static struct xc3028_config geniatech_x8
 
 static int v4l_dvb_tuner_ioctl(struct v4l_dvb_tuner_ops *ops, int cmd, int arg)
 {
-	return ((struct cx88_core*)(ops->dev))->callback(ops->dev, cmd, arg);
+	struct cx88_core *core = ops->dev;
+
+	return core->callback(core->i2c_adap.algo_data, cmd, arg);
 }
 
 
@@ -421,6 +429,19 @@ static int dvb_register(struct cx8802_de
 			dvb_attach(dvb_pll_attach, &dev->dvb.frontend->ops.tuner_ops, 0x60,
 				   &dev->core->i2c_adap,
 				   &dvb_pll_thomson_dtt7579);
+		}
+		break;
+	case CX88_BOARD_WINFAST_DTV1800H:
+		dev->dvb.frontend = dvb_attach(zl10353_attach, &cx88_winfast_dtv1800h, &dev->core->i2c_adap);
+		if (dev->dvb.frontend != NULL) {
+			dev->dvb.frontend->ops.tuner_ops.fe = dev->dvb.frontend;
+
+			dev->dvb.frontend->ops.tuner_ops.ioctl = v4l_dvb_tuner_ioctl;
+			dev->dvb.frontend->ops.tuner_ops.dev = dev->core;
+			dev->dvb.frontend->ops.i2c_gate_ctrl = NULL;
+			dev->dvb.frontend->ops.sleep = NULL;
+
+			dvb_attach(xc3028_attach, &dev->dvb.frontend->ops.tuner_ops, &dev->core->i2c_adap, &dev->core->xc3028conf);
 		}
 		break;
 	case CX88_BOARD_WINFAST_DTV2000H:
diff -r 55d60e988b89 linux/drivers/media/video/cx88/cx88-i2c.c
--- a/linux/drivers/media/video/cx88/cx88-i2c.c	Fri Oct 12 01:03:30 2007 +0200
+++ b/linux/drivers/media/video/cx88/cx88-i2c.c	Sun Feb 24 22:07:35 2008 +0100
@@ -199,7 +199,7 @@ static int cx88_xc3028_control(void *pri
 	switch (command) {
 	case TUNER_RESET1:
 	case TUNER_RESET2:
-	case TUNER_RESET3:
+//	case TUNER_RESET3:
 		switch (mode) {
 		case V4L2_INT_TUNER_RADIO:
 			printk("Switching to radio!\n");
@@ -291,6 +291,7 @@ static int attach_inform(struct i2c_clie
 
 			case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
 			case CX88_BOARD_PINNACLE_HYBRID_PCTV:
+			case CX88_BOARD_WINFAST_DTV1800H:
 				/* tun_setup.tuner_mode = TODO */
 				tun_setup.tuner_mode     = &core->mode;
 				tun_setup.tuner_callback = core->callback = cx88_xc3028_control;
@@ -311,9 +312,10 @@ static int attach_inform(struct i2c_clie
 			case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
 			case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
 			case CX88_BOARD_PINNACLE_HYBRID_PCTV:
+			case CX88_BOARD_WINFAST_DTV1800H:
 				/* tun_setup.tuner_mode = TODO */
 				tun_setup.tuner_mode     = &core->mode;
-				tun_setup.tuner_callback = cx88_xc3028_control;
+				tun_setup.tuner_callback = core->callback = cx88_xc3028_control;
 				break;
 			}
 
diff -r 55d60e988b89 linux/drivers/media/video/cx88/cx88.h
--- a/linux/drivers/media/video/cx88/cx88.h	Fri Oct 12 01:03:30 2007 +0200
+++ b/linux/drivers/media/video/cx88/cx88.h	Sun Feb 24 22:07:35 2008 +0100
@@ -219,6 +219,7 @@ extern struct sram_channel cx88_sram_cha
 #define CX88_BOARD_POWERCOLOR_REAL_ANGEL   60
 #define CX88_BOARD_GENIATECH_X8000_MT	   61
 #define CX88_BOARD_PIXELVIEW_PLAYTV_MPEG   62
+#define CX88_BOARD_WINFAST_DTV1800H        63
 
 enum cx88_itype {
 	CX88_VMUX_COMPOSITE1 = 1,
--- cx88-cards.c.prepatch	2008-08-23 16:24:33.000000000 +1000
+++ cx88-cards.c	2008-08-24 20:23:51.000000000 +1000
@@ -1611,6 +1611,36 @@
 	       } },
 	       .mpeg           = CX88_MPEG_DVB,
        },
+       [CX88_BOARD_WINFAST_DTV1800H] = {
+               .name           = "LeadTek Winfast DTV1800 Hybrid",
+               .tuner_type     = TUNER_XC2028,
+//               .radio_type     = TUNER_XC2028,
+               .tuner_addr     = 0x61,
+//               .radio_addr     = 0x61,
+               .input          = {{
+                       .type   = CX88_VMUX_TELEVISION,
+                       .vmux   = 0,
+                       .gpio0  = 0x0400,       //pin 2:mute = 0 (off)
+                       .gpio1  = 0x6040,       //pin 13:audio = 0 (tuner), pin 14:FM = 1 (off?)
+                       .gpio2  = 0x0000,
+               },{
+                       .type   = CX88_VMUX_COMPOSITE1,
+                       .vmux   = 1,
+                       .gpio0  = 0x0400,       //pin 2:mute = 0 (off)
+                       .gpio1  = 0x6060,       //pin 13:audio = 1 (line), pin 14:FM = 1 (off?)
+                       .gpio2  = 0x0000,
+               },{
+                       .type   = CX88_VMUX_SVIDEO,
+                       .vmux   = 2,
+               }},
+               .radio = {
+                       .type   = CX88_RADIO,
+                       .gpio0  = 0x0400,       //pin 2:mute = 0 (off)
+                       .gpio1  = 0x6000,       //pin 13:audio = 0? (tuner), pin 14:FM = 0? (on?)
+                       .gpio2  = 0x0000,
+               },
+               .mpeg           = CX88_MPEG_DVB,
+       },
 };
 
 /* ------------------------------------------------------------------ */
@@ -1948,6 +1978,10 @@
 		.subvendor = 0x14f1,
 		.subdevice = 0x8852,
 		.card      = CX88_BOARD_GENIATECH_X8000_MT,
+        }, {
+                .subvendor = 0x107d,
+                .subdevice = 0x6654,
+                .card      = CX88_BOARD_WINFAST_DTV1800H,
 	}
 };
 
@@ -2188,6 +2222,7 @@
 	case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
 	case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
 	case CX88_BOARD_GENIATECH_X8000_MT:
+        case CX88_BOARD_WINFAST_DTV1800H:
 		return cx88_xc3028_geniatech_tuner_callback(priv, command, arg);
 	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
 		return cx88_dvico_xc2028_callback(priv, command, arg);
@@ -2310,6 +2345,14 @@
 		cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
 		udelay(1000);
 		break;
+        case CX88_BOARD_WINFAST_DTV1800H:
+                cx_write(MO_GP1_IO, 0x101010);  //gpio 12 = 1: powerup XC3028
+                mdelay(250);
+                cx_write(MO_GP1_IO, 0x101000);  //gpio 12 = 0: powerdown XC3028
+                mdelay(250);
+                cx_write(MO_GP1_IO, 0x101010);  //gpio 12 = 1: powerup XC3028
+                mdelay(250);
+                break;
 	}
 }
 
--- cx88-dvb.c.prepatch	2008-08-23 16:48:59.000000000 +1000
+++ cx88-dvb.c	2008-08-24 18:28:44.000000000 +1000
@@ -773,6 +773,14 @@
 				fe->ops.tuner_ops.set_config(fe, &ctl);
 		}
 		break;
+         case CX88_BOARD_WINFAST_DTV1800H:
+//               dev->ts_gen_cntrl = 0x00;
+               dev->dvb.frontend = dvb_attach(zl10353_attach,
+                                               &cx88_geniatech_x8000_mt,
+                                               &dev->core->i2c_adap);
+                attach_xc3028 = 1;
+                break;
+
 	 case CX88_BOARD_PINNACLE_HYBRID_PCTV:
 		dev->dvb.frontend = dvb_attach(zl10353_attach,
 					       &cx88_geniatech_x8000_mt,
--- cx88.h.prepatch	2008-08-23 16:49:16.000000000 +1000
+++ cx88.h	2008-08-24 18:28:22.000000000 +1000
@@ -220,6 +220,7 @@
 #define CX88_BOARD_POWERCOLOR_REAL_ANGEL   62
 #define CX88_BOARD_GENIATECH_X8000_MT      63
 #define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO 64
+#define CX88_BOARD_WINFAST_DTV1800H        65
 
 enum cx88_itype {
 	CX88_VMUX_COMPOSITE1 = 1,
_______________________________________________
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