Sound-FAQ
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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