linux/Documentation/video4linux/bttv/Sound-FAQ
<<
>>
Prefs
   1
   2bttv and sound mini howto
   3=========================
   4
   5There are a lot of different bt848/849/878/879 based boards available.
   6Making video work often is not a big deal, because this is handled
   7completely by the bt8xx chip, which is common on all boards.  But
   8sound is handled in slightly different ways on each board.
   9
  10To handle the grabber boards correctly, there is a array tvcards[] in
  11bttv-cards.c, which holds the information required for each board.
  12Sound will work only, if the correct entry is used (for video it often
  13makes no difference).  The bttv driver prints a line to the kernel
  14log, telling which card type is used.  Like this one:
  15
  16        bttv0: model: BT848(Hauppauge old) [autodetected]
  17
  18You should verify this is correct.  If it isn't, you have to pass the
  19correct board type as insmod argument, "insmod bttv card=2" for
  20example.  The file CARDLIST has a list of valid arguments for card.
  21If your card isn't listed there, you might check the source code for
  22new entries which are not listed yet.  If there isn't one for your
  23card, you can check if one of the existing entries does work for you
  24(just trial and error...).
  25
  26Some boards have an extra processor for sound to do stereo decoding
  27and other nice features.  The msp34xx chips are used by Hauppauge for
  28example.  If your board has one, you might have to load a helper
  29module like msp3400.o to make sound work.  If there isn't one for the
  30chip used on your board:  Bad luck.  Start writing a new one.  Well,
  31you might want to check the video4linux mailing list archive first...
  32
  33Of course you need a correctly installed soundcard unless you have the
  34speakers connected directly to the grabber board.  Hint: check the
  35mixer settings too.  ALSA for example has everything muted by default.
  36
  37
  38How sound works in detail
  39=========================
  40
  41Still doesn't work?  Looks like some driver hacking is required.
  42Below is a do-it-yourself description for you.
  43
  44The bt8xx chips have 32 general purpose pins, and registers to control
  45these pins.  One register is the output enable register
  46(BT848_GPIO_OUT_EN), it says which pins are actively driven by the
  47bt848 chip.  Another one is the data register (BT848_GPIO_DATA), where
  48you can get/set the status if these pins.  They can be used for input
  49and output.
  50
  51Most grabber board vendors use these pins to control an external chip
  52which does the sound routing.  But every board is a little different.
  53These pins are also used by some companies to drive remote control
  54receiver chips.  Some boards use the i2c bus instead of the gpio pins
  55to connect the mux chip.
  56
  57As mentioned above, there is a array which holds the required
  58informations for each known board.  You basically have to create a new
  59line for your board.  The important fields are these two:
  60
  61struct tvcard
  62{
  63        [ ... ]
  64        u32 gpiomask;
  65        u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */
  66};
  67
  68gpiomask specifies which pins are used to control the audio mux chip.
  69The corresponding bits in the output enable register
  70(BT848_GPIO_OUT_EN) will be set as these pins must be driven by the
  71bt848 chip.
  72
  73The audiomux[] array holds the data values for the different inputs
  74(i.e. which pins must be high/low for tuner/mute/...).  This will be
  75written to the data register (BT848_GPIO_DATA) to switch the audio
  76mux.
  77
  78
  79What you have to do is figure out the correct values for gpiomask and
  80the audiomux array.  If you have Windows and the drivers four your
  81card installed, you might to check out if you can read these registers
  82values used by the windows driver.  A tool to do this is available
  83from ftp://telepresence.dmem.strath.ac.uk/pub/bt848/winutil, but it
  84does'nt work with bt878 boards according to some reports I received.
  85Another one with bt878 support is available from
  86http://btwincap.sourceforge.net/Files/btspy2.00.zip
  87
  88You might also dig around in the *.ini files of the Windows applications.
  89You can have a look at the board to see which of the gpio pins are
  90connected at all and then start trial-and-error ...
  91
  92
  93Starting with release 0.7.41 bttv has a number of insmod options to
  94make the gpio debugging easier:
  95
  96bttv_gpio=0/1           enable/disable gpio debug messages
  97gpiomask=n              set the gpiomask value
  98audiomux=i,j,...        set the values of the audiomux array
  99audioall=a              set the values of the audiomux array (one
 100                        value for all array elements, useful to check
 101                        out which effect the particular value has).
 102
 103The messages printed with bttv_gpio=1 look like this:
 104
 105        bttv0: gpio: en=00000027, out=00000024 in=00ffffd8 [audio: off]
 106
 107en  =   output _en_able register (BT848_GPIO_OUT_EN)
 108out =   _out_put bits of the data register (BT848_GPIO_DATA),
 109        i.e. BT848_GPIO_DATA & BT848_GPIO_OUT_EN
 110in  =   _in_put bits of the data register,
 111        i.e. BT848_GPIO_DATA & ~BT848_GPIO_OUT_EN
 112
 113
 114
 115Other elements of the tvcards array
 116===================================
 117
 118If you are trying to make a new card work you might find it useful to
 119know what the other elements in the tvcards array are good for:
 120
 121video_inputs    - # of video inputs the card has
 122audio_inputs    - historical cruft, not used any more.
 123tuner           - which input is the tuner
 124svhs            - which input is svhs (all others are labeled composite)
 125muxsel          - video mux, input->registervalue mapping
 126pll             - same as pll= insmod option
 127tuner_type      - same as tuner= insmod option
 128*_modulename    - hint whenever some card needs this or that audio
 129                  module loaded to work properly.
 130has_radio       - whenever this TV card has a radio tuner.
 131no_msp34xx      - "1" disables loading of msp3400.o module
 132no_tda9875      - "1" disables loading of tda9875.o module
 133needs_tvaudio   - set to "1" to load tvaudio.o module
 134
 135If some config item is specified both from the tvcards array and as
 136insmod option, the insmod option takes precedence.
 137
 138
 139
 140Good luck,
 141
 142  Gerd
 143
 144
 145PS: If you have a new working entry, mail it to me.
 146
 147--
 148Gerd Knorr <kraxel@bytesex.org>
 149
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.