diff options
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 1 | ||||
-rw-r--r-- | drivers/media/video/msp3400-driver.c | 3 | ||||
-rw-r--r-- | drivers/media/video/msp3400-driver.h (renamed from drivers/media/video/msp3400.h) | 6 | ||||
-rw-r--r-- | drivers/media/video/msp3400-kthreads.c | 3 | ||||
-rw-r--r-- | include/media/msp3400.h | 221 |
5 files changed, 228 insertions, 6 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index 4e22fc4889e1..2d68a27417eb 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <media/audiochip.h> | 31 | #include <media/audiochip.h> |
32 | #include <media/tveeprom.h> | 32 | #include <media/tveeprom.h> |
33 | #include <media/v4l2-common.h> | 33 | #include <media/v4l2-common.h> |
34 | #include "msp3400.h" | ||
35 | 34 | ||
36 | #include "em28xx.h" | 35 | #include "em28xx.h" |
37 | 36 | ||
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c index 9a47ba22c133..04250284ff1e 100644 --- a/drivers/media/video/msp3400-driver.c +++ b/drivers/media/video/msp3400-driver.c | |||
@@ -54,9 +54,10 @@ | |||
54 | #include <linux/videodev2.h> | 54 | #include <linux/videodev2.h> |
55 | #include <media/v4l2-common.h> | 55 | #include <media/v4l2-common.h> |
56 | #include <media/tvaudio.h> | 56 | #include <media/tvaudio.h> |
57 | #include <media/msp3400.h> | ||
57 | #include <linux/kthread.h> | 58 | #include <linux/kthread.h> |
58 | #include <linux/suspend.h> | 59 | #include <linux/suspend.h> |
59 | #include "msp3400.h" | 60 | #include "msp3400-driver.h" |
60 | 61 | ||
61 | /* ---------------------------------------------------------------------- */ | 62 | /* ---------------------------------------------------------------------- */ |
62 | 63 | ||
diff --git a/drivers/media/video/msp3400.h b/drivers/media/video/msp3400-driver.h index 25482046fc68..04821ebfe04a 100644 --- a/drivers/media/video/msp3400.h +++ b/drivers/media/video/msp3400-driver.h | |||
@@ -1,8 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | */ | 2 | */ |
3 | 3 | ||
4 | #ifndef MSP3400_H | 4 | #ifndef MSP3400_DRIVER_H |
5 | #define MSP3400_H | 5 | #define MSP3400_DRIVER_H |
6 | 6 | ||
7 | /* ---------------------------------------------------------------------- */ | 7 | /* ---------------------------------------------------------------------- */ |
8 | 8 | ||
@@ -110,4 +110,4 @@ int msp34xxg_thread(void *data); | |||
110 | void msp3400c_set_mode(struct i2c_client *client, int mode); | 110 | void msp3400c_set_mode(struct i2c_client *client, int mode); |
111 | void msp3400c_set_carrier(struct i2c_client *client, int cdo1, int cdo2); | 111 | void msp3400c_set_carrier(struct i2c_client *client, int cdo1, int cdo2); |
112 | 112 | ||
113 | #endif /* MSP3400_H */ | 113 | #endif /* MSP3400_DRIVER_H */ |
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c index 88b216cc49d7..9ee8dc216d7f 100644 --- a/drivers/media/video/msp3400-kthreads.c +++ b/drivers/media/video/msp3400-kthreads.c | |||
@@ -26,9 +26,10 @@ | |||
26 | #include <linux/videodev.h> | 26 | #include <linux/videodev.h> |
27 | #include <linux/videodev2.h> | 27 | #include <linux/videodev2.h> |
28 | #include <media/v4l2-common.h> | 28 | #include <media/v4l2-common.h> |
29 | #include <media/msp3400.h> | ||
29 | #include <linux/kthread.h> | 30 | #include <linux/kthread.h> |
30 | #include <linux/suspend.h> | 31 | #include <linux/suspend.h> |
31 | #include "msp3400.h" | 32 | #include "msp3400-driver.h" |
32 | 33 | ||
33 | /* this one uses the automatic sound standard detection of newer msp34xx | 34 | /* this one uses the automatic sound standard detection of newer msp34xx |
34 | chip versions */ | 35 | chip versions */ |
diff --git a/include/media/msp3400.h b/include/media/msp3400.h new file mode 100644 index 000000000000..26e26585273f --- /dev/null +++ b/include/media/msp3400.h | |||
@@ -0,0 +1,221 @@ | |||
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 | |||