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