Difference between revisions of "AVerMedia AVerTV Hybrid+FM PCI (A16D)"

From LinuxTVWiki
Jump to: navigation, search
(building and installing)
(Identification)
 
(39 intermediate revisions by 9 users not shown)
Line 1: Line 1:
[http://linuxtv.org/v4lwiki/index.php/Avermedia Avermedia]
+
[[Image:AVerMedia_A16D_Front.jpg|thumb|AVerMedia A16D Front]]
 +
A [[DVB-T]] [[DVB-T PCI Cards|PCI card]] produced by [[AVerMedia]].
  
== AVerMedia AverTV Hybrid+FM PCI A16D ==
+
This card is supported under Linux, having since been added to kernel 2.6.26.
  
==== Info ====
+
{{Note|There are actually two different [[AVerMedia]] cards that bear the identical name "AVerTV Hybrid+FM PCI", so one must be careful to distinguish between this one, the [[AVerMedia AVerTV Hybrid+FM PCI (A16D)|A16D]], and the other, the [[AVerMedia AVerTV Hybrid+FM PCI (A16AR)|A16AR]].}}
  
  
 +
{{Note|The kernel 2.6.26 only supports analogue mode. Please use the kernel 2.6.27 for DVB-T suport.}}
  
Avermedia offers two "Hybrid+FM PCI" cards that,
 
unlike their names, feature different tuner chipset;
 
* model [http://www.avermedia.com/cgi-bin/products_digitvtuner_hybridPCI.asp?show=1 A16AR] has a good support in v4l and some bynary driver from [http://www.avermedia.com/cgi-bin/support_driverbympdpro.asp?category=TV%20Card&category2=Hybrid&proname=173&modelno=A16AR Driver download page]
 
* model [http://www.avermedia.com/cgi-bin/products_digitvtuner_hybridPCI(A16D).asp?show=1 A16D] has no support in v4l and no binary or source linux driver from the [http://www.avermedia.com/cgi-bin/support_driverbympdpro.asp?category=TV%20Card&category2=Hybrid&proname=173&modelno=A16D Driver download page].
 
  
[[Image:A16Dboard.jpg]]
+
==Overview/Features==
  
Looking on the card we can find:
 
  
* Philips SAA7135HL PCI Audio/Video Broadcast Decoder
+
===Components Used===
* Xceive XC3018 Silicon Tuner [[Image:xc3018.jpg]]
+
The A16D model consists of the following hardware components:
* Zarlink MT352 Digital Terrestrial TV Demodulator
+
* Xceive XC3028 (tuner & analog demodulator)
 +
* Philips SAA7135HL (A/V decoder)
 +
* Zarlink MT352 (DVB-T demodulator)
  
Googlin' around it seem to me that Xceive XC3018 and 3028 are more than similar.
+
===Identification===
   
+
If you have an A16D correctly detected then "<tt>sudo lspci -vvnn</tt>" should be similar to:
Also it seem that the card is quite similar to the
+
(Example from Ubuntu 8.04 using 2.6.24-19-generic x86_64)
Cardbus version (E506R).
+
  03:07.0 Multimedia controller [0480]: Philips Semiconductors SAA7133/SAA7135 Video Broadcast Decoder [1131:7133] (rev d1)
 +
Subsystem: Avermedia Technologies Inc Unknown device [1461:f936]
 +
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
 +
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
 +
Latency: 32
 +
Interrupt: pin A routed to IRQ 21
 +
Region 0: Memory at fdcfe000 (32-bit, non-prefetchable) [size=2K]
 +
Capabilities: [40] Power Management version 2
 +
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
 +
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
  
Analogue TV seems to work already, but without audio.
+
* Note: the above output from lspci shows the card NOT being properly/automagically detected/recognized! ... it would be nice if someone could provide the output from lspci where it shows the card being properly detected
  
Remote can be enabled as well: see [http://linuxtv.org/v4lwiki/index.php/Remote_controllers remote controller] section in this wiki.
+
<pre>(From Gentoo, kernel 2.6.30-gentoo-r5 x86_64)
 +
04:05.0 Multimedia controller [0480]: Philips Semiconductors SAA7131/SAA7133/SAA7135 Video Broadcast Decoder [1131:7133] (rev d1)
 +
Subsystem: Avermedia Technologies Inc Hybrid+FM PCI (rev A16D) [1461:f936]
 +
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
 +
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
 +
Latency: 64
 +
Interrupt: pin A routed to IRQ 20
 +
Region 0: Memory at fddff000 (32-bit, non-prefetchable) [size=2K]
 +
Capabilities: [40] Power Management version 2
 +
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
 +
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
 +
</pre>
  
==== Installation ====
+
==Making it work==
  
As for the (E506R) there's some experimental code in
+
===Firmware===
  
http://linuxtv.org/hg/~mrechberger/v4l-dvb-kernel
+
===Drivers===
  
    $ hg clone http://linuxtv.org/hg/~mrechberger/v4l-dvb-kernel
+
===Sample kernel output===
    $ cd v4l-dvb-kernel/v4l
+
If you have an A16D correctly detected then the related dmesg output should be similar to:  
 +
(Example from Ubuntu 8.04 using 2.6.24-19-generic x86_64)
 +
[  63.704203] Linux video capture interface: v2.00
 +
[  63.752924] ACPI: WMI-Acer: Mapper loaded
 +
[  64.099345] saa7130/34: v4l2 driver version 0.2.14 loaded
 +
[  64.099459] ACPI: PCI Interrupt 0000:03:07.0[A] -> GSI 21 (level, low) -> IRQ 21
 +
[  64.099467] saa7133[0]: found at 0000:03:07.0, rev: 209, irq: 21, latency: 32, mmio: 0xfdcfe000
 +
[  64.099475] saa7133[0]: subsystem: 1461:f936, board: AVerMedia Hybrid TV/Radio (A16D) [card=137,autodetected]
 +
[  64.099485] saa7133[0]: board init: gpio is 2a200
 +
[  64.121124] input: saa7134 IR (AVerMedia Hybrid TV as /devices/pci0000:00/0000:00:14.4/0000:03:07.0/input/input6
 +
[  64.201694] ACPI: PCI Interrupt 0000:00:14.2[A] -> GSI 16 (level, low) -> IRQ 16
 +
[  64.236208] hda_codec: Unknown model for ALC882, trying auto-probe from BIOS...
 +
[  64.312889] saa7133[0]: i2c eeprom 00: 61 14 36 f9 00 00 00 00 00 00 00 00 00 00 00 00
 +
[  64.312897] saa7133[0]: i2c eeprom 10: ff ff ff ff ff 20 ff ff ff ff ff ff ff ff ff ff
 +
[  64.312902] saa7133[0]: i2c eeprom 20: 01 40 01 02 02 01 01 00 08 ff 00 0e ff ff ff ff
 +
[  64.312907] saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312911] saa7133[0]: i2c eeprom 40: ff 65 00 ff c2 1e ff ff ff ff ff ff ff ff ff ff
 +
[  64.312915] saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312919] saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312923] saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312927] saa7133[0]: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312931] saa7133[0]: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312935] saa7133[0]: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312939] saa7133[0]: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312944] saa7133[0]: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312948] saa7133[0]: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312952] saa7133[0]: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.312956] saa7133[0]: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 +
[  64.344915] tuner' 1-0061: chip found @ 0xc2 (saa7133[0])
 +
[  64.387946] xc2028 1-0061: creating new instance
 +
[  64.387952] xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
 +
[  64.444501] xc2028 1-0061: Loading 80 firmware images from xc3028-v27.fw, type: xc2028 firmware, ver 2.7
 +
[  64.460800] xc2028 1-0061: Loading firmware for type=BASE F8MHZ (3), id 0000000000000000.
 +
[  72.998152] (0), id 00000000000000ff:
 +
[  72.998156] xc2028 1-0061: Loading firmware for type=(0), id 0000000100000007.
 +
[  73.166017] SCODE (20000000), id 0000000100000007:
 +
[  73.166019] xc2028 1-0061: Loading SCODE for type=MONO SCODE HAS_IF_5320 (60008000), id 0000000800000007.
 +
[  73.605999] saa7133[0]: registered device video0 [v4l2]
 +
[  73.606016] saa7133[0]: registered device vbi0
 +
[  73.606032] saa7133[0]: registered device radio0
 +
[  73.606187] ACPI: PCI Interrupt 0000:01:05.1[B] -> GSI 19 (level, low) -> IRQ 19
 +
[  73.606833] PCI: Setting latency timer of device 0000:01:05.1 to 64
 +
[  73.770676] xc2028 1-0061: attaching existing instance
 +
[  73.770682] xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
 +
[  73.770686] DVB: registering new adapter (saa7133[0])
 +
[  73.770689] DVB: registering frontend 0 (Zarlink MT352 DVB-T)...
  
==== Adding A16D driver ====
+
==External Links==
 
+
* [http://www.avermedia.com/avertv/product/ProductDetail.aspx?Id=25 AVerTV Hybrid+FM PCI (A16D) product page]
in linux/drivers/media/video/saa7134/saa7134-cards.c at the end of  "saa7134_board saa7134_boards[]" add:
+
* [http://mcentral.de/wiki/index.php5/AVerMedia_AverTV_Hybrid_FM_PCI_A16D mrec's 3rd party driver]
 
+
* [http://www.hardwareportal.ru/Multimedia/Aver.hybridfmpci/index.html Russian Review]
  [SAA7134_BOARD_AVERMEDIA_A16D] = {
+
[[Category:DVB-T PCI Cards]]
                .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 linux/drivers/media/video/saa7134/saa7134-cards.c near the end of  "pci_device_id saa7134_pci_tbl[]" add:
+
 
+
      },{
+
                .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 linux/drivers/media/video/saa7134/saa7134-cards.c in "saa7134_board_init1(struct saa7134_dev *dev)" add:
+
 
+
  case SAA7134_BOARD_AVERMEDIA_A16D:
+
                /* power-up tuner chip */
+
                saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,  0x80600100,0x80600100);
+
                saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00623100,0x00623100);
+
                /* probably above values still need tuning*/
+
                msleep(1);
+
                /* enable remote */
+
                dev->has_remote = SAA7134_REMOTE_GPIO;
+
                break;
+
 
+
in linux/drivers/media/video/saa7134/saa7134-input.c in "saa7134_input_init1(struct saa7134_dev *dev)" add:
+
     
+
        case SAA7134_BOARD_AVERMEDIA_777:
+
        case SAA7134_BOARD_AVERMEDIA_A16D:
+
                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);
+
                break;
+
 
+
in linux/drivers/media/video/saa7134/saa7134.h add:
+
 
+
    #define SAA7134_BOARD_AVERMEDIA_A16D 105
+
 
+
P.S.: I know, this is not the right way to write patches, but, right now, it's my best ;-).
+
+
==== building and installing ====
+
 
+
    $ make
+
    $ make install
+
 
+
Unfortunately with Fedora core 6 modules are installed in /usr/src/2.6.xxxx/kernel/
+
while modprobe looks for updated modules in /usr/src/2.6.xxxx/updates/.
+
Maybe you need to give the correct path as an install options; by now I simply copied
+
patched modules over the old ones.
+
 
+
Install firmware for the XC3028 as reported for the [http://www.linuxtv.org/v4lwiki/index.php/Em2880#Installation em2880]
+
 
+
As stated in this [http://www.ubuntu-es.org/index.php?q=node/27239 thread] create /etc/modprobe.d/saa7134 containing:
+
 
+
    options saa7134 card=105 alsa=1 tuner=71
+
    install saa7134 /sbin/modprobe xc3028-tuner; /sbin/modprobe --ignore-install saa7134; /sbin/modprobe saa7134-dvb; /sbin/modprobe saa7134-alsa
+
 
+
==== loading modules ====
+
 
+
Unfortunately things don't work if you load saa7134 before xc3028-tuner, so:
+
 
+
    $ modprobe xc3028-tuner
+
    $ modprobe saa7134
+
 
+
Thanks to [[User:SunnyBUG|SunnyBUG]], the autor of the original
+
article "CARDBUS Hybrid TV FM (E506R)" from which most of this was taken.
+
 
+
--[[User:Lucarasp|Lucarasp]] 13:47, 23 February 2007 (CET)
+

Latest revision as of 08:48, 4 January 2010

AVerMedia A16D Front

A DVB-T PCI card produced by AVerMedia.

This card is supported under Linux, having since been added to kernel 2.6.26.

Note: There are actually two different AVerMedia cards that bear the identical name "AVerTV Hybrid+FM PCI", so one must be careful to distinguish between this one, the A16D, and the other, the A16AR.


Note: The kernel 2.6.26 only supports analogue mode. Please use the kernel 2.6.27 for DVB-T suport.


Overview/Features

Components Used

The A16D model consists of the following hardware components:

  • Xceive XC3028 (tuner & analog demodulator)
  • Philips SAA7135HL (A/V decoder)
  • Zarlink MT352 (DVB-T demodulator)

Identification

If you have an A16D correctly detected then "sudo lspci -vvnn" should be similar to:

(Example from Ubuntu 8.04 using 2.6.24-19-generic x86_64)
03:07.0 Multimedia controller [0480]: Philips Semiconductors SAA7133/SAA7135 Video Broadcast Decoder [1131:7133] (rev d1)
	Subsystem: Avermedia Technologies Inc Unknown device [1461:f936]
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
	Latency: 32
	Interrupt: pin A routed to IRQ 21
	Region 0: Memory at fdcfe000 (32-bit, non-prefetchable) [size=2K]
	Capabilities: [40] Power Management version 2
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 PME-Enable- DSel=0 DScale=0 PME- 
  • Note: the above output from lspci shows the card NOT being properly/automagically detected/recognized! ... it would be nice if someone could provide the output from lspci where it shows the card being properly detected
(From Gentoo, kernel 2.6.30-gentoo-r5 x86_64)
04:05.0 Multimedia controller [0480]: Philips Semiconductors SAA7131/SAA7133/SAA7135 Video Broadcast Decoder [1131:7133] (rev d1)
	Subsystem: Avermedia Technologies Inc Hybrid+FM PCI (rev A16D) [1461:f936]
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 64
	Interrupt: pin A routed to IRQ 20
	Region 0: Memory at fddff000 (32-bit, non-prefetchable) [size=2K]
	Capabilities: [40] Power Management version 2
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 PME-Enable- DSel=0 DScale=0 PME-

Making it work

Firmware

Drivers

Sample kernel output

If you have an A16D correctly detected then the related dmesg output should be similar to:

(Example from Ubuntu 8.04 using 2.6.24-19-generic x86_64)
[   63.704203] Linux video capture interface: v2.00
[   63.752924] ACPI: WMI-Acer: Mapper loaded
[   64.099345] saa7130/34: v4l2 driver version 0.2.14 loaded
[   64.099459] ACPI: PCI Interrupt 0000:03:07.0[A] -> GSI 21 (level, low) -> IRQ 21
[   64.099467] saa7133[0]: found at 0000:03:07.0, rev: 209, irq: 21, latency: 32, mmio: 0xfdcfe000
[   64.099475] saa7133[0]: subsystem: 1461:f936, board: AVerMedia Hybrid TV/Radio (A16D) [card=137,autodetected]
[   64.099485] saa7133[0]: board init: gpio is 2a200
[   64.121124] input: saa7134 IR (AVerMedia Hybrid TV as /devices/pci0000:00/0000:00:14.4/0000:03:07.0/input/input6
[   64.201694] ACPI: PCI Interrupt 0000:00:14.2[A] -> GSI 16 (level, low) -> IRQ 16
[   64.236208] hda_codec: Unknown model for ALC882, trying auto-probe from BIOS...
[   64.312889] saa7133[0]: i2c eeprom 00: 61 14 36 f9 00 00 00 00 00 00 00 00 00 00 00 00
[   64.312897] saa7133[0]: i2c eeprom 10: ff ff ff ff ff 20 ff ff ff ff ff ff ff ff ff ff
[   64.312902] saa7133[0]: i2c eeprom 20: 01 40 01 02 02 01 01 00 08 ff 00 0e ff ff ff ff
[   64.312907] saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312911] saa7133[0]: i2c eeprom 40: ff 65 00 ff c2 1e ff ff ff ff ff ff ff ff ff ff
[   64.312915] saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312919] saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312923] saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312927] saa7133[0]: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312931] saa7133[0]: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312935] saa7133[0]: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312939] saa7133[0]: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312944] saa7133[0]: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312948] saa7133[0]: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312952] saa7133[0]: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.312956] saa7133[0]: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   64.344915] tuner' 1-0061: chip found @ 0xc2 (saa7133[0])
[   64.387946] xc2028 1-0061: creating new instance
[   64.387952] xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
[   64.444501] xc2028 1-0061: Loading 80 firmware images from xc3028-v27.fw, type: xc2028 firmware, ver 2.7
[   64.460800] xc2028 1-0061: Loading firmware for type=BASE F8MHZ (3), id 0000000000000000.
[   72.998152] (0), id 00000000000000ff:
[   72.998156] xc2028 1-0061: Loading firmware for type=(0), id 0000000100000007.
[   73.166017] SCODE (20000000), id 0000000100000007:
[   73.166019] xc2028 1-0061: Loading SCODE for type=MONO SCODE HAS_IF_5320 (60008000), id 0000000800000007.
[   73.605999] saa7133[0]: registered device video0 [v4l2]
[   73.606016] saa7133[0]: registered device vbi0
[   73.606032] saa7133[0]: registered device radio0
[   73.606187] ACPI: PCI Interrupt 0000:01:05.1[B] -> GSI 19 (level, low) -> IRQ 19
[   73.606833] PCI: Setting latency timer of device 0000:01:05.1 to 64
[   73.770676] xc2028 1-0061: attaching existing instance
[   73.770682] xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
[   73.770686] DVB: registering new adapter (saa7133[0])
[   73.770689] DVB: registering frontend 0 (Zarlink MT352 DVB-T)...

External Links