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

From LinuxTVWiki
Jump to: navigation, search
(Identification)
 
(43 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].
 
 
Looking on the card we can find:
 
  
* Philips SAA7135HL PCI Audio/Video Broadcast Decoder
+
==Overview/Features==
* Xceive XC3018 Silicon Tuner
+
* Zarlink MT352 Digital Terrestrial TV Demodulator
+
  
Googlin' around it seem to me that Xceive XC3018 and 3028 are more than similar.
 
 
Also it seem that the card is quite similar to the
 
Cardbus version (E506R).
 
  
Analogue TV seems to work already, but without audio.
+
===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)
  
Remote can be enabled as well: see [http://linuxtv.org/v4lwiki/index.php/Remote_controllers remote controller] section in this wiki.
+
===Identification===
 +
If you have an A16D correctly detected then "<tt>sudo lspci -vvnn</tt>" 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-
  
==== Installation ====
+
* 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
  
As for the (E506R) there's some experimental code in
+
<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>
  
http://linuxtv.org/hg/~mrechberger/v4l-dvb-kernel
+
==Making it work==
  
    $ hg clone http://linuxtv.org/hg/~mrechberger/v4l-dvb-kernel
+
===Firmware===
    $ cd v4l-dvb-kernel/v4l
+
  
==== Adding A16D driver ====
+
===Drivers===
  
in linux/drivers/media/video/saa7134/saa7134-cards.c at the end of  "saa7134_board saa7134_boards[]" add:
+
===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)...
  
  [SAA7134_BOARD_AVERMEDIA_A16D] = {
+
==External Links==
                .name          = "AVerMedia Hybrid TV/Radio (A16D)",
+
* [http://www.avermedia.com/avertv/product/ProductDetail.aspx?Id=25 AVerTV Hybrid+FM PCI (A16D) product page]
                .audio_clock    = 0x187de7,
+
* [http://mcentral.de/wiki/index.php5/AVerMedia_AverTV_Hybrid_FM_PCI_A16D mrec's 3rd party driver]
                .tuner_type    = TUNER_XCEIVE_XC3028,
+
* [http://www.hardwareportal.ru/Multimedia/Aver.hybridfmpci/index.html Russian Review]
                .radio_type    = UNSET,
+
[[Category:DVB-T PCI Cards]]
                .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 --ignore-install saa7134; /sbin/modprobe saa7134-dvb; /sbin/modprobe saa7134-alsa ;/sbin/modprobe xc3028-tuner
+
 
+
==== 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 07: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