From: Paul Chubb <paulc@singlespoon.org.au>
To: linux dvb <linux-dvb@linuxtv.org>
Subject: [linux-dvb] leadtek dtv1800 h support
Date: Mon, 25 Aug 2008 20:13:14 +1000 [thread overview]
Message-ID: <48B285BA.2090101@singlespoon.org.au> (raw)
[-- Attachment #1: Type: text/plain, Size: 6485 bytes --]
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.
[-- Attachment #2: dtv1800.patch --]
[-- Type: text/x-patch, Size: 5645 bytes --]
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,
[-- Attachment #3: dtv1800h-v4l.patch --]
[-- Type: text/x-patch, Size: 3921 bytes --]
--- 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,
[-- Attachment #4: Type: text/plain, Size: 150 bytes --]
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
next reply other threads:[~2008-08-25 10:14 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-25 10:13 Paul Chubb [this message]
2008-08-25 14:23 ` [linux-dvb] leadtek dtv1800 h support Steven Toth
2008-08-31 8:49 ` Paul Chubb
2008-08-31 22:07 ` Steven Toth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48B285BA.2090101@singlespoon.org.au \
--to=paulc@singlespoon.org.au \
--cc=linux-dvb@linuxtv.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.