Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (3581): Add new media/msp3400.h header containing the routing macros

Moved msp3400.h to msp3400-driver.h.
Created media/msp3400.h with the new routing defines and lots of comments.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
49965a80 de533ccf

+228 -6
-1
drivers/media/video/em28xx/em28xx-cards.c
··· 31 31 #include <media/audiochip.h> 32 32 #include <media/tveeprom.h> 33 33 #include <media/v4l2-common.h> 34 - #include "msp3400.h" 35 34 36 35 #include "em28xx.h" 37 36
+2 -1
drivers/media/video/msp3400-driver.c
··· 54 54 #include <linux/videodev2.h> 55 55 #include <media/v4l2-common.h> 56 56 #include <media/tvaudio.h> 57 + #include <media/msp3400.h> 57 58 #include <linux/kthread.h> 58 59 #include <linux/suspend.h> 59 - #include "msp3400.h" 60 + #include "msp3400-driver.h" 60 61 61 62 /* ---------------------------------------------------------------------- */ 62 63
+2 -1
drivers/media/video/msp3400-kthreads.c
··· 26 26 #include <linux/videodev.h> 27 27 #include <linux/videodev2.h> 28 28 #include <media/v4l2-common.h> 29 + #include <media/msp3400.h> 29 30 #include <linux/kthread.h> 30 31 #include <linux/suspend.h> 31 - #include "msp3400.h" 32 + #include "msp3400-driver.h" 32 33 33 34 /* this one uses the automatic sound standard detection of newer msp34xx 34 35 chip versions */
+3 -3
drivers/media/video/msp3400.h drivers/media/video/msp3400-driver.h
··· 1 1 /* 2 2 */ 3 3 4 - #ifndef MSP3400_H 5 - #define MSP3400_H 4 + #ifndef MSP3400_DRIVER_H 5 + #define MSP3400_DRIVER_H 6 6 7 7 /* ---------------------------------------------------------------------- */ 8 8 ··· 110 110 void msp3400c_set_mode(struct i2c_client *client, int mode); 111 111 void msp3400c_set_carrier(struct i2c_client *client, int cdo1, int cdo2); 112 112 113 - #endif /* MSP3400_H */ 113 + #endif /* MSP3400_DRIVER_H */
+221
include/media/msp3400.h
··· 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 */ 83 + #define MSP_IN_SCART_1 0 /* Pin SC1_IN */ 84 + #define MSP_IN_SCART_2 1 /* Pin SC2_IN */ 85 + #define MSP_IN_SCART_3 2 /* Pin SC3_IN */ 86 + #define MSP_IN_SCART_4 3 /* Pin SC4_IN */ 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 */ 91 + #define MSP_IN_TUNER_1 0 /* Analog Sound IF input pin ANA_IN1 */ 92 + #define MSP_IN_TUNER_2 1 /* Analog Sound IF input pin ANA_IN2 */ 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. */ 112 + #define MSP_DSP_OUT_TUNER 0 /* Tuner output */ 113 + #define MSP_DSP_OUT_SCART 2 /* SCART output */ 114 + #define MSP_DSP_OUT_I2S1 5 /* I2S1 output */ 115 + #define MSP_DSP_OUT_I2S2 6 /* I2S2 output */ 116 + #define MSP_DSP_OUT_I2S3 7 /* I2S3 output */ 117 + #define MSP_DSP_OUT_MAIN_AVC 11 /* MAIN AVC processed output */ 118 + #define MSP_DSP_OUT_MAIN 12 /* MAIN output */ 119 + #define MSP_DSP_OUT_AUX 13 /* AUX output */ 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. */ 128 + #define MSP_OUT_SCART1 0 /* SCART1 input, bypassing the DSP */ 129 + #define MSP_OUT_SCART2 1 /* SCART2 input, bypassing the DSP */ 130 + #define MSP_OUT_SCART3 2 /* SCART3 input, bypassing the DSP */ 131 + #define MSP_OUT_SCART4 3 /* SCART4 input, bypassing the DSP */ 132 + #define MSP_OUT_SCART1_DA 4 /* DSP SCART1 output */ 133 + #define MSP_OUT_SCART2_DA 5 /* DSP SCART2 output */ 134 + #define MSP_OUT_MONO 6 /* MONO input, bypassing the DSP */ 135 + #define MSP_OUT_MUTE 7 /* MUTE output */ 136 + #define MSP_OUT_TO_SCART1(in) (in) 137 + #define MSP_OUT_TO_SCART2(in) ((in) << 4) 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)) 148 + #define MSP_OUTPUT(sc) \ 149 + (MSP_OUT_TO_SCART1(sc) | \ 150 + MSP_OUT_TO_SCART2(sc)) 151 + 152 + /* Tuner inputs vs. msp version */ 153 + /* Chip TUNER_1 TUNER_2 154 + ------------------------- 155 + msp34x0b y y 156 + msp34x0c y y 157 + msp34x0d y y 158 + msp34x5d y n 159 + msp34x7d y n 160 + msp34x0g y y 161 + msp34x1g y y 162 + msp34x2g y y 163 + msp34x5g y n 164 + msp34x7g y n 165 + msp44x0g y y 166 + msp44x8g y y 167 + */ 168 + 169 + /* SCART inputs vs. msp version */ 170 + /* Chip SC1 SC2 SC3 SC4 171 + ------------------------- 172 + msp34x0b y y y n 173 + msp34x0c y y y n 174 + msp34x0d y y y y 175 + msp34x5d y y n n 176 + msp34x7d y n n n 177 + msp34x0g y y y y 178 + msp34x1g y y y y 179 + msp34x2g y y y y 180 + msp34x5g y y n n 181 + msp34x7g y n n n 182 + msp44x0g y y y y 183 + msp44x8g y y y y 184 + */ 185 + 186 + /* DSP inputs vs. msp version (tuner and SCART inputs are always available) */ 187 + /* Chip I2S1 I2S2 I2S3 MAIN_AVC MAIN AUX 188 + ------------------------------------------ 189 + msp34x0b y n n n n n 190 + msp34x0c y y n n n n 191 + msp34x0d y y n n n n 192 + msp34x5d y y n n n n 193 + msp34x7d n n n n n n 194 + msp34x0g y y n n n n 195 + msp34x1g y y n n n n 196 + msp34x2g y y n y y y 197 + msp34x5g y y n n n n 198 + msp34x7g n n n n n n 199 + msp44x0g y y y y y y 200 + msp44x8g y y y n n n 201 + */ 202 + 203 + /* DSP outputs vs. msp version */ 204 + /* Chip MAIN AUX SCART1 SCART2 I2S 205 + ------------------------------------ 206 + msp34x0b y y y n y 207 + msp34x0c y y y n y 208 + msp34x0d y y y y y 209 + msp34x5d y n y n y 210 + msp34x7d y n y n n 211 + msp34x0g y y y y y 212 + msp34x1g y y y y y 213 + msp34x2g y y y y y 214 + msp34x5g y n y n y 215 + msp34x7g y n y n n 216 + msp44x0g y y y y y 217 + msp44x8g y y y y y 218 + */ 219 + 220 + #endif /* MSP3400_H */ 221 +