| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 1 | /* | 
 | 2 |     msp3400.h - definition for msp3400 inputs and outputs | 
 | 3 |  | 
 | 4 |     Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl) | 
 | 5 |  | 
 | 6 |     This program is free software; you can redistribute it and/or modify | 
 | 7 |     it under the terms of the GNU General Public License as published by | 
 | 8 |     the Free Software Foundation; either version 2 of the License, or | 
 | 9 |     (at your option) any later version. | 
 | 10 |  | 
 | 11 |     This program is distributed in the hope that it will be useful, | 
 | 12 |     but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | 13 |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | 14 |     GNU General Public License for more details. | 
 | 15 |  | 
 | 16 |     You should have received a copy of the GNU General Public License | 
 | 17 |     along with this program; if not, write to the Free Software | 
 | 18 |     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 
 | 19 | */ | 
 | 20 |  | 
 | 21 | #ifndef _MSP3400_H_ | 
 | 22 | #define _MSP3400_H_ | 
 | 23 |  | 
 | 24 | /* msp3400 routing | 
 | 25 |    =============== | 
 | 26 |  | 
 | 27 |    The msp3400 has a complicated routing scheme with many possible | 
 | 28 |    combinations. The details are all in the datasheets but I will try | 
 | 29 |    to give a short description here. | 
 | 30 |  | 
 | 31 |    Inputs | 
 | 32 |    ====== | 
 | 33 |  | 
 | 34 |    There are 1) tuner inputs, 2) I2S inputs, 3) SCART inputs. You will have | 
 | 35 |    to select which tuner input to use and which SCART input to use. The | 
 | 36 |    selected tuner input, the selected SCART input and all I2S inputs go to | 
 | 37 |    the DSP (the tuner input first goes through the demodulator). | 
 | 38 |  | 
 | 39 |    The DSP handles things like volume, bass/treble, balance, and some chips | 
 | 40 |    have support for surround sound. It has several outputs: MAIN, AUX, I2S | 
 | 41 |    and SCART1/2. Each output can select which DSP input to use. So the MAIN | 
 | 42 |    output can select the tuner input while at the same time the SCART1 output | 
 | 43 |    uses the I2S input. | 
 | 44 |  | 
 | 45 |    Outputs | 
 | 46 |    ======= | 
 | 47 |  | 
 | 48 |    Most DSP outputs are also the outputs of the msp3400. However, the SCART | 
 | 49 |    outputs of the msp3400 can select which input to use: either the SCART1 or | 
 | 50 |    SCART2 output from the DSP, or the msp3400 SCART inputs, thus completely | 
 | 51 |    bypassing the DSP. | 
 | 52 |  | 
 | 53 |    Summary | 
 | 54 |    ======= | 
 | 55 |  | 
 | 56 |    So to specify a complete routing scheme for the msp3400 you will have to | 
 | 57 |    specify in the 'input' field of the v4l2_routing struct: | 
 | 58 |  | 
 | 59 |    1) which tuner input to use | 
 | 60 |    2) which SCART input to use | 
 | 61 |    3) which DSP input to use for each DSP output | 
 | 62 |  | 
 | 63 |    And in the 'output' field of the v4l2_routing struct you specify: | 
 | 64 |  | 
 | 65 |    1) which SCART input to use for each SCART output | 
 | 66 |  | 
 | 67 |    Depending on how the msp is wired to the other components you can | 
 | 68 |    ignore or mute certain inputs or outputs. | 
 | 69 |  | 
 | 70 |    Also, depending on the msp version only a subset of the inputs or | 
 | 71 |    outputs may be present. At the end of this header some tables are | 
 | 72 |    added containing a list of what is available for each msp version. | 
 | 73 |  */ | 
 | 74 |  | 
 | 75 | /* Inputs to the DSP unit: two independent selections have to be made: | 
 | 76 |    1) the tuner (SIF) input | 
 | 77 |    2) the SCART input | 
 | 78 |    Bits 0-2 are used for the SCART input select, bit 3 is used for the tuner | 
 | 79 |    input, bits 4-7 are reserved. | 
 | 80 |  */ | 
 | 81 |  | 
 | 82 | /* SCART input to DSP selection */ | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 83 | #define MSP_IN_SCART1  		0  /* Pin SC1_IN */ | 
 | 84 | #define MSP_IN_SCART2  		1  /* Pin SC2_IN */ | 
 | 85 | #define MSP_IN_SCART3  		2  /* Pin SC3_IN */ | 
 | 86 | #define MSP_IN_SCART4  		3  /* Pin SC4_IN */ | 
| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 87 | #define MSP_IN_MONO     	6  /* Pin MONO_IN */ | 
 | 88 | #define MSP_IN_MUTE     	7  /* Mute DSP input */ | 
 | 89 | #define MSP_SCART_TO_DSP(in) 	(in) | 
 | 90 | /* Tuner input to demodulator and DSP selection */ | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 91 | #define MSP_IN_TUNER1 		0  /* Analog Sound IF input pin ANA_IN1 */ | 
 | 92 | #define MSP_IN_TUNER2 		1  /* Analog Sound IF input pin ANA_IN2 */ | 
| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 93 | #define MSP_TUNER_TO_DSP(in) 	((in) << 3) | 
 | 94 |  | 
 | 95 | /* The msp has up to 5 DSP outputs, each output can independently select | 
 | 96 |    a DSP input. | 
 | 97 |  | 
 | 98 |    The DSP outputs are: loudspeaker output (aka MAIN), headphones output | 
 | 99 |    (aka AUX), SCART1 DA output, SCART2 DA output and an I2S output. | 
 | 100 |    There also is a quasi-peak detector output, but that is not used by | 
 | 101 |    this driver and is set to the same input as the loudspeaker output. | 
 | 102 |    Not all outputs are supported by all msp models. Setting the input | 
 | 103 |    of an unsupported output will be ignored by the driver. | 
 | 104 |  | 
 | 105 |    There are up to 16 DSP inputs to choose from, so each output is | 
 | 106 |    assigned 4 bits. | 
 | 107 |  | 
 | 108 |    Note: the 44x8G can mix two inputs and feed the result back to the | 
 | 109 |    DSP. This is currently not implemented. Also not implemented is the | 
 | 110 |    multi-channel capable I2S3 input of the 44x0G. If someone can demonstrate | 
 | 111 |    a need for one of those features then additional support can be added. */ | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 112 | #define MSP_DSP_IN_TUNER 	0  /* Tuner DSP input */ | 
 | 113 | #define MSP_DSP_IN_SCART 	2  /* SCART DSP input */ | 
 | 114 | #define MSP_DSP_IN_I2S1 	5  /* I2S1 DSP input */ | 
 | 115 | #define MSP_DSP_IN_I2S2 	6  /* I2S2 DSP input */ | 
 | 116 | #define MSP_DSP_IN_I2S3    	7  /* I2S3 DSP input */ | 
 | 117 | #define MSP_DSP_IN_MAIN_AVC 	11 /* MAIN AVC processed DSP input */ | 
 | 118 | #define MSP_DSP_IN_MAIN 	12 /* MAIN DSP input */ | 
 | 119 | #define MSP_DSP_IN_AUX 		13 /* AUX DSP input */ | 
| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 120 | #define MSP_DSP_TO_MAIN(in)   	((in) << 4) | 
 | 121 | #define MSP_DSP_TO_AUX(in)    	((in) << 8) | 
 | 122 | #define MSP_DSP_TO_SCART1(in) 	((in) << 12) | 
 | 123 | #define MSP_DSP_TO_SCART2(in) 	((in) << 16) | 
 | 124 | #define MSP_DSP_TO_I2S(in)    	((in) << 20) | 
 | 125 |  | 
 | 126 | /* Output SCART select: the SCART outputs can select which input | 
 | 127 |    to use. */ | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 128 | #define MSP_SC_IN_SCART1 	0  /* SCART1 input, bypassing the DSP */ | 
 | 129 | #define MSP_SC_IN_SCART2 	1  /* SCART2 input, bypassing the DSP */ | 
 | 130 | #define MSP_SC_IN_SCART3 	2  /* SCART3 input, bypassing the DSP */ | 
 | 131 | #define MSP_SC_IN_SCART4 	3  /* SCART4 input, bypassing the DSP */ | 
 | 132 | #define MSP_SC_IN_DSP_SCART1 	4  /* DSP SCART1 input */ | 
 | 133 | #define MSP_SC_IN_DSP_SCART2 	5  /* DSP SCART2 input */ | 
 | 134 | #define MSP_SC_IN_MONO 		6  /* MONO input, bypassing the DSP */ | 
 | 135 | #define MSP_SC_IN_MUTE 		7  /* MUTE output */ | 
 | 136 | #define MSP_SC_TO_SCART1(in)	(in) | 
 | 137 | #define MSP_SC_TO_SCART2(in)	((in) << 4) | 
| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 138 |  | 
 | 139 | /* Shortcut macros */ | 
 | 140 | #define MSP_INPUT(sc, t, main_aux_src, sc_i2s_src) \ | 
 | 141 | 	(MSP_SCART_TO_DSP(sc) | \ | 
 | 142 | 	 MSP_TUNER_TO_DSP(t) | \ | 
 | 143 | 	 MSP_DSP_TO_MAIN(main_aux_src) | \ | 
 | 144 | 	 MSP_DSP_TO_AUX(main_aux_src) | \ | 
 | 145 | 	 MSP_DSP_TO_SCART1(sc_i2s_src) | \ | 
 | 146 | 	 MSP_DSP_TO_SCART2(sc_i2s_src) | \ | 
 | 147 | 	 MSP_DSP_TO_I2S(sc_i2s_src)) | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 148 | #define MSP_INPUT_DEFAULT MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \ | 
 | 149 | 				    MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER) | 
| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 150 | #define MSP_OUTPUT(sc) \ | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 151 | 	(MSP_SC_TO_SCART1(sc) | \ | 
 | 152 | 	 MSP_SC_TO_SCART2(sc)) | 
| Hans Verkuil | 2474ed4 | 2006-03-19 12:35:57 -0300 | [diff] [blame] | 153 | /* This equals the RESET position of the msp3400 ACB register */ | 
| Hans Verkuil | 0715172 | 2006-04-01 18:03:23 -0300 | [diff] [blame] | 154 | #define MSP_OUTPUT_DEFAULT (MSP_SC_TO_SCART1(MSP_SC_IN_SCART3) | \ | 
 | 155 | 			    MSP_SC_TO_SCART2(MSP_SC_IN_DSP_SCART1)) | 
| Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 156 |  | 
 | 157 | /* Tuner inputs vs. msp version */ | 
 | 158 | /* Chip      TUNER_1   TUNER_2 | 
 | 159 |    ------------------------- | 
 | 160 |    msp34x0b  y         y | 
 | 161 |    msp34x0c  y         y | 
 | 162 |    msp34x0d  y         y | 
 | 163 |    msp34x5d  y         n | 
 | 164 |    msp34x7d  y         n | 
 | 165 |    msp34x0g  y         y | 
 | 166 |    msp34x1g  y         y | 
 | 167 |    msp34x2g  y         y | 
 | 168 |    msp34x5g  y         n | 
 | 169 |    msp34x7g  y         n | 
 | 170 |    msp44x0g  y         y | 
 | 171 |    msp44x8g  y         y | 
 | 172 |  */ | 
 | 173 |  | 
 | 174 | /* SCART inputs vs. msp version */ | 
 | 175 | /* Chip      SC1 SC2 SC3 SC4 | 
 | 176 |    ------------------------- | 
 | 177 |    msp34x0b  y   y   y   n | 
 | 178 |    msp34x0c  y   y   y   n | 
 | 179 |    msp34x0d  y   y   y   y | 
 | 180 |    msp34x5d  y   y   n   n | 
 | 181 |    msp34x7d  y   n   n   n | 
 | 182 |    msp34x0g  y   y   y   y | 
 | 183 |    msp34x1g  y   y   y   y | 
 | 184 |    msp34x2g  y   y   y   y | 
 | 185 |    msp34x5g  y   y   n   n | 
 | 186 |    msp34x7g  y   n   n   n | 
 | 187 |    msp44x0g  y   y   y   y | 
 | 188 |    msp44x8g  y   y   y   y | 
 | 189 |  */ | 
 | 190 |  | 
 | 191 | /* DSP inputs vs. msp version (tuner and SCART inputs are always available) */ | 
 | 192 | /* Chip      I2S1 I2S2 I2S3 MAIN_AVC MAIN AUX | 
 | 193 |    ------------------------------------------ | 
 | 194 |    msp34x0b  y    n    n    n        n    n | 
 | 195 |    msp34x0c  y    y    n    n        n    n | 
 | 196 |    msp34x0d  y    y    n    n        n    n | 
 | 197 |    msp34x5d  y    y    n    n        n    n | 
 | 198 |    msp34x7d  n    n    n    n        n    n | 
 | 199 |    msp34x0g  y    y    n    n        n    n | 
 | 200 |    msp34x1g  y    y    n    n        n    n | 
 | 201 |    msp34x2g  y    y    n    y        y    y | 
 | 202 |    msp34x5g  y    y    n    n        n    n | 
 | 203 |    msp34x7g  n    n    n    n        n    n | 
 | 204 |    msp44x0g  y    y    y    y        y    y | 
 | 205 |    msp44x8g  y    y    y    n        n    n | 
 | 206 |  */ | 
 | 207 |  | 
 | 208 | /* DSP outputs vs. msp version */ | 
 | 209 | /* Chip      MAIN AUX SCART1 SCART2 I2S | 
 | 210 |    ------------------------------------ | 
 | 211 |    msp34x0b  y    y   y      n      y | 
 | 212 |    msp34x0c  y    y   y      n      y | 
 | 213 |    msp34x0d  y    y   y      y      y | 
 | 214 |    msp34x5d  y    n   y      n      y | 
 | 215 |    msp34x7d  y    n   y      n      n | 
 | 216 |    msp34x0g  y    y   y      y      y | 
 | 217 |    msp34x1g  y    y   y      y      y | 
 | 218 |    msp34x2g  y    y   y      y      y | 
 | 219 |    msp34x5g  y    n   y      n      y | 
 | 220 |    msp34x7g  y    n   y      n      n | 
 | 221 |    msp44x0g  y    y   y      y      y | 
 | 222 |    msp44x8g  y    y   y      y      y | 
 | 223 |  */ | 
 | 224 |  | 
 | 225 | #endif /* MSP3400_H */ | 
 | 226 |  |