Hallo leutz,
muss mich entschuldigen, denn ich habe fälschlicherweise angenommen das man den angaben
des windows treibers glauben schenken kann. In der .inf der TERRATEC CINERGY HT PCI MKII
steht nämlich folgendes:
auszug:
[Tuner.AddReg]
; Tuner Type:
; 1A ⇒ XCeive 3028
; TunerModel:
; 0x8888 ⇒ XCeive 3028 + Zarlink MT352
nach stundenlanger rumprobiererei mustte ich feststellen das die geschichte mit dem MT352
ein richtig schöner griff ins braune ist. Also hab ich mir gedanken gemacht woran es liegt
das ich dieses sch. teil nicht attachen kann. Bin dann auf die idee gekommen mir irgendwo nen
I2c scanner zu besorgen, welchen ich dann auch irgendwann fand "i2c-Tools-3.0.1.tar.gz" den link habe
ich gerade nicht zur hand. Kurzum, hab das ding kompiliert und siehe da:
root@SKYNET# i2cdetect -a 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c/1.
I will probe address range 0x00-0x7f.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0f
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Das frontend liegt wie bei den meisten karten bei $0f
Also:
root@SKYNET# i2cdump 1 0x0f b
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c/1, address 0xf, mode byte
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
50: 0c 44 46 15 0f 00 00 00 00 00 48 00 75 0d 0d 0d ?DF??.....H.u???
60: 00 4d 0a 0f 0f 0f 0f c2 00 00 80 00 00 00 00 00 .M??????..?.....
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 ...............?
80: 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ????????????????
90: 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ????????????????
a0: 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ????????????????
b0: 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ????????????????
c0: 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 ????????????????
d0: 14 14 14 14 14 14 14 14 14 14 10 40 20 03 46 34 ???????????@ ?F4
e0: 47 1c 00 00 00 30 00 40 10 00 00 80 00 00 00 00 G?...0.@?..?....
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
da mir die ID des MT352 bekannt ist, $13 habe ich mich gefragt gefragt warum die
hier nirgends zu finden ist, das einzige was hier ins auge sticht ist die $14.
dann hab ich mir in /media/dvb/frontends die headers angeguckt und siehe da,
die kennung $14 passt auf den ZL10353, ok ich muss zugeben das die vorgehensweise
relativ dürftig ist! Da ich nur bröckchenweise c verstehe, weil ich früher nur
in MC68000 assembler geproggt habe, denke ich das das in ordnung ist!
Nun voran modifikationen einbauen!
cx88-cards.c:
....
[CX88_BOARD_TERRATEC_CINERGY_HT_PCI] = {
.name = "TerraTec Cinergy HT PCI (Conexant chipset)",
.tuner_type = TUNER_XC2028,
.radio_type = TUNER_XC2028,
.tuner_addr = 0x61,
.radio_addr = 0x61,
.input = {{
.type = CX88_VMUX_TELEVISION,
.vmux = 0,
.vmux = 0,
.gpio0 = 0x01000000,
.gpio1 = 0x00000000,
.gpio2 = 0x03000000,
},{
.type = CX88_VMUX_COMPOSITE1,
.vmux = 2,
.vmux = 0,
.gpio0 = 0x02000000,
.gpio1 = 0x01000000,
.gpio2 = 0x04000000,
},{
.type = CX88_VMUX_SVIDEO,
.vmux = 2,
.vmux = 0,
.gpio0 = 0x00000000,
.gpio1 = 0x02000000,
.gpio2 = 0x04000000,
}},
.mpeg = CX88_MPEG_DVB,
},
......
......
},{
.subvendor = 0x153b,
.subdevice = 0x1177,
.card = CX88_BOARD_TERRATEC_CINERGY_HT_PCI,
},
.....
cx88-dvb.c:
.....
static struct mt352_config terratec_cinergy_ht_pci_mk2 = {
.demod_address = 0x0f,
.no_tuner = 1,
};
.....
.....
case CX88_BOARD_TERRATEC_CINERGY_HT_PCI:
fe0->dvb.frontend = dvb_attach(zl10353_attach,
&terratec_cinergy_ht_pci_mk2,
&core->i2c_adap);
if (fe0->dvb.frontend != NULL) {
if (!dvb_attach(simple_tuner_attach, fe0->dvb.frontend,
&core->i2c_adap, 0x61,
TUNER_XC2028))
goto frontend_detach;
}
break;
.....
cx88.h:
.....
#define CX88_BOARD_TERRATEC_CINERGY_HT_PCI 76
.....
dmesg:
processor ACPI_CPU:00: registered as cooling_device0
processor ACPI_CPU:01: registered as cooling_device1
i2c-core: driver [dummy] registered
Linux video capture interface: v2.00
vt596_smbus 0000:00:11.0: VT596_smba = 0x400
i2c-adapter i2c-0: adapter [SMBus Via Pro adapter at 0400] registered
cx88/2: cx2388x MPEG-TS Driver Manager version 0.0.6 loaded
cx88[0]: subsystem: 153b:1177, board: TerraTec Cinergy HT PCI (Conexant chipset) [card=76,autodetected], frontend(s): 1
cx88[0]: TV tuner type 71, Radio tuner type 71
cx88/0: cx2388x v4l2 driver version 0.0.6 loaded
i2c-adapter i2c-1: adapter [cx88[0]] registered
cx2388x alsa driver version 0.0.6 loaded
i2c-core: driver [tuner'] registered
tuner' 1-0061: chip found @ 0xc2 (cx88[0])
i2c-adapter i2c-1: client [tuner'] registered with bus id 1-0061
i2c-adapter i2c-1: found ignore parameter for adapter 1, addr 0x6b
i2c-adapter i2c-1: found ignore parameter for adapter 1, addr 0x6f
i2c-core: driver [tuner] registered
i2c-adapter i2c-1: master_xfer[0] W, addr=0x50, len=1
i2c-adapter i2c-1: master_xfer[0] R, addr=0x50, len=256
xc2028 1-0061: creating new instance
xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
xc2028 1-0061: destroying instance
xc2028 1-0061: creating new instance
xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
cx88[0]: Asking xc2028/3028 to load firmware xc3028-v27.fw
cx88[0]/2: cx2388x 8802 Driver Manager
cx88-mpeg driver manager 0000:00:0b.2: PCI INT A -> GSI 19 (level, low) -> IRQ 19
cx88[0]/2: found at 0000:00:0b.2, rev: 5, irq: 19, latency: 32, mmio: 0xfd000000
cx8802_probe() allocating 1 frontend(s)
cx8800 0000:00:0b.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
cx88[0]/0: found at 0000:00:0b.0, rev: 5, irq: 19, latency: 32, mmio: 0xfb000000
cx88[0]/0: registered device video0 [v4l2]
cx88[0]/0: registered device vbi0
cx88/2: cx2388x dvb driver version 0.0.6 loaded
cx88/2: registering cx8802 driver, type: dvb access: shared
cx88[0]/2: subsystem: 153b:1177, board: TerraTec Cinergy HT PCI (Conexant chipset) [card=76]
cx88[0]/2: cx2388x based DVB/ATSC card
i2c-adapter i2c-1: firmware: requesting xc3028-v27.fw
i2c-adapter i2c-1: master_xfer[0] W, addr=0x0f, len=1
i2c-adapter i2c-1: master_xfer[1] R, addr=0x0f, len=1
i2c-adapter i2c-1: master_xfer[0] W, addr=0x0f, len=2
i2c-adapter i2c-1: master_xfer[0] R, addr=0x61, len=1
i2c-adapter i2c-1: master_xfer[0] W, addr=0x0f, len=2
tuner-simple 1-0061: creating new instance
xc2028 1-0061: Loading 80 firmware images from xc3028-v27.fw, type: xc2028 firmware, ver 2.7
cx88[0]: Calling XC2028/3028 callback
cx88[0]: setting GPIO to TV!
tuner-simple 1-0061: type set to 71 (Xceive xc2028/xc3028 tuner)
i2c-adapter i2c-1: master_xfer[0] W, addr=0x0f, len=2
i2c-adapter i2c-1: master_xfer[0] W, addr=0x0f, len=2
DVB: registering new adapter (cx88[0])
DVB: registering adapter 0 frontend 0 (Zarlink ZL10353 DVB-T)...
xc2028 1-0061: Loading firmware for type=BASE MTS (5), id 0000000000000000.
cx88[0]: Calling XC2028/3028 callback
cx88[0]: setting GPIO to TV!
xc2028 1-0061: Loading firmware for type=MTS (4), id 000000000000b700.
xc2028 1-0061: Loading SCODE for type=MTS LCD NOGD MONO IF SCODE HAS_IF_4500 (6002b004), id 000000000000b700.
xc2028 1-0061: Incorrect readback of firmware version.
cx88[0]: Calling XC2028/3028 callback
cx88[0]: setting GPIO to TV!
xc2028 1-0061: Loading firmware for type=BASE MTS (5), id 0000000000000000.
cx88[0]: Calling XC2028/3028 callback
cx88[0]: setting GPIO to TV!
xc2028 1-0061: Loading firmware for type=MTS (4), id 000000000000b700.
xc2028 1-0061: Loading SCODE for type=MTS LCD NOGD MONO IF SCODE HAS_IF_4500 (6002b004), id 000000000000b700.
xc2028 1-0061: Incorrect readback of firmware version.
i2c-adapter i2c-1: master_xfer[0] W, addr=0x61, len=2
i2c-adapter i2c-1: master_xfer[0] W, addr=0x61, len=4
cx88[0]: Calling XC2028/3028 callback
i2c-adapter i2c-1: master_xfer[0] W, addr=0x61, len=4
i2c-adapter i2c-1: master_xfer[0] W, addr=0x0f, len=2
cx88_audio 0000:00:0b.1: PCI INT A -> GSI 19 (level, low) -> IRQ 19
cx88[0]/1: CX88x/0: ALSA support for cx2388x boards
jetzt gibt es nur noch ein problem, die firmware die man mit dem tool aus /documentation/video4linux
basteln kann ist zu alt. das "CinergyHTPCI.rom" file das bei der karte dabei ist, ist die richtige
fw ver !!! 2.71 !!!!. Kann man so allerdings nicht verwenden, da die jungs von v4l ein anderes format
(header über jedes einzelne frame von 80) gebastelt haben und die daten sich unterscheiden.
Könnte man per hand machen, hab ich auch angefangen, da ich aber wie gesagt in C nicht die leuchte
bin, kann ich mit der berechnung der hunks usw. nichts anfangen.
Also wäre es echt toll wenn sich jemand fände der die fw bastelt!
Die devices werden erstellt, wenn ich allerdings mit der "alten" fw 2.7 (nach ausserkraftsetzung der fw versions
abfrage in tuner-xc2028.c) mit kaffeine einen scan starte hängt sich kaffeine weg, bei xine mit channels.conf
dasselbe. Es muss! also eine modifizierte version der "CinergyHTPCI.rom" her.
Naja dann wird man weiter sehen, aber ich bin wirklich guter dinge, hätte nicht gedacht das ich überhaupt
so weit komme! Nun ist es also an jemandem von euch, tätig zu werden.
gruß
k1ngf1sher