It is no longer needed to use a struct pointer as argument, since v4l2_subdev doesn't require that ioctl-like approach anymore. Instead just pass the input, output and config (new!) arguments directly. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
		
			
				
	
	
		
			226 lines
		
	
	
	
		
			8.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
	
		
			8.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
    msp3400.h - definition for msp3400 inputs and outputs
 | 
						|
 | 
						|
    Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
 | 
						|
 | 
						|
    This program is free software; you can redistribute it and/or modify
 | 
						|
    it under the terms of the GNU General Public License as published by
 | 
						|
    the Free Software Foundation; either version 2 of the License, or
 | 
						|
    (at your option) any later version.
 | 
						|
 | 
						|
    This program is distributed in the hope that it will be useful,
 | 
						|
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
    GNU General Public License for more details.
 | 
						|
 | 
						|
    You should have received a copy of the GNU General Public License
 | 
						|
    along with this program; if not, write to the Free Software
 | 
						|
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef _MSP3400_H_
 | 
						|
#define _MSP3400_H_
 | 
						|
 | 
						|
/* msp3400 routing
 | 
						|
   ===============
 | 
						|
 | 
						|
   The msp3400 has a complicated routing scheme with many possible
 | 
						|
   combinations. The details are all in the datasheets but I will try
 | 
						|
   to give a short description here.
 | 
						|
 | 
						|
   Inputs
 | 
						|
   ======
 | 
						|
 | 
						|
   There are 1) tuner inputs, 2) I2S inputs, 3) SCART inputs. You will have
 | 
						|
   to select which tuner input to use and which SCART input to use. The
 | 
						|
   selected tuner input, the selected SCART input and all I2S inputs go to
 | 
						|
   the DSP (the tuner input first goes through the demodulator).
 | 
						|
 | 
						|
   The DSP handles things like volume, bass/treble, balance, and some chips
 | 
						|
   have support for surround sound. It has several outputs: MAIN, AUX, I2S
 | 
						|
   and SCART1/2. Each output can select which DSP input to use. So the MAIN
 | 
						|
   output can select the tuner input while at the same time the SCART1 output
 | 
						|
   uses the I2S input.
 | 
						|
 | 
						|
   Outputs
 | 
						|
   =======
 | 
						|
 | 
						|
   Most DSP outputs are also the outputs of the msp3400. However, the SCART
 | 
						|
   outputs of the msp3400 can select which input to use: either the SCART1 or
 | 
						|
   SCART2 output from the DSP, or the msp3400 SCART inputs, thus completely
 | 
						|
   bypassing the DSP.
 | 
						|
 | 
						|
   Summary
 | 
						|
   =======
 | 
						|
 | 
						|
   So to specify a complete routing scheme for the msp3400 you will have to
 | 
						|
   specify in the 'input' arg of the s_routing function:
 | 
						|
 | 
						|
   1) which tuner input to use
 | 
						|
   2) which SCART input to use
 | 
						|
   3) which DSP input to use for each DSP output
 | 
						|
 | 
						|
   And in the 'output' arg of the s_routing function you specify:
 | 
						|
 | 
						|
   1) which SCART input to use for each SCART output
 | 
						|
 | 
						|
   Depending on how the msp is wired to the other components you can
 | 
						|
   ignore or mute certain inputs or outputs.
 | 
						|
 | 
						|
   Also, depending on the msp version only a subset of the inputs or
 | 
						|
   outputs may be present. At the end of this header some tables are
 | 
						|
   added containing a list of what is available for each msp version.
 | 
						|
 */
 | 
						|
 | 
						|
/* Inputs to the DSP unit: two independent selections have to be made:
 | 
						|
   1) the tuner (SIF) input
 | 
						|
   2) the SCART input
 | 
						|
   Bits 0-2 are used for the SCART input select, bit 3 is used for the tuner
 | 
						|
   input, bits 4-7 are reserved.
 | 
						|
 */
 | 
						|
 | 
						|
/* SCART input to DSP selection */
 | 
						|
#define MSP_IN_SCART1  		0  /* Pin SC1_IN */
 | 
						|
#define MSP_IN_SCART2  		1  /* Pin SC2_IN */
 | 
						|
#define MSP_IN_SCART3  		2  /* Pin SC3_IN */
 | 
						|
#define MSP_IN_SCART4  		3  /* Pin SC4_IN */
 | 
						|
#define MSP_IN_MONO     	6  /* Pin MONO_IN */
 | 
						|
#define MSP_IN_MUTE     	7  /* Mute DSP input */
 | 
						|
#define MSP_SCART_TO_DSP(in) 	(in)
 | 
						|
/* Tuner input to demodulator and DSP selection */
 | 
						|
#define MSP_IN_TUNER1 		0  /* Analog Sound IF input pin ANA_IN1 */
 | 
						|
#define MSP_IN_TUNER2 		1  /* Analog Sound IF input pin ANA_IN2 */
 | 
						|
#define MSP_TUNER_TO_DSP(in) 	((in) << 3)
 | 
						|
 | 
						|
/* The msp has up to 5 DSP outputs, each output can independently select
 | 
						|
   a DSP input.
 | 
						|
 | 
						|
   The DSP outputs are: loudspeaker output (aka MAIN), headphones output
 | 
						|
   (aka AUX), SCART1 DA output, SCART2 DA output and an I2S output.
 | 
						|
   There also is a quasi-peak detector output, but that is not used by
 | 
						|
   this driver and is set to the same input as the loudspeaker output.
 | 
						|
   Not all outputs are supported by all msp models. Setting the input
 | 
						|
   of an unsupported output will be ignored by the driver.
 | 
						|
 | 
						|
   There are up to 16 DSP inputs to choose from, so each output is
 | 
						|
   assigned 4 bits.
 | 
						|
 | 
						|
   Note: the 44x8G can mix two inputs and feed the result back to the
 | 
						|
   DSP. This is currently not implemented. Also not implemented is the
 | 
						|
   multi-channel capable I2S3 input of the 44x0G. If someone can demonstrate
 | 
						|
   a need for one of those features then additional support can be added. */
 | 
						|
#define MSP_DSP_IN_TUNER 	0  /* Tuner DSP input */
 | 
						|
#define MSP_DSP_IN_SCART 	2  /* SCART DSP input */
 | 
						|
#define MSP_DSP_IN_I2S1 	5  /* I2S1 DSP input */
 | 
						|
#define MSP_DSP_IN_I2S2 	6  /* I2S2 DSP input */
 | 
						|
#define MSP_DSP_IN_I2S3    	7  /* I2S3 DSP input */
 | 
						|
#define MSP_DSP_IN_MAIN_AVC 	11 /* MAIN AVC processed DSP input */
 | 
						|
#define MSP_DSP_IN_MAIN 	12 /* MAIN DSP input */
 | 
						|
#define MSP_DSP_IN_AUX 		13 /* AUX DSP input */
 | 
						|
#define MSP_DSP_TO_MAIN(in)   	((in) << 4)
 | 
						|
#define MSP_DSP_TO_AUX(in)    	((in) << 8)
 | 
						|
#define MSP_DSP_TO_SCART1(in) 	((in) << 12)
 | 
						|
#define MSP_DSP_TO_SCART2(in) 	((in) << 16)
 | 
						|
#define MSP_DSP_TO_I2S(in)    	((in) << 20)
 | 
						|
 | 
						|
/* Output SCART select: the SCART outputs can select which input
 | 
						|
   to use. */
 | 
						|
#define MSP_SC_IN_SCART1 	0  /* SCART1 input, bypassing the DSP */
 | 
						|
#define MSP_SC_IN_SCART2 	1  /* SCART2 input, bypassing the DSP */
 | 
						|
#define MSP_SC_IN_SCART3 	2  /* SCART3 input, bypassing the DSP */
 | 
						|
#define MSP_SC_IN_SCART4 	3  /* SCART4 input, bypassing the DSP */
 | 
						|
#define MSP_SC_IN_DSP_SCART1 	4  /* DSP SCART1 input */
 | 
						|
#define MSP_SC_IN_DSP_SCART2 	5  /* DSP SCART2 input */
 | 
						|
#define MSP_SC_IN_MONO 		6  /* MONO input, bypassing the DSP */
 | 
						|
#define MSP_SC_IN_MUTE 		7  /* MUTE output */
 | 
						|
#define MSP_SC_TO_SCART1(in)	(in)
 | 
						|
#define MSP_SC_TO_SCART2(in)	((in) << 4)
 | 
						|
 | 
						|
/* Shortcut macros */
 | 
						|
#define MSP_INPUT(sc, t, main_aux_src, sc_i2s_src) \
 | 
						|
	(MSP_SCART_TO_DSP(sc) | \
 | 
						|
	 MSP_TUNER_TO_DSP(t) | \
 | 
						|
	 MSP_DSP_TO_MAIN(main_aux_src) | \
 | 
						|
	 MSP_DSP_TO_AUX(main_aux_src) | \
 | 
						|
	 MSP_DSP_TO_SCART1(sc_i2s_src) | \
 | 
						|
	 MSP_DSP_TO_SCART2(sc_i2s_src) | \
 | 
						|
	 MSP_DSP_TO_I2S(sc_i2s_src))
 | 
						|
#define MSP_INPUT_DEFAULT MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
 | 
						|
				    MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER)
 | 
						|
#define MSP_OUTPUT(sc) \
 | 
						|
	(MSP_SC_TO_SCART1(sc) | \
 | 
						|
	 MSP_SC_TO_SCART2(sc))
 | 
						|
/* This equals the RESET position of the msp3400 ACB register */
 | 
						|
#define MSP_OUTPUT_DEFAULT (MSP_SC_TO_SCART1(MSP_SC_IN_SCART3) | \
 | 
						|
			    MSP_SC_TO_SCART2(MSP_SC_IN_DSP_SCART1))
 | 
						|
 | 
						|
/* Tuner inputs vs. msp version */
 | 
						|
/* Chip      TUNER_1   TUNER_2
 | 
						|
   -------------------------
 | 
						|
   msp34x0b  y         y
 | 
						|
   msp34x0c  y         y
 | 
						|
   msp34x0d  y         y
 | 
						|
   msp34x5d  y         n
 | 
						|
   msp34x7d  y         n
 | 
						|
   msp34x0g  y         y
 | 
						|
   msp34x1g  y         y
 | 
						|
   msp34x2g  y         y
 | 
						|
   msp34x5g  y         n
 | 
						|
   msp34x7g  y         n
 | 
						|
   msp44x0g  y         y
 | 
						|
   msp44x8g  y         y
 | 
						|
 */
 | 
						|
 | 
						|
/* SCART inputs vs. msp version */
 | 
						|
/* Chip      SC1 SC2 SC3 SC4
 | 
						|
   -------------------------
 | 
						|
   msp34x0b  y   y   y   n
 | 
						|
   msp34x0c  y   y   y   n
 | 
						|
   msp34x0d  y   y   y   y
 | 
						|
   msp34x5d  y   y   n   n
 | 
						|
   msp34x7d  y   n   n   n
 | 
						|
   msp34x0g  y   y   y   y
 | 
						|
   msp34x1g  y   y   y   y
 | 
						|
   msp34x2g  y   y   y   y
 | 
						|
   msp34x5g  y   y   n   n
 | 
						|
   msp34x7g  y   n   n   n
 | 
						|
   msp44x0g  y   y   y   y
 | 
						|
   msp44x8g  y   y   y   y
 | 
						|
 */
 | 
						|
 | 
						|
/* DSP inputs vs. msp version (tuner and SCART inputs are always available) */
 | 
						|
/* Chip      I2S1 I2S2 I2S3 MAIN_AVC MAIN AUX
 | 
						|
   ------------------------------------------
 | 
						|
   msp34x0b  y    n    n    n        n    n
 | 
						|
   msp34x0c  y    y    n    n        n    n
 | 
						|
   msp34x0d  y    y    n    n        n    n
 | 
						|
   msp34x5d  y    y    n    n        n    n
 | 
						|
   msp34x7d  n    n    n    n        n    n
 | 
						|
   msp34x0g  y    y    n    n        n    n
 | 
						|
   msp34x1g  y    y    n    n        n    n
 | 
						|
   msp34x2g  y    y    n    y        y    y
 | 
						|
   msp34x5g  y    y    n    n        n    n
 | 
						|
   msp34x7g  n    n    n    n        n    n
 | 
						|
   msp44x0g  y    y    y    y        y    y
 | 
						|
   msp44x8g  y    y    y    n        n    n
 | 
						|
 */
 | 
						|
 | 
						|
/* DSP outputs vs. msp version */
 | 
						|
/* Chip      MAIN AUX SCART1 SCART2 I2S
 | 
						|
   ------------------------------------
 | 
						|
   msp34x0b  y    y   y      n      y
 | 
						|
   msp34x0c  y    y   y      n      y
 | 
						|
   msp34x0d  y    y   y      y      y
 | 
						|
   msp34x5d  y    n   y      n      y
 | 
						|
   msp34x7d  y    n   y      n      n
 | 
						|
   msp34x0g  y    y   y      y      y
 | 
						|
   msp34x1g  y    y   y      y      y
 | 
						|
   msp34x2g  y    y   y      y      y
 | 
						|
   msp34x5g  y    n   y      n      y
 | 
						|
   msp34x7g  y    n   y      n      n
 | 
						|
   msp44x0g  y    y   y      y      y
 | 
						|
   msp44x8g  y    y   y      y      y
 | 
						|
 */
 | 
						|
 | 
						|
#endif /* MSP3400_H */
 | 
						|
 |