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 |
Hans Verkuil | 5325b42 | 2009-04-02 11:26:22 -0300 | [diff] [blame] | 57 | specify in the 'input' arg of the s_routing function: |
Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 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 | |
Hans Verkuil | 5325b42 | 2009-04-02 11:26:22 -0300 | [diff] [blame] | 63 | And in the 'output' arg of the s_routing function you specify: |
Hans Verkuil | 49965a8 | 2006-03-19 08:45:38 -0300 | [diff] [blame] | 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 */ |