xref: /openbmc/linux/include/media/drv-intf/msp3400.h (revision 74ba9207)
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