Cx88 devices (cx2388x)

From LinuxTVWiki
Revision as of 23:33, 1 December 2008 by CityK (Talk | contribs)

Jump to: navigation, search

The Conexant cx2388x decoder chip is the successor to the bt848/bt878 chips; cf. PCI interface chipsets used for v4l cards.

The cx2388x is supported under Linux, however, there are areas of the chip's feature set that the driver either needs improvement upon or support for which is currently absent (See current status section for more information). Nonetheless, most users will likely find the current rendition quite sufficient.

There is also support in the kernel for a cx23416 mpeg encoder via the cx2388x host port though the blackbird driver, cx88-blackbird.c, which includes parts from the ivtv driver.


Supported cx88 devices

An up-to-date list of cx88 devices supported by V4L-DVB drivers is found in the CARDLIST.cx88 file in the master development repository.

Devices supported by the kernel running on your system are listed in your local <path_to_your_kernel_sources>/Documentation/video4linux/CARDLIST.cx88.

Getting an unlisted card to work

If your card is not listed, see the "How to add support for a device" article.

Current status

Video

  • Basically works.
  • Some minor image quality glitches
  • See cx88 Color problem patch
  • For now only capture; overlay support isn't completed yet.

Audio

  • The chip specs for the on-chip TV sound decoder are next to useless :-/
  • Nevertheless, the built-in TV sound decoder starts working now, at least for PAL-BG. Other TV norms need other code ...
FOR ANY REPORTS ON THIS PLEASE MENTION THE TV NORM YOU ARE USING.
  • Most tuner chips do provide mono sound, which may or may not be useable depending on the board design. With the Hauppauge cards it works, so there is mono sound available as fallback.
  • audio data dma (i.e. recording without loopback cable to the sound card) is supported since 2.6.16 (CONFIG_VIDEO_CX88_ALSA). It only works with boards with function 01 enabled. To check if your board supports it, issue lspci -n. If supported, you should see a 1471:8801 or 1471:8811 PCI device.

vbi (cf. text capture)

  • Undocumented, but likely works in recent kernels (at least 2.6.19 and likely earlier).

TV audio types

For an up-to-date list of TV audio types, see the latest Hg version of the kernel sources. The list looks like this as of Nov 2008:

WW_NONE         1
WW_BTSC         2
WW_BG           3
WW_DK           4
WW_I            5
WW_L            6
WW_EIAJ         7
WW_I2SPT        8
WW_FM           9
WW_I2SADC	 10

Hue Saturation Brightness

There was a problem in the cx88 code that resulted in the need to set hue to either 0% or 100% in order to avoid seeing green and blue men on the screen. This problem has been corrected as of the CVS commit on Wed Jun 29 16:28:17 2005 UTC. We have collected information regarding this on this page.

Installation notes

For details, see Generic Installation below and if necessary, the individual cards further down -- and please add your own if it differs from the generic installation!

Generic Installation

This installation method has been tested with a DViCO FusionHDTV 5 Gold but I have been told that it can be used as generic installation instructions for any device that uses the cx88 driver.

Below you will see that all of the TV tuner related drivers are being compiled as modules. This allows MythTV to detect the TV tuner card and let you send parameters to the modules.

Kernel

When compiling the kernel, here are the options you need to tick:

Loadable module support:

[*] Enable loadable module support 
[*]   Module unloading
[*]     Forced module unloading
[*]   Automatic kernel module loading

Device Drivers->Multimedia devices:

[*] Video For Linux

Device Drivers->I2C support

<M> I2C support 
<M> I2C device interface

Video Capture Adapters:

[*] Autoselect pertinent encoders/decoders and other helper chips 
<M> Conexant 2388x (bt878 successor) support
<M>   Conexant 2388x DMA audio support
<M>   DVB/ATSC Support for cx2388x based TV cards

If your card supports has blackbird mpeg encoder support, you'll need to compile the module for that. The DViCO FusionHDTV 5 Gold card does not have the blackbird mpeg encoder, so it's not necessary to tick this option for that card.

<M>   Blackbird MPEG encoder support (cx2388x + cx23416)  

Digital Video Broadcasting Devices:

[*] DVB for Linux 
<M> DVB Core Support

If you are really familiar with the hardware, you can save some system memory by only selecting the DVB Frontends that the card needs. This is accomplished as follows:

[*]     Load and attach frontend modules as needed

Customise DVB Frontends--->

[*] Customise the frontend modules to build

Then if you are using a DViCO FusionHDTV 5 Gold card, you would tick these two options:

<M> LG Electronics LGDT3302/LGDT3303 based
<M> LG TDVS-H06xF ATSC tuner

Note: The current kernel, 2.6.20, does not automatically load the cx88-dvb driver when a program like mplayer requests to use it. This problem will most likely be fixed in kernel 2.6.21, but in the mean time, you will either need to load it using:

modprobe cx88-dvb

or you can specify it in your modprobe.conf file which in gentoo would be /etc/modules.autoload.d/kernel-2.6 so that it will load when the computer boots:

cx88-dvb

Sound

When tuning digital channels, all you need is a functioning sound card with no further configuration. When tuning analog channels, there are two ways you can capture the sound. You can capture it through the internal audio cable that connects the tuner board to the sound card or through DMA audio using the cx88-alsa driver.

Internal Audio Cable

In order to capture the sound through the internal audio cable, you need to have an audio port on your tuner card and an auxiliary jack on your motherboard or sound card so you can hook the tuner card up to that auxiliary port. Then you need to plug some kind of device like speakers, headphones, etc. into the analog stereo jack on your motherboard or sound card.

Note: The sound is only output to the analog jack with this method. If you use something other than the analog jack like SPDIF or any other kind of digital audio jack for your speakers, you will need to have some way of switching input on your speakers or amp to the analog jack when you are tuning analog channels.

Alsa

Using DMA audio with the cx88-alsa driver is probably the best choice for capturing the analog sound. It doesn't use internal ports on your motherboard or sound card and for some people it might be the only choice since they might only have one internal audio port that is already in use. It is also beneficial if you have multiple tuner cards while still having a finite or small number of internal audio ports.

Since many programs generally look for the output sound device as the first device, you will need to configure your sound card or onboard sound to be the first device. This requires knowledge of all the sound hardware connected to your computer. You can start by finding out what audio devices you have like this:

lspci -v | grep -i audio

which will produce something like this:

00:0d.0 Multimedia video controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
00:0d.1 Multimedia controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] (rev 05)
00:0d.2 Multimedia controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05)
00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 60)

This shows that I have the Conexant CX23880 chip and the VIA VT8233 chip. Now that you have a listing of devices, you need to determine which device is your default output device. In this case, it would be the VIA VT8233 chip which is an onboard motherboard audio device.

Note: You cannot use alsaconf if you have more than one sound device because it is only capable of configuring one device. I suggest you get familiar with the alsa configuration of sound devices so that you can configure more than one sound device.

On gentoo, you configure the sound with /etc/modules.d/alsa and after you make changes to that file, you need to run modules-update. For other versions of linux, you will need to configure /etc/modprobe.conf. Here's an example of how an onboard VIA sound device should be configured with the DViCO FusionHDTV 5 Gold card:

alias char-major-116 snd
alias char-major-14 soundcore

#Force Sound Device Sequence
options snd-via82xx index=0
options cx88-alsa index=1

#via82xx Sound Device
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias /dev/dsp snd-pcm-oss
alias snd-card-0 snd-via82xx
alias sound-slot-0 snd-via82xx

#Dvico Card Sound Capture Device
alias sound-service-1-0 snd-mixer-oss
alias sound-service-1-3 snd-pcm-oss
alias sound-service-1-12 snd-pcm-oss
alias /dev/dsp1 snd-pcm-oss
alias snd-card-1 cx88-alsa
alias sound-slot-1 cx88-alsa

Once you restart alsa (/etc/init.d/alsasound restart on gentoo) or reboot your computer, you should be able see all your sound devices. Make sure your onboard sound device or sound card is the first device listed:

cat /proc/asound/cards

should output the following using the above example:

0 [V8237          ]: VIA8237 - VIA 8237
                     VIA 8237 with AD1985 at 0xc800, irq 22
1 [CX8811         ]: CX88x - Conexant CX8811
                     Conexant CX8811 at 0xfb000000

This shows that everything is configured properly because the onboard sound device is the first device and the tv tuner audio decoder (CX8811 on the DViCO FusionHDTV 5 Gold card) is the second device. This second device is only a capture device so the output of this device will need to be piped to the onboard sound device (VIA8237 in this case) in order to hear the audio. This can be accomplished in a few different manners depending on the program you are using.

Tuning

If you have mplayer or mythtv installed, I would recommend you use one of these programs because they have the capacity to capture and output DMA audio. This is important because programs that don't have this ability will not be able to keep the audio and video in sync with each other.

With mplayer, this can be accomplished with this command:

mplayer tv:// -tv driver=v4l2:chanlist=us-cable:alsa:adevice=hw.0,1:amode=1:audiorate=48000:forceaudio:volume=100:immediatemode=0:norm=NTSC-M

You can then use "H" or "K" to change the channels.

If you don't care that the audio and video can go out of sync, you can use tvtime and arecord to tune analog channels. Run this command in the console and then start tvtime:

arecord -D hw:1,0 -f dat | aplay

In addition, as stated above, tuning digital channels with the cx88 driver does not require cx88-alsa and can be accomplished by configuring a channels.conf file for mplayer and running this command:

mplayer dvb://

Hauppauge

Leadtek

MSI

  • TV-@nywhere Master

This card is not able to do the default QuasiSplitSound demulation, so force the IF to Intercarrier when inserting the driver module:

options tda9887 qss=0

As of kernel 2.16.18 the code for the above module was moved, so use the following instead:

options tuner qss=0

In addition, set hue full up or down and then adjust the rest. There is a bug nobody has found so far.

pcHDTV

  • Its possible to use the IrDA dongle with the pcHDTV HD5500 board. Locate cx88_input.c (v4l-dvb/linux/drivers/media/video/cx88/cx88_input.c). Edit the file, adding:

CX88_BOARD_PCHDTV_HD5500:

directly below anywhere "CX88_BOARD_HAUPPAUGE_HVR3000:" is mentioned (2 places). Once you recompile the drivers, your IrDA receiver should be recognized. You can use it with Lirc using the dev/input driver. (Run lsinput to see which input the receiver has been assigned) (source)

Pinnacle

Pixelview

Powercolor