|  | /* | 
|  | msp3400.h - definition for msp3400 inputs and outputs | 
|  |  | 
|  | Copyright (C) 2006 Hans Verkuil ([email protected]) | 
|  |  | 
|  | 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 */ | 
|  |  |