Zitat
Original von UFO
Wenn es hier wirklich um ein Timing-Problem geht, dann kratzt der Patch nur an der Oberfläche des Problems. Der Demod muß sich auch mit reduzierter I2C-Geschwindigkeit programmieren lassen. (Werden evtl. Register in der falschen Reihenfolge beschrieben?)
Genaugenommen geht es um zwei Probleme:
Problem 1:
Irgendetwas stimmt nicht mit der Initialisierung vom Demodulator (falsche Reihenfolge, Timing zeitkritisch, ..). Das läßt sich nur mit Hilfe der Spec vom stv0297 klären.
Problem2:
Das Timeout- bzw. Busy-Handling in der I2C-Routine vom SAA7146 ist etwas 'schräg'. Das Timout nach dem beschreiben des Transferregisters ist immer 10ms lang, unabhängig von der programmierten Geschwindigkeit. Dabei wird das Statusregister am Anfang 20 mal alle 10us gepollt und danach alle 1ms (unabhängig von der Geschwindigkeit). Bei der normalen Geschwindigkeit dauert der Transfer ca. 100us und bei halbierter ca. 200us. Bei halbierter Geschwindigkeit wird bei ca. der Hälfte der Schreibzugriffe eine Wartepause von 1ms angehängt. Das kürzere Pollingintervall ist auch noch stärker last- und laufzeitabhängig. Das führt dazu, daß auf QAM256 Kanäle synchronisiert werden kann, wenn der PC unter 'Last' läuft. Vermutlich haben langsamere PCs auch weniger Probleme.
Zitat
Ich kann nicht einfach Voodoo-Code in den Treiber integrieren.
Das soll ja auch so nicht unbedingt in den Treiber rein. Bisher sind es zwei (mittlerweile drei) Fälle, wo das Sync/Lock Problem aufgetreten ist, und wo der Patch hilft.
Gruß
e9hack