J'écris cet article avec une Debian Sid, kernel 2.6.12.2.

Conexant remplace bttv

Hauppauge WinTV PCI-FM avec un Chip ConnexantPremière chose à savoir : la plupart des sites/forums qui parlent de la Hauppauge WinTV PCI-FM font référence à des révisions "anciennes" de la carte, qu'on ne trouve plus sur le marché du neuf. 90% des gens vont donc conseiller d'utiliser bttv, et, évidemment, ça ne fonctionnera pas. Pour en être certain il suffit de regarder ce qui est écrit sur le gros circuit intégré sur la carte.

La bonne nouvelle, c'est qu'il existe des drivers pour ces chips conexant, intégré dans la branche 2.6 du noyau. Le driver est le module cx8800, qui charge, entre autres choses, le module cx88xx.

J'ai activé ces options dans le noyau :

Device Drivers  --->
 Multimedia devices  --->
  <M> Video For Linux
  Video For Linux  --->
    <M> Conexant 2388x (bt878 successor) support

D'ailleurs pour la suite, une astuce qui peut être utile : pour éviter d'avoir à tout recompiler, utilisez les commandes make modules et make modules_install. Même si vous êtes comme moi, avec un noyau installé avec la méthode Debian, c'est bien pratique et niveau dpkg, ça casse rien, c'est pas pire que l'install du module nvidia en plus :)

L'image

Donc avec ce module, un modprobe cx8800 donne, dans /var/log/messages (ou avec la commande dmesg) :

Linux video capture interface: v1.00
cx2388x v4l2 driver version 0.0.4 loaded
ACPI: PCI Interrupt 0000:01:08.0[A] -> Link [LNK3] -> GSI 5 (level, low) -> IRQ 5
cx88[0]: subsystem: 0070:3401, board: Hauppauge WinTV 34xxx models [card=1,insmod option]
tveeprom: Hauppauge: model = 34519, rev = J160, serial# = 
tveeprom: tuner = LG S001D MK3 (idx = 60, type = 4)
tveeprom: tuner fmt = PAL(D/K) (eeprom = 0x74, v4l2 = 0x00400e17)
tveeprom: audio_processor = MSP3425 (type = 15)
cx88[0]: registered IR remote control
cx88[0]/0: found at 0000:01:08.0, rev: 5, irq: 5, latency: 32, mmio: 0xcc000000
cx88[0]/0: registered device video0 [v4l2]
cx88[0]/0: registered device vbi0
cx88[0]/0: registered device radio0

Pour passer des options au module, il faut le faire à cx88xx (chargé automatiquement par cx8800). J'ai mis dans /etc/modprobe.d/cx88xx :

option cx88xx card=1

La carte est bien reconnue, mais le problème c'est le tuner. En effet, il detecte bien un LG S001D MK (c'est le bon), mais lui associe le type 4, c'est à dire "NoTuner" (pour mémoire, la liste des tuners se trouve dans les sources du kernel, dans Documentation/video4linux/CARDLIST.tuner). En fait, ce tuner est connu mais n'a aucun driver implémenté...

Après plusieurs heure de recherche, j'ai fini par tomber sur ce thread sur la mailing list de video4linux. Il s'avère apparement que les specs de ce tuner sont assez proche du Philips PAL/SECAM multi (FM1216ME MK3) (tuner=38), et devrait donc pouvoir fonctionner en forçant :

option cx88xx card=1 tuner=38

Problème : lorsque le driver connait le tuner (c'est le cas ici) ne tiens pas compte du paramètre passé au module. Un patch est proposé sur le même thread dans ce mail pour forcer la correspondance "LG S001D MK = tuner 38". Moi j'ai fait autrement, j'ai preféré supprimer le bout de code indiquant d'ignorer le paramètre du module (parcequ'en fait j'avais déjà fait ce patch avant de trouver le thread, et ça me gonflait de devoir recompiler le module). Ainsi je peux tester avec différent tuner en passant l'option comme ci-dessus. Voici mon patch :

--- /usr/src/linux/drivers/media/video/cx88/cx88-cards.c.orig   2005-08-08 20:54:53.000000000 +0200
+++ /usr/src/linux/drivers/media/video/cx88/cx88-cards.c        2005-08-08 20:55:10.000000000 +0200
@@ -755,7 +755,9 @@
        struct tveeprom tv;

        tveeprom_hauppauge_analog(&tv, eeprom_data);
+#if 0
        core->tuner_type = tv.tuner_type;
+#endif
        core->has_radio  = tv.has_radio;
 }

En rechargeant cx8800 avec l'option tuner=38 pour cx88xx, j'ai reussi à obtenir une image (de qualité TRES médiocre d'ailleurs) sur tvtime, et scantv -C /dev/vbi0 me trouve les bonnes chaines.

Le son

J'utilise le module tda9887, qui fonctionne correctement pour la radio (voir ci-après). Mais pour la télé, pour l'instant, je n'ai pas reussi à obtenir mieux qu'un souffle ou un gresillement inaudible :-(

Un message pas encourageant du tout se trouve dans les sources du kernel, dans Documentation/video4linux/README.cx88 :

« audio
- The chip specs for the on-chip TV sound decoder are next
to useless :-/
- Neverless the builtin TV sound decoder starts working now,
at least for PAL-BG. Other TV norms need other code ...
FOR ANY REPORTS ON THIS PLEASE MENTION THE TV NORM YOU ARE
USING.
- Most tuner chips do provide mono sound, which may or may not
be useable depending on the board design. With the Hauppauge
cards it works, so there is mono sound available as fallback.
- audio data dma (i.e. recording without loopback cable to the
sound card) should be possible, but there is no code yet ... »

En gros, c'est la merde. Si quelqu'un sait comment faire pour avoir au moins le son mono, je suis preneur !

La radio

C'est le seul truc qui fonctionne plutôt bien, et qui est plutôt facile à installer (comparé au temps que j'ai passé pour la vidéo)

J'ai utilisé radio ou gradio (packages Debian du même nom), pour obtenir du son.

Le GROS problème est que, quand le cable antenne radio est branché, je perd 80% des stations TV, et les 20% que je peux encore capter sont impossible à regarder (déjà que l'image est pas top quand rien n'est branché, alors là...)

Conclusion

Je ne sais pas encore ce que j'ai vais bien pouvoir faire de cette carte : si je branche l'antenne radio, je n'ai plus d'image ; si je ne la branche pas, j'ai des images (moches), et pas de son... Tout ce que j'espère c'est que les drivers vont être developpés et que d'ici quelques mois elle devienne utilisable ! En tous cas je vous la déconseille fortement pour le moment.

Quelques liens trouvés ça et là :