AVerMedia AVerTV Hybrid+FM PCI (A16D)

From LinuxTVWiki
Revision as of 03:10, 20 February 2007 by Lucarasp (Talk)

Jump to: navigation, search


AVerMedia AverTV Hybrid+FM PCI A16D


Official Product Page

No precompiled or source linux driver from the Driver download page

Avermedia offers two "Hybrid+FM PCI" cards that, unlike their names feature different tuner chipset;

Looking on the card we can find:

  • Philips SAA7135HL PCI Audio/Video Broadcast Decoder
  • Xceive XC3018 Silicon Tuner
  • Zarlink MT352 Digital Terrestrial TV Demodulator

It seem that the card is quite similar to the Cardbus version (E506R).

Analogue TV seems to work already, but without audio.

Remote can be enabled as well, but I am not able to let it work together with the tuner at the moment.

Installation with TV tuning support:

As for the (E506R) there's some experimental code in


$ hg clone http://linuxtv.org/hg/~mrechberger/v4l-dvb-kernel
$ cd v4l-dvb-kernel/v4l
$ make
$ make install

Install firmware for the XC3028 as reported for the em2880

$ modprobe xc3028-tuner
$ modprobe saa7134 card=104 alsa=1 tuner=71

Installation with IR Remote support:

get code from the master developement repository


$ hg clone http://linuxtv.org/hg/v4l-dvb
$ cd v4l-dvb/v4l
$ make
$ make install
$ modprobe saa7134 card=85 alsa=1

(See the useful thread on (spanish) ubuntu forum.

Thanks to SunnyBUG, the autor of the original article "CARDBUS Hybrid TV FM (E506R)" from which most of this was taken.

Adding its own driver

I did many tests to get both TV and remote working, without success:

in saa7134-cards.c at the end of "saa7134_board saa7134_boards[]"

                .name           = "AVerMedia Hybrid TV/Radio (A16D)",
                .audio_clock    = 0x187de7,
                .tuner_type     = TUNER_XCEIVE_XC3028,
                .radio_type     = UNSET,
                .tuner_addr     = 0x61,
                .radio_addr     = ADDR_UNSET,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 1,
                        .amux = TV,
                        .tv   = 1,
                        .name = name_svideo, 
                        .vmux = 8,
                        .amux = LINE1,
                .radio = {     
                        .name = name_radio,
                        .amux = LINE1,

in saa7134-cards.c near the end of "pci_device_id saa7134_pci_tbl[]"

               .vendor       = PCI_VENDOR_ID_PHILIPS,
               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
               .subdevice    = 0xf936,
               .driver_data  = SAA7134_BOARD_AVERMEDIA_A16D,

in saa7134-cards.c in "saa7134_board_init1(struct saa7134_dev *dev)"

               /* enable remote */
               dev->has_remote = SAA7134_REMOTE_GPIO;
               /* power-up tuner chip conflict with remote */
               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0xffffffff, 0xffffffff);
               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff);
               /* probably above values need tuning*/

in saa7134-input.c in "saa7134_input_init1(struct saa7134_dev *dev)"

     case SAA7134_BOARD_AVERMEDIA_A16D:
       case SAA7134_BOARD_AVERMEDIA_777:
               ir_codes = ir_codes_avermedia;
               mask_keycode = 0x02F200;
               mask_keydown = 0x000400;
               polling = 50; // ms
               saa_setl(SAA7134_GPIO_GPMODE0 >> 2, 0x100);
               saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x100);

--Lucarasp 03:51, 20 February 2007 (CET)