Brooktree Bt878

From LinuxTVWiki
Revision as of 14:46, 30 August 2007 by CityK (talk | contribs) (reworking article (first phase))
Jump to navigation Jump to search

The Bt878 was an audio and video decoder for PCI applications from Brooktree that was used by many analog cards produced in the later part of the 1990's.

The Bt87x family were the direct successors of the popular Bt848 family of ICs. Specifically, the Bt87x chips are based on the Bt848A video decoder but are upgraded to also include several audio capture capabilities (summarized in the table below and discussed in further detail later on).

Bt87x decoder family comparison
Featured Bt878 Bt849A
All of Bt848A's features (i.e. Composite, S-Video multi-standard
Video Decoder and PCI bus master)
Yes Yes
Teletext support Yes Yes
TV Audio Yes
mono
Yes
stereo
Audio in Yes
mono
Yes
stereo ?
FM Radio - Yes
stereo

When Brooktree was purchased by Rockwell Semiconductor Systems, the IC family continued to be referred to simply as Bt87x. However, Rockwell Semiconductor Systems was subsequently spun off from its parent company a few years later, and under the new Conexant Systems, Inc. banner, the ICs would be rebranded in marketing literature as being part of Conexant's Fusion family -- i.e. they became referred to as the Fusion Bt878 and Fusion Bt879. When Conexant would later expand its Fusion lineup by releasing the Fusion 878A, an updated version of the Bt878, the "Bt" part was no longer included in the product nomenclature.



Hardware Features

This section below needs to be edited.


The "bttv" kernel module talks to BT878 and several related chips, which are used on video cards from many manufacturers. An up-to-date list of currently supported bttv devices.


When DVB came along, I guess the manufacturers of the TV cards were used to working with this chip so the digital audio input interface was co-opted to take the MPEG2 transport stream.

It has a pretty nice programmable DMA engine. You basically build a very simple RISC program (very RISC - has about 8 instructions) that copies data between the BT848 and your RAM. Like the Philips SAA7146 based DVB PCI card designs, this chipset misuses the analog video input of the chip to sample the MPEG2 Transport Stream in video lines of the framebuffer, programming this is kind of a pain. The original idea behind it was that when you had a window obscured on your display, or you wanted to crop a bit of the input image, you could build a RISC program that just copied the parts of the video lines you wanted, and thus not waste any PCI bandwidth.

The BT878 provides one function each for Video and Audio onto the PCI bus. The two functions have different memory mappings although they have many similar registers - e.g. the i2c bus is only available via the video function and the DVB stream is only available via the audio function. ('function' is a PCI term ... most PCI devices have only one of them...)

It supports both 'software' and 'hardware' i2c Protocols. Software means that you write to the SCL & SDA lines directly and the CPU/driver has to time everything itself. Hardware means you give it a byte or two to read/write and it goes away and does that and gets back to you with an interrupt when it's done. Unfortunately the hardware i2c does not support writing just one byte (the address byte but no data) so you cannot do safe write or read probes of i2c client addresses (it could confuse an i2c client that does not have sub addresses - e.g. a PLL).

We should mention here that i2c probing on a per-address basis is inale since most DVB i2c devices have configurable i2c addresses (not to mention that the basic i2c spec only allows 7-bit addresses, so in theory only 127 different devices would be allowed on the market). unfortunately Linux kernel-i2c folks and their addicted fans don't really like the idea of direct access to the i2c Bus like it is common in STBs and mobile devices. So this "missing feature" or "bug" of the BT878 is not really a chip design flaw but more a misinterpretation of the I2c Protocol Specification of the kernel-i2c folks that had been the cause of some mail threads fought with religious persuasion in the past. See the relevant section in Philosophy and holy Wars or check the linux-dvb mailing list archives.


Howto make it work

This is a general howto here. It might work, but if there's a more specific one for your specific card in this wiki, you should use that one. If not, you should try this howto here, and if it works, add this section to your card's article in this wiki. Thanks.

Driver

The BT878 chip is supported by new kernel versions -- good news! :)

This is what I've done (Debian Sarge testing, kernel version 2.6.16.9). It follows the standard installation of the bttv driver for DVB as it is included in new kernels.

Use lsmod to see if you have all these modules already installed and running.

 bttv
 bt878 
 dvb_core
 dst 
 dvb-bt8xx

If you can't find all of them, try to load them one by one with modprobe, e.g.

 modprobe bt878

Now try lsmod again.

If you can find all of them, you don't have to re-compile your kernel but can use the drivers/modules right away (see below). Otherwise:

Kernel re-compile

In kernel configuration (make menuconfig) make sure to have:

  • Under Device Drivers - Multimedia Devices - Video for Linux
 <M> BT 848
 [*] DVB for bt878

which is equivalent to these entries in the kernel .config file:

 CONFIG_VIDEO_BT848=m
 CONFIG_VIDEO_BT848_DVB=y


  • Under Device Drivers - Multimedia Devices - Digital Video Broadcasting Devices
 <M> DVB for Linux
 <M> DVB Core Support

And there under DVB Core Support - Customise DVB Frontends

 <M> ... something like DVB_BT8XX

which is equivalent to these entries in the kernel .config file:

 CONFIG_DVB=y
 CONFIG_DVB_CORE=m
 CONFIG_DVB_BT8XX=y

And maybe (not sure if necessary) still there under ATSC

 <M> Video BTCX

which is equivalent to this entry in the kernel .config file:

 CONFIG_VIDEO_BTCX = m


  • Under Device Drivers - Sound - ALSA - PCI devices
 <M> BT878

which is equivalent to this entry in the kernel .config file:

 CONFIG_SND=y etc. for sound in general 
 CONFIG_SND_BT87X=m

(I may have missed a couple of options. Please add them.) Save the config file, compile your new kernel, install it and restart.


Modules needed

Required modules and parameters:

 bttv
 bt878 
 dvb_core
 dst 
 dvb-bt8xx

Load them using modprobe.

You should now have some stuff in /dev/dvb/adapter0/

That's it. Depending on your card model (?), you probably don't need any firmware stuff.


Next steps

Testing your DVB device


Notes

The dvb-bt8xx driver conflicts with the ALSA snd-bt78x driver.

Also see v4l's BT878 page and v4l's BTaudio page

External links