Asus MyCinema-PS3-100 3-in-1 TV card (updated)

In the process of evaluating TV card options for my EPIA MII, I came across a TV card which, so far, seems to have been overseen by the entire Internet, safe for the shopping sites. The Asus MyCinema-PS3-100/PTS/FM/AV/RC is not a hybrid but actually a 3-in-1 card, integrating Analogue TV, DVB-T and DVB-S on one card. Since there is not much information available yet, let’s dissect it a little bit closer.

The card’s features summarized:

  • PCI card
  • DVB-S input (F-style connector), TV input (for both analog and DVB-T), FM input (for radio), connector for the remote control sensor, S-VHS A/V input (for digitizing analog video sources).
  • NXP (Philips) SAA7131E as central chip in control, NXP TDA10086HT as DVB-S tuner chip, NXP TDA10046A as analog/DVB-T tuner chip, ST LNBP21PD LNBP supply and control IC with step-up converter and I2C interface
    (does such things as power supply and 13/18V resp. 22KHz signaling to the LNB connector to the DVB-S connector).
  • The PCB reads at its upper left “TIGER 3in1”, so it seems that this is another variant of the oh-so-popular Tiger reference design (see drivers/media/video/saa7134/saa7134-cards.c in the Linux kernel source).
  • Also at its upper right there are two unsupplied 9-pin connectors, J6 and J7, close to a label “PANEL2”. I have no exact idea what the original purpose of these connectors was.
  • Comes bundled with Asus’ own driver and the Windows software “Cyberlink PowerCinema” (a Media Center software, ie. no dedicated TV viewing software).

Note that there is also a PS2-100/PS/FM/AV/RC model, which lacks the DVB-T tuner, and a PS3-110/NAQ/FM/AV/RC model, which is a PCI Express card for ATSC/QAM (digital) and NTSC (analog) TV plus Radio and thus obviously more targeted at the North American market.

Now as for the Linux support, here’s the lspci -v / lspci -vn output:

00:0c.0 Multimedia controller: Philips Semiconductors SAA7131/SAA7133/SAA7135 Video Broadcast Decoder (rev d1)
 Subsystem: ASUSTeK Computer Inc. Device 48cd
 Flags: bus master, medium devsel, latency 32, IRQ 16
 Memory at dffff000 (32-bit, non-prefetchable) [size=2K]
 Capabilities: [40] Power Management version 2
 Kernel driver in use: saa7134
 Kernel modules: saa7134

00:0c.0 0480: 1131:7133 (rev d1)
 Subsystem: 1043:48cd
 Flags: bus master, medium devsel, latency 32, IRQ 16
 Memory at dffff000 (32-bit, non-prefetchable) [size=2K]
 Capabilities: [40] Power Management version 2
 Kernel driver in use: saa7134
 Kernel modules: saa7134

As can be seen, the fact that the card uses the wide-spread SAA7134-compatible SAA7131 chip, means that the existing driver saa7134 tries to take care of it. However, it can’t out of the box, as the following /var/log/messages output on a openSUSE 11.1 system shows:

saa7130/34: v4l2 driver version 0.2.14 loaded
saa7134 0000:00:0c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
saa7133[0]: found at 0000:00:0c.0, rev: 209, irq: 16, latency: 32, mmio: 0xdffff000
saa7133[0]: subsystem: 1043:48cd, board: UNKNOWN/GENERIC [card=0,autodetected]
saa7133[0]: board init: gpio is 0
saa7133[0]: i2c eeprom 00: 43 10 cd 48 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
saa7133[0]: i2c eeprom 10: ff ff ff 0f ff 20 ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 20: 01 40 01 02 03 01 01 03 08 ff 00 2c ff ff ff ff
saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 40: ff 28 00 c2 96 16 03 02 c0 1c ff ff ff ff ff ff
saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: registered device video0 [v4l2]
saa7133[0]: registered device vbi0

As can be seen, the saa7134 driver does not know this board yet and detects neither the tuner chips nor the remote control. So the first step towards making this card working under Linux would be to hack saa7134-cards.c and add a section for this card. Alternatively, one could of course also have a look at the newest v4l-dvb version first :)

Update: In the meantime I’ve done more tests under Linux. Using the current v4l-d4b drivers from the Mercurial repository, the card is not auto-detected either, because the PCI ID is not known yet. However, loading the new saa7134 module with the parameter card=147 makes the card work, as can be seen from the following /var/log/messages excerpt:

Sep 11 12:34:10 test kernel: saa7130/34: v4l2 driver version 0.2.15 loaded
Sep 11 12:34:10 test kernel: saa7133[0]: found at 0000:00:0c.0, rev: 209, irq: 16, latency: 32, mmio: 0xdffff000
Sep 11 12:34:10 test kernel: saa7133[0]: subsystem: 1043:48cd, board: Asus Tiger 3in1 [card=147,insmod option]
Sep 11 12:34:10 test kernel: saa7133[0]: board init: gpio is 11006c
Sep 11 12:34:10 test kernel: input: saa7134 IR (Asus Tiger 3in1) as /devices/pci0000:00/0000:00:0c.0/input/input7
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 00: 43 10 cd 48 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 10: ff ff ff 0f ff 20 ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 20: 01 40 01 02 03 01 01 03 08 ff 00 2c ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 40: ff 28 00 c2 96 16 03 02 c0 1c ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: saa7133[0]: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:34:11 test kernel: tuner 0-004b: chip found @ 0x96 (saa7133[0])
Sep 11 12:34:11 test kernel: tda829x 0-004b: setting tuner address to 61
Sep 11 12:34:11 test kernel: tda829x 0-004b: type set to tda8290+75a
Sep 11 12:34:14 test kernel: saa7133[0]: registered device video0 [v4l2]
Sep 11 12:34:14 test kernel: saa7133[0]: registered device vbi0
Sep 11 12:34:14 test kernel: saa7133[0]: registered device radio0
Sep 11 12:34:14 test kernel: dvb_init() allocating 1 frontend
Sep 11 12:34:15 test kernel: DVB: registering new adapter (saa7133[0])
Sep 11 12:34:15 test kernel: DVB: registering adapter 0 frontend 0 (Philips TDA10046H DVB-T)...
Sep 11 12:34:15 test kernel: tda1004x: setting up plls for 48MHz sampling clock
Sep 11 12:34:17 test kernel: tda1004x: timeout waiting for DSP ready
Sep 11 12:34:17 test kernel: tda1004x: found firmware revision 0 -- invalid
Sep 11 12:34:17 test kernel: tda1004x: trying to boot from eeprom
Sep 11 12:34:19 test kernel: tda1004x: timeout waiting for DSP ready
Sep 11 12:34:19 test kernel: tda1004x: found firmware revision 0 -- invalid
Sep 11 12:34:19 test kernel: tda1004x: waiting for firmware upload...
Sep 11 12:34:19 test kernel: firmware: requesting dvb-fe-tda10046.fw
Sep 11 12:34:32 test kernel: tda1004x: found firmware revision 20 -- ok
Sep 11 12:34:32 test kernel: saa7134 ALSA driver for DMA sound loaded
Sep 11 12:34:32 test kernel: saa7133[0]/alsa: saa7133[0] at 0xdffff000 irq 16 registered as card -1

In this configuration, DVB-T actually works just fine (keep in mind that the tda10046 chip needs to have its firmware placed in /lib/firmware or whereever your distribution expects it). Both scan from the DVB Utilities and Kaffeine are able to find channels and the latter makes them even available on the KDE desktop in a fluid manner, in spite of the 1GHz CPU being clearly too slow for MPEG2 decoding in software.

As for the card’s DVB-S tuner, however, one must load the saa7134-dvb module with the parameter use_frontend=1. The syntax use_frontend=0,1, that is sometimes seen on the Internet, does not work. It thus seems like you can not switch between DVB-T and DVB-S on the fly.

Here is the syslog excerpt for loading with use_frontend=1:

Sep 11 12:40:01 test kernel: saa7130/34: v4l2 driver version 0.2.15 loaded
Sep 11 12:40:01 test kernel: saa7133[0]: found at 0000:00:0c.0, rev: 209, irq: 16, latency: 32, mmio: 0xdffff000
Sep 11 12:40:01 test kernel: saa7133[0]: subsystem: 1043:48cd, board: Asus Tiger 3in1 [card=147,insmod option]
Sep 11 12:40:01 test kernel: saa7133[0]: board init: gpio is 11006c
Sep 11 12:40:01 test kernel: input: saa7134 IR (Asus Tiger 3in1) as /devices/pci0000:00/0000:00:0c.0/input/input8
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 00: 43 10 cd 48 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 10: ff ff ff 0f ff 20 ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 20: 01 40 01 02 03 01 01 03 08 ff 00 2c ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 40: ff 28 00 c2 96 16 03 02 c0 1c ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: saa7133[0]: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Sep 11 12:40:01 test kernel: tuner 0-004b: chip found @ 0x96 (saa7133[0])
Sep 11 12:40:01 test kernel: tda829x 0-004b: setting tuner address to 61
Sep 11 12:40:01 test kernel: tda829x 0-004b: type set to tda8290+75a
Sep 11 12:40:05 test kernel: saa7133[0]: registered device video0 [v4l2]
Sep 11 12:40:05 test kernel: saa7133[0]: registered device vbi0
Sep 11 12:40:05 test kernel: saa7133[0]: registered device radio0
Sep 11 12:40:05 test kernel: dvb_init() allocating 1 frontend
Sep 11 12:40:05 test kernel: LNBx2x attached on addr=8
Sep 11 12:40:05 test kernel: DVB: registering new adapter (saa7133[0])
Sep 11 12:40:05 test kernel: DVB: registering adapter 0 frontend 0 (Philips TDA10086 DVB-S)...
Sep 11 12:40:05 test kernel: saa7134 ALSA driver for DMA sound loaded
Sep 11 12:40:05 test kernel: saa7133[0]/alsa: saa7133[0] at 0xdffff000 irq 16 registered as card -1

While this looks good, this is where success ends for now, however. Running scan now blocks in the first ioctl() on /dev/dvb/adapter0/frontend0 as strace reveals. Closer debugging reveals that the tda10086 module is blocked in the function tda10086_i2c_gate_ctrl(), so apparantly there is something going wrong in the I2C transfers. Also note that trying to rmmod saa7134-dvb after this blocking in tda10086_i2c_gate_ctrl() causes a kernel oops.

So as regards DVB-S, this card does not seem ready for prime time yet. It might probably take not much to get it to work, but I don’t have the time :(

There is however another reason against this card: the supplied remote does not work. I followed the instructions in the LinuxTV Wiki but it seems that this is what they call a “Combined GPIO remote”: on the GPIO pins it indicates only that a key was pressed, but not which key was pressed. Additional I2C code appears to be necessary to then pick up the keycode, and I don’t have the slightest idea how this should be implemented.

So to end the story, I’m gonna return the card for now, although its features would make it appear a viable option for Linux users — if the DVB-S tuner and the remote can be made working somehow.

4 comments

  1. Hi and thanks for this page. It confirms my personal investigations on this cute all-in-one card.

    I added a section in saa7134-cards.c by just copying the one devoted to 1043:4876 (P7131 Hybrid) and it should work but… I use Mandriva distro, and there is something that automatically prevent the driver from beeing recognized as the relevant one: when compiling the saa7134.mod.c doesn’t contain any 1043:48cd section anymore… I’ll bend it, for sure :-)

    When you say “the new driver” I guess you’re simply meaning the one which ships with actual distros ? Fedora 11 / Ubuntu 9.1 / Mandriva 2010 ? It’s the same anywhere :-)

    I won’t return this card, I’ll dig a little bit more… If you’re interrested into, I’ll forward you my discoveries.

    Regards.

  2. Thanks for your feedback :) I didn’t say “new driver”, I said “the current v4l-d4b drivers from the Mercurial repository” which referred to the revision as the time I wrote this blog post. See http://linuxtv.org/repo/ for information how to check out the latest development version, which, by definition, is always newer than the driver versions shipped in the distros themselves.

  3. Dear Both

    I’m also interested running this card under linux, so if you have any update, pls post in the comments.

    I could test, but cannot do any coding, unfortunately

  4. Hi!

    I’m interested in buying this card, mainly to be as DVB-T and FM receiver in Greece.
    I know that these are old posts, but this is the only site/blog I could find for this TV tuner under Linux. :(
    Did anyone had any luck with the remote control?
    Also, in Greece all the channels transmit in MPEG-4 format.
    Is this card capable of manipulating MPEG-4?

    Thanks in advance for any replies…

Leave a comment