 02582e9bcc
			
		
	
	
	02582e9bcc
	
	
	
		
			
			Signed-off-by: Masanari Iida <standby24x7@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
		
			
				
	
	
		
			148 lines
		
	
	
	
		
			5.7 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
	
		
			5.7 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
 | |
| bttv and sound mini howto
 | |
| =========================
 | |
| 
 | |
| There are a lot of different bt848/849/878/879 based boards available.
 | |
| Making video work often is not a big deal, because this is handled
 | |
| completely by the bt8xx chip, which is common on all boards.  But
 | |
| sound is handled in slightly different ways on each board.
 | |
| 
 | |
| To handle the grabber boards correctly, there is a array tvcards[] in
 | |
| bttv-cards.c, which holds the information required for each board.
 | |
| Sound will work only, if the correct entry is used (for video it often
 | |
| makes no difference).  The bttv driver prints a line to the kernel
 | |
| log, telling which card type is used.  Like this one:
 | |
| 
 | |
| 	bttv0: model: BT848(Hauppauge old) [autodetected]
 | |
| 
 | |
| You should verify this is correct.  If it isn't, you have to pass the
 | |
| correct board type as insmod argument, "insmod bttv card=2" for
 | |
| example.  The file CARDLIST has a list of valid arguments for card.
 | |
| If your card isn't listed there, you might check the source code for
 | |
| new entries which are not listed yet.  If there isn't one for your
 | |
| card, you can check if one of the existing entries does work for you
 | |
| (just trial and error...).
 | |
| 
 | |
| Some boards have an extra processor for sound to do stereo decoding
 | |
| and other nice features.  The msp34xx chips are used by Hauppauge for
 | |
| example.  If your board has one, you might have to load a helper
 | |
| module like msp3400.o to make sound work.  If there isn't one for the
 | |
| chip used on your board:  Bad luck.  Start writing a new one.  Well,
 | |
| you might want to check the video4linux mailing list archive first...
 | |
| 
 | |
| Of course you need a correctly installed soundcard unless you have the
 | |
| speakers connected directly to the grabber board.  Hint: check the
 | |
| mixer settings too.  ALSA for example has everything muted by default.
 | |
| 
 | |
| 
 | |
| How sound works in detail
 | |
| =========================
 | |
| 
 | |
| Still doesn't work?  Looks like some driver hacking is required.
 | |
| Below is a do-it-yourself description for you.
 | |
| 
 | |
| The bt8xx chips have 32 general purpose pins, and registers to control
 | |
| these pins.  One register is the output enable register
 | |
| (BT848_GPIO_OUT_EN), it says which pins are actively driven by the
 | |
| bt848 chip.  Another one is the data register (BT848_GPIO_DATA), where
 | |
| you can get/set the status if these pins.  They can be used for input
 | |
| and output.
 | |
| 
 | |
| Most grabber board vendors use these pins to control an external chip
 | |
| which does the sound routing.  But every board is a little different.
 | |
| These pins are also used by some companies to drive remote control
 | |
| receiver chips.  Some boards use the i2c bus instead of the gpio pins
 | |
| to connect the mux chip.
 | |
| 
 | |
| As mentioned above, there is a array which holds the required
 | |
| informations for each known board.  You basically have to create a new
 | |
| line for your board.  The important fields are these two:
 | |
| 
 | |
| struct tvcard
 | |
| {
 | |
| 	[ ... ]
 | |
| 	u32 gpiomask;
 | |
| 	u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */
 | |
| };
 | |
| 
 | |
| gpiomask specifies which pins are used to control the audio mux chip.
 | |
| The corresponding bits in the output enable register
 | |
| (BT848_GPIO_OUT_EN) will be set as these pins must be driven by the
 | |
| bt848 chip.
 | |
| 
 | |
| The audiomux[] array holds the data values for the different inputs
 | |
| (i.e. which pins must be high/low for tuner/mute/...).  This will be
 | |
| written to the data register (BT848_GPIO_DATA) to switch the audio
 | |
| mux.
 | |
| 
 | |
| 
 | |
| What you have to do is figure out the correct values for gpiomask and
 | |
| the audiomux array.  If you have Windows and the drivers four your
 | |
| card installed, you might to check out if you can read these registers
 | |
| values used by the windows driver.  A tool to do this is available
 | |
| from ftp://telepresence.dmem.strath.ac.uk/pub/bt848/winutil, but it
 | |
| does'nt work with bt878 boards according to some reports I received.
 | |
| Another one with bt878 support is available from
 | |
| http://btwincap.sourceforge.net/Files/btspy2.00.zip
 | |
| 
 | |
| You might also dig around in the *.ini files of the Windows applications.
 | |
| You can have a look at the board to see which of the gpio pins are
 | |
| connected at all and then start trial-and-error ...
 | |
| 
 | |
| 
 | |
| Starting with release 0.7.41 bttv has a number of insmod options to
 | |
| make the gpio debugging easier:
 | |
| 
 | |
| bttv_gpio=0/1		enable/disable gpio debug messages
 | |
| gpiomask=n		set the gpiomask value
 | |
| audiomux=i,j,...	set the values of the audiomux array
 | |
| audioall=a		set the values of the audiomux array (one
 | |
| 			value for all array elements, useful to check
 | |
| 			out which effect the particular value has).
 | |
| 
 | |
| The messages printed with bttv_gpio=1 look like this:
 | |
| 
 | |
| 	bttv0: gpio: en=00000027, out=00000024 in=00ffffd8 [audio: off]
 | |
| 
 | |
| en  =	output _en_able register (BT848_GPIO_OUT_EN)
 | |
| out =	_out_put bits of the data register (BT848_GPIO_DATA),
 | |
| 	i.e. BT848_GPIO_DATA & BT848_GPIO_OUT_EN
 | |
| in  = 	_in_put bits of the data register,
 | |
| 	i.e. BT848_GPIO_DATA & ~BT848_GPIO_OUT_EN
 | |
| 
 | |
| 
 | |
| 
 | |
| Other elements of the tvcards array
 | |
| ===================================
 | |
| 
 | |
| If you are trying to make a new card work you might find it useful to
 | |
| know what the other elements in the tvcards array are good for:
 | |
| 
 | |
| video_inputs    - # of video inputs the card has
 | |
| audio_inputs    - historical cruft, not used any more.
 | |
| tuner           - which input is the tuner
 | |
| svhs            - which input is svhs (all others are labeled composite)
 | |
| muxsel          - video mux, input->registervalue mapping
 | |
| pll             - same as pll= insmod option
 | |
| tuner_type      - same as tuner= insmod option
 | |
| *_modulename    - hint whenever some card needs this or that audio
 | |
| 		  module loaded to work properly.
 | |
| has_radio	- whenever this TV card has a radio tuner.
 | |
| no_msp34xx	- "1" disables loading of msp3400.o module
 | |
| no_tda9875	- "1" disables loading of tda9875.o module
 | |
| needs_tvaudio	- set to "1" to load tvaudio.o module
 | |
| 
 | |
| If some config item is specified both from the tvcards array and as
 | |
| insmod option, the insmod option takes precedence.
 | |
| 
 | |
| 
 | |
| 
 | |
| Good luck,
 | |
| 
 | |
|   Gerd
 | |
| 
 | |
| 
 | |
| PS: If you have a new working entry, mail it to me.
 | |
| 
 | |
| --
 | |
| Gerd Knorr <kraxel@bytesex.org>
 |