diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
commit | fcc9d2e5a6c89d22b8b773a64fb4ad21ac318446 (patch) | |
tree | a57612d1888735a2ec7972891b68c1ac5ec8faea /drivers/media/video/saa7134/saa7134.h | |
parent | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff) |
Diffstat (limited to 'drivers/media/video/saa7134/saa7134.h')
-rw-r--r-- | drivers/media/video/saa7134/saa7134.h | 852 |
1 files changed, 852 insertions, 0 deletions
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h new file mode 100644 index 00000000000..bc8d6bba8ee --- /dev/null +++ b/drivers/media/video/saa7134/saa7134.h | |||
@@ -0,0 +1,852 @@ | |||
1 | /* | ||
2 | * | ||
3 | * v4l2 device driver for philips saa7134 based TV cards | ||
4 | * | ||
5 | * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | */ | ||
21 | |||
22 | #define SAA7134_VERSION "0, 2, 17" | ||
23 | |||
24 | #include <linux/pci.h> | ||
25 | #include <linux/i2c.h> | ||
26 | #include <linux/videodev2.h> | ||
27 | #include <linux/kdev_t.h> | ||
28 | #include <linux/input.h> | ||
29 | #include <linux/notifier.h> | ||
30 | #include <linux/delay.h> | ||
31 | #include <linux/mutex.h> | ||
32 | |||
33 | #include <asm/io.h> | ||
34 | |||
35 | #include <media/v4l2-common.h> | ||
36 | #include <media/v4l2-ioctl.h> | ||
37 | #include <media/v4l2-device.h> | ||
38 | #include <media/tuner.h> | ||
39 | #include <media/rc-core.h> | ||
40 | #include <media/ir-kbd-i2c.h> | ||
41 | #include <media/videobuf-dma-sg.h> | ||
42 | #include <sound/core.h> | ||
43 | #include <sound/pcm.h> | ||
44 | #if defined(CONFIG_VIDEO_SAA7134_DVB) || defined(CONFIG_VIDEO_SAA7134_DVB_MODULE) | ||
45 | #include <media/videobuf-dvb.h> | ||
46 | #endif | ||
47 | |||
48 | #define UNSET (-1U) | ||
49 | |||
50 | /* ----------------------------------------------------------- */ | ||
51 | /* enums */ | ||
52 | |||
53 | enum saa7134_tvaudio_mode { | ||
54 | TVAUDIO_FM_MONO = 1, | ||
55 | TVAUDIO_FM_BG_STEREO = 2, | ||
56 | TVAUDIO_FM_SAT_STEREO = 3, | ||
57 | TVAUDIO_FM_K_STEREO = 4, | ||
58 | TVAUDIO_NICAM_AM = 5, | ||
59 | TVAUDIO_NICAM_FM = 6, | ||
60 | }; | ||
61 | |||
62 | enum saa7134_audio_in { | ||
63 | TV = 1, | ||
64 | LINE1 = 2, | ||
65 | LINE2 = 3, | ||
66 | LINE2_LEFT, | ||
67 | }; | ||
68 | |||
69 | enum saa7134_video_out { | ||
70 | CCIR656 = 1, | ||
71 | }; | ||
72 | |||
73 | /* ----------------------------------------------------------- */ | ||
74 | /* static data */ | ||
75 | |||
76 | struct saa7134_tvnorm { | ||
77 | char *name; | ||
78 | v4l2_std_id id; | ||
79 | |||
80 | /* video decoder */ | ||
81 | unsigned int sync_control; | ||
82 | unsigned int luma_control; | ||
83 | unsigned int chroma_ctrl1; | ||
84 | unsigned int chroma_gain; | ||
85 | unsigned int chroma_ctrl2; | ||
86 | unsigned int vgate_misc; | ||
87 | |||
88 | /* video scaler */ | ||
89 | unsigned int h_start; | ||
90 | unsigned int h_stop; | ||
91 | unsigned int video_v_start; | ||
92 | unsigned int video_v_stop; | ||
93 | unsigned int vbi_v_start_0; | ||
94 | unsigned int vbi_v_stop_0; | ||
95 | unsigned int src_timing; | ||
96 | unsigned int vbi_v_start_1; | ||
97 | }; | ||
98 | |||
99 | struct saa7134_tvaudio { | ||
100 | char *name; | ||
101 | v4l2_std_id std; | ||
102 | enum saa7134_tvaudio_mode mode; | ||
103 | int carr1; | ||
104 | int carr2; | ||
105 | }; | ||
106 | |||
107 | struct saa7134_format { | ||
108 | char *name; | ||
109 | unsigned int fourcc; | ||
110 | unsigned int depth; | ||
111 | unsigned int pm; | ||
112 | unsigned int vshift; /* vertical downsampling (for planar yuv) */ | ||
113 | unsigned int hshift; /* horizontal downsampling (for planar yuv) */ | ||
114 | unsigned int bswap:1; | ||
115 | unsigned int wswap:1; | ||
116 | unsigned int yuv:1; | ||
117 | unsigned int planar:1; | ||
118 | unsigned int uvswap:1; | ||
119 | }; | ||
120 | |||
121 | struct saa7134_card_ir { | ||
122 | struct rc_dev *dev; | ||
123 | |||
124 | char name[32]; | ||
125 | char phys[32]; | ||
126 | unsigned users; | ||
127 | |||
128 | u32 polling; | ||
129 | u32 last_gpio; | ||
130 | u32 mask_keycode, mask_keydown, mask_keyup; | ||
131 | |||
132 | bool running; | ||
133 | bool active; | ||
134 | |||
135 | struct timer_list timer; | ||
136 | |||
137 | /* IR core raw decoding */ | ||
138 | u32 raw_decode; | ||
139 | }; | ||
140 | |||
141 | /* ----------------------------------------------------------- */ | ||
142 | /* card configuration */ | ||
143 | |||
144 | #define SAA7134_BOARD_NOAUTO UNSET | ||
145 | #define SAA7134_BOARD_UNKNOWN 0 | ||
146 | #define SAA7134_BOARD_PROTEUS_PRO 1 | ||
147 | #define SAA7134_BOARD_FLYVIDEO3000 2 | ||
148 | #define SAA7134_BOARD_FLYVIDEO2000 3 | ||
149 | #define SAA7134_BOARD_EMPRESS 4 | ||
150 | #define SAA7134_BOARD_MONSTERTV 5 | ||
151 | #define SAA7134_BOARD_MD9717 6 | ||
152 | #define SAA7134_BOARD_TVSTATION_RDS 7 | ||
153 | #define SAA7134_BOARD_CINERGY400 8 | ||
154 | #define SAA7134_BOARD_MD5044 9 | ||
155 | #define SAA7134_BOARD_KWORLD 10 | ||
156 | #define SAA7134_BOARD_CINERGY600 11 | ||
157 | #define SAA7134_BOARD_MD7134 12 | ||
158 | #define SAA7134_BOARD_TYPHOON_90031 13 | ||
159 | #define SAA7134_BOARD_ELSA 14 | ||
160 | #define SAA7134_BOARD_ELSA_500TV 15 | ||
161 | #define SAA7134_BOARD_ASUSTeK_TVFM7134 16 | ||
162 | #define SAA7134_BOARD_VA1000POWER 17 | ||
163 | #define SAA7134_BOARD_BMK_MPEX_NOTUNER 18 | ||
164 | #define SAA7134_BOARD_VIDEOMATE_TV 19 | ||
165 | #define SAA7134_BOARD_CRONOS_PLUS 20 | ||
166 | #define SAA7134_BOARD_10MOONSTVMASTER 21 | ||
167 | #define SAA7134_BOARD_MD2819 22 | ||
168 | #define SAA7134_BOARD_BMK_MPEX_TUNER 23 | ||
169 | #define SAA7134_BOARD_TVSTATION_DVR 24 | ||
170 | #define SAA7134_BOARD_ASUSTEK_TVFM7133 25 | ||
171 | #define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26 | ||
172 | #define SAA7134_BOARD_MANLI_MTV002 27 | ||
173 | #define SAA7134_BOARD_MANLI_MTV001 28 | ||
174 | #define SAA7134_BOARD_TG3000TV 29 | ||
175 | #define SAA7134_BOARD_ECS_TVP3XP 30 | ||
176 | #define SAA7134_BOARD_ECS_TVP3XP_4CB5 31 | ||
177 | #define SAA7134_BOARD_AVACSSMARTTV 32 | ||
178 | #define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33 | ||
179 | #define SAA7134_BOARD_NOVAC_PRIMETV7133 34 | ||
180 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35 | ||
181 | #define SAA7134_BOARD_UPMOST_PURPLE_TV 36 | ||
182 | #define SAA7134_BOARD_ITEMS_MTV005 37 | ||
183 | #define SAA7134_BOARD_CINERGY200 38 | ||
184 | #define SAA7134_BOARD_FLYTVPLATINUM_MINI 39 | ||
185 | #define SAA7134_BOARD_VIDEOMATE_TV_PVR 40 | ||
186 | #define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41 | ||
187 | #define SAA7134_BOARD_SABRENT_SBTTVFM 42 | ||
188 | #define SAA7134_BOARD_ZOLID_XPERT_TV7134 43 | ||
189 | #define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44 | ||
190 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45 | ||
191 | #define SAA7134_BOARD_AVERMEDIA_CARDBUS 46 | ||
192 | #define SAA7134_BOARD_CINERGY400_CARDBUS 47 | ||
193 | #define SAA7134_BOARD_CINERGY600_MK3 48 | ||
194 | #define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49 | ||
195 | #define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50 | ||
196 | #define SAA7134_BOARD_PROVIDEO_PV952 51 | ||
197 | #define SAA7134_BOARD_AVERMEDIA_305 52 | ||
198 | #define SAA7134_BOARD_ASUSTeK_TVFM7135 53 | ||
199 | #define SAA7134_BOARD_FLYTVPLATINUM_FM 54 | ||
200 | #define SAA7134_BOARD_FLYDVBTDUO 55 | ||
201 | #define SAA7134_BOARD_AVERMEDIA_307 56 | ||
202 | #define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57 | ||
203 | #define SAA7134_BOARD_ADS_INSTANT_TV 58 | ||
204 | #define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59 | ||
205 | #define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60 | ||
206 | #define SAA7134_BOARD_PHILIPS_TOUGH 61 | ||
207 | #define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62 | ||
208 | #define SAA7134_BOARD_KWORLD_XPERT 63 | ||
209 | #define SAA7134_BOARD_FLYTV_DIGIMATRIX 64 | ||
210 | #define SAA7134_BOARD_KWORLD_TERMINATOR 65 | ||
211 | #define SAA7134_BOARD_YUAN_TUN900 66 | ||
212 | #define SAA7134_BOARD_BEHOLD_409FM 67 | ||
213 | #define SAA7134_BOARD_GOTVIEW_7135 68 | ||
214 | #define SAA7134_BOARD_PHILIPS_EUROPA 69 | ||
215 | #define SAA7134_BOARD_VIDEOMATE_DVBT_300 70 | ||
216 | #define SAA7134_BOARD_VIDEOMATE_DVBT_200 71 | ||
217 | #define SAA7134_BOARD_RTD_VFG7350 72 | ||
218 | #define SAA7134_BOARD_RTD_VFG7330 73 | ||
219 | #define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74 | ||
220 | #define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75 | ||
221 | #define SAA7134_BOARD_MONSTERTV_MOBILE 76 | ||
222 | #define SAA7134_BOARD_PINNACLE_PCTV_110i 77 | ||
223 | #define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78 | ||
224 | #define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS 79 | ||
225 | #define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80 | ||
226 | #define SAA7134_BOARD_PHILIPS_TIGER 81 | ||
227 | #define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS 82 | ||
228 | #define SAA7134_BOARD_CINERGY250PCI 83 | ||
229 | #define SAA7134_BOARD_FLYDVB_TRIO 84 | ||
230 | #define SAA7134_BOARD_AVERMEDIA_777 85 | ||
231 | #define SAA7134_BOARD_FLYDVBT_LR301 86 | ||
232 | #define SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331 87 | ||
233 | #define SAA7134_BOARD_TEVION_DVBT_220RF 88 | ||
234 | #define SAA7134_BOARD_ELSA_700TV 89 | ||
235 | #define SAA7134_BOARD_KWORLD_ATSC110 90 | ||
236 | #define SAA7134_BOARD_AVERMEDIA_A169_B 91 | ||
237 | #define SAA7134_BOARD_AVERMEDIA_A169_B1 92 | ||
238 | #define SAA7134_BOARD_MD7134_BRIDGE_2 93 | ||
239 | #define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94 | ||
240 | #define SAA7134_BOARD_FLYVIDEO3000_NTSC 95 | ||
241 | #define SAA7134_BOARD_MEDION_MD8800_QUADRO 96 | ||
242 | #define SAA7134_BOARD_FLYDVBS_LR300 97 | ||
243 | #define SAA7134_BOARD_PROTEUS_2309 98 | ||
244 | #define SAA7134_BOARD_AVERMEDIA_A16AR 99 | ||
245 | #define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100 | ||
246 | #define SAA7134_BOARD_PINNACLE_PCTV_310i 101 | ||
247 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_507 102 | ||
248 | #define SAA7134_BOARD_VIDEOMATE_DVBT_200A 103 | ||
249 | #define SAA7134_BOARD_HAUPPAUGE_HVR1110 104 | ||
250 | #define SAA7134_BOARD_CINERGY_HT_PCMCIA 105 | ||
251 | #define SAA7134_BOARD_ENCORE_ENLTV 106 | ||
252 | #define SAA7134_BOARD_ENCORE_ENLTV_FM 107 | ||
253 | #define SAA7134_BOARD_CINERGY_HT_PCI 108 | ||
254 | #define SAA7134_BOARD_PHILIPS_TIGER_S 109 | ||
255 | #define SAA7134_BOARD_AVERMEDIA_M102 110 | ||
256 | #define SAA7134_BOARD_ASUS_P7131_4871 111 | ||
257 | #define SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA 112 | ||
258 | #define SAA7134_BOARD_ECS_TVP3XP_4CB6 113 | ||
259 | #define SAA7134_BOARD_KWORLD_DVBT_210 114 | ||
260 | #define SAA7134_BOARD_SABRENT_TV_PCB05 115 | ||
261 | #define SAA7134_BOARD_10MOONSTVMASTER3 116 | ||
262 | #define SAA7134_BOARD_AVERMEDIA_SUPER_007 117 | ||
263 | #define SAA7134_BOARD_BEHOLD_401 118 | ||
264 | #define SAA7134_BOARD_BEHOLD_403 119 | ||
265 | #define SAA7134_BOARD_BEHOLD_403FM 120 | ||
266 | #define SAA7134_BOARD_BEHOLD_405 121 | ||
267 | #define SAA7134_BOARD_BEHOLD_405FM 122 | ||
268 | #define SAA7134_BOARD_BEHOLD_407 123 | ||
269 | #define SAA7134_BOARD_BEHOLD_407FM 124 | ||
270 | #define SAA7134_BOARD_BEHOLD_409 125 | ||
271 | #define SAA7134_BOARD_BEHOLD_505FM 126 | ||
272 | #define SAA7134_BOARD_BEHOLD_507_9FM 127 | ||
273 | #define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128 | ||
274 | #define SAA7134_BOARD_BEHOLD_607FM_MK3 129 | ||
275 | #define SAA7134_BOARD_BEHOLD_M6 130 | ||
276 | #define SAA7134_BOARD_TWINHAN_DTV_DVB_3056 131 | ||
277 | #define SAA7134_BOARD_GENIUS_TVGO_A11MCE 132 | ||
278 | #define SAA7134_BOARD_PHILIPS_SNAKE 133 | ||
279 | #define SAA7134_BOARD_CREATIX_CTX953 134 | ||
280 | #define SAA7134_BOARD_MSI_TVANYWHERE_AD11 135 | ||
281 | #define SAA7134_BOARD_AVERMEDIA_CARDBUS_506 136 | ||
282 | #define SAA7134_BOARD_AVERMEDIA_A16D 137 | ||
283 | #define SAA7134_BOARD_AVERMEDIA_M115 138 | ||
284 | #define SAA7134_BOARD_VIDEOMATE_T750 139 | ||
285 | #define SAA7134_BOARD_AVERMEDIA_A700_PRO 140 | ||
286 | #define SAA7134_BOARD_AVERMEDIA_A700_HYBRID 141 | ||
287 | #define SAA7134_BOARD_BEHOLD_H6 142 | ||
288 | #define SAA7134_BOARD_BEHOLD_M63 143 | ||
289 | #define SAA7134_BOARD_BEHOLD_M6_EXTRA 144 | ||
290 | #define SAA7134_BOARD_AVERMEDIA_M103 145 | ||
291 | #define SAA7134_BOARD_ASUSTeK_P7131_ANALOG 146 | ||
292 | #define SAA7134_BOARD_ASUSTeK_TIGER_3IN1 147 | ||
293 | #define SAA7134_BOARD_ENCORE_ENLTV_FM53 148 | ||
294 | #define SAA7134_BOARD_AVERMEDIA_M135A 149 | ||
295 | #define SAA7134_BOARD_REAL_ANGEL_220 150 | ||
296 | #define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI 151 | ||
297 | #define SAA7134_BOARD_ASUSTeK_TIGER 152 | ||
298 | #define SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG 153 | ||
299 | #define SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS 154 | ||
300 | #define SAA7134_BOARD_HAUPPAUGE_HVR1150 155 | ||
301 | #define SAA7134_BOARD_HAUPPAUGE_HVR1120 156 | ||
302 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_507UA 157 | ||
303 | #define SAA7134_BOARD_AVERMEDIA_CARDBUS_501 158 | ||
304 | #define SAA7134_BOARD_BEHOLD_505RDS_MK5 159 | ||
305 | #define SAA7134_BOARD_BEHOLD_507RDS_MK3 160 | ||
306 | #define SAA7134_BOARD_BEHOLD_507RDS_MK5 161 | ||
307 | #define SAA7134_BOARD_BEHOLD_607FM_MK5 162 | ||
308 | #define SAA7134_BOARD_BEHOLD_609FM_MK3 163 | ||
309 | #define SAA7134_BOARD_BEHOLD_609FM_MK5 164 | ||
310 | #define SAA7134_BOARD_BEHOLD_607RDS_MK3 165 | ||
311 | #define SAA7134_BOARD_BEHOLD_607RDS_MK5 166 | ||
312 | #define SAA7134_BOARD_BEHOLD_609RDS_MK3 167 | ||
313 | #define SAA7134_BOARD_BEHOLD_609RDS_MK5 168 | ||
314 | #define SAA7134_BOARD_VIDEOMATE_S350 169 | ||
315 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_505 170 | ||
316 | #define SAA7134_BOARD_BEHOLD_X7 171 | ||
317 | #define SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM 172 | ||
318 | #define SAA7134_BOARD_ZOLID_HYBRID_PCI 173 | ||
319 | #define SAA7134_BOARD_ASUS_EUROPA_HYBRID 174 | ||
320 | #define SAA7134_BOARD_LEADTEK_WINFAST_DTV1000S 175 | ||
321 | #define SAA7134_BOARD_BEHOLD_505RDS_MK3 176 | ||
322 | #define SAA7134_BOARD_HAWELL_HW_404M7 177 | ||
323 | #define SAA7134_BOARD_BEHOLD_H7 178 | ||
324 | #define SAA7134_BOARD_BEHOLD_A7 179 | ||
325 | #define SAA7134_BOARD_AVERMEDIA_M733A 180 | ||
326 | #define SAA7134_BOARD_TECHNOTREND_BUDGET_T3000 181 | ||
327 | #define SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG 182 | ||
328 | #define SAA7134_BOARD_VIDEOMATE_M1F 183 | ||
329 | #define SAA7134_BOARD_ENCORE_ENLTV_FM3 184 | ||
330 | #define SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2 185 | ||
331 | #define SAA7134_BOARD_BEHOLD_501 186 | ||
332 | #define SAA7134_BOARD_BEHOLD_503FM 187 | ||
333 | |||
334 | #define SAA7134_MAXBOARDS 32 | ||
335 | #define SAA7134_INPUT_MAX 8 | ||
336 | |||
337 | /* ----------------------------------------------------------- */ | ||
338 | /* Since we support 2 remote types, lets tell them apart */ | ||
339 | |||
340 | #define SAA7134_REMOTE_GPIO 1 | ||
341 | #define SAA7134_REMOTE_I2C 2 | ||
342 | |||
343 | /* ----------------------------------------------------------- */ | ||
344 | /* Video Output Port Register Initialization Options */ | ||
345 | |||
346 | #define SET_T_CODE_POLARITY_NON_INVERTED (1 << 0) | ||
347 | #define SET_CLOCK_NOT_DELAYED (1 << 1) | ||
348 | #define SET_CLOCK_INVERTED (1 << 2) | ||
349 | #define SET_VSYNC_OFF (1 << 3) | ||
350 | |||
351 | struct saa7134_input { | ||
352 | char *name; | ||
353 | unsigned int vmux; | ||
354 | enum saa7134_audio_in amux; | ||
355 | unsigned int gpio; | ||
356 | unsigned int tv:1; | ||
357 | }; | ||
358 | |||
359 | enum saa7134_mpeg_type { | ||
360 | SAA7134_MPEG_UNUSED, | ||
361 | SAA7134_MPEG_EMPRESS, | ||
362 | SAA7134_MPEG_DVB, | ||
363 | }; | ||
364 | |||
365 | enum saa7134_mpeg_ts_type { | ||
366 | SAA7134_MPEG_TS_PARALLEL = 0, | ||
367 | SAA7134_MPEG_TS_SERIAL, | ||
368 | }; | ||
369 | |||
370 | struct saa7134_board { | ||
371 | char *name; | ||
372 | unsigned int audio_clock; | ||
373 | |||
374 | /* input switching */ | ||
375 | unsigned int gpiomask; | ||
376 | struct saa7134_input inputs[SAA7134_INPUT_MAX]; | ||
377 | struct saa7134_input radio; | ||
378 | struct saa7134_input mute; | ||
379 | |||
380 | /* i2c chip info */ | ||
381 | unsigned int tuner_type; | ||
382 | unsigned int radio_type; | ||
383 | unsigned char tuner_addr; | ||
384 | unsigned char radio_addr; | ||
385 | unsigned char empress_addr; | ||
386 | unsigned char rds_addr; | ||
387 | |||
388 | unsigned int tda9887_conf; | ||
389 | unsigned int tuner_config; | ||
390 | |||
391 | /* peripheral I/O */ | ||
392 | enum saa7134_video_out video_out; | ||
393 | enum saa7134_mpeg_type mpeg; | ||
394 | enum saa7134_mpeg_ts_type ts_type; | ||
395 | unsigned int vid_port_opts; | ||
396 | unsigned int ts_force_val:1; | ||
397 | }; | ||
398 | |||
399 | #define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name) | ||
400 | #define card_is_empress(dev) (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg) | ||
401 | #define card_is_dvb(dev) (SAA7134_MPEG_DVB == saa7134_boards[dev->board].mpeg) | ||
402 | #define card_has_mpeg(dev) (SAA7134_MPEG_UNUSED != saa7134_boards[dev->board].mpeg) | ||
403 | #define card(dev) (saa7134_boards[dev->board]) | ||
404 | #define card_in(dev,n) (saa7134_boards[dev->board].inputs[n]) | ||
405 | |||
406 | /* ----------------------------------------------------------- */ | ||
407 | /* device / file handle status */ | ||
408 | |||
409 | #define RESOURCE_OVERLAY 1 | ||
410 | #define RESOURCE_VIDEO 2 | ||
411 | #define RESOURCE_VBI 4 | ||
412 | |||
413 | #define INTERLACE_AUTO 0 | ||
414 | #define INTERLACE_ON 1 | ||
415 | #define INTERLACE_OFF 2 | ||
416 | |||
417 | #define BUFFER_TIMEOUT msecs_to_jiffies(500) /* 0.5 seconds */ | ||
418 | #define TS_BUFFER_TIMEOUT msecs_to_jiffies(1000) /* 1 second */ | ||
419 | |||
420 | struct saa7134_dev; | ||
421 | struct saa7134_dma; | ||
422 | |||
423 | /* saa7134 page table */ | ||
424 | struct saa7134_pgtable { | ||
425 | unsigned int size; | ||
426 | __le32 *cpu; | ||
427 | dma_addr_t dma; | ||
428 | }; | ||
429 | |||
430 | /* tvaudio thread status */ | ||
431 | struct saa7134_thread { | ||
432 | struct task_struct *thread; | ||
433 | unsigned int scan1; | ||
434 | unsigned int scan2; | ||
435 | unsigned int mode; | ||
436 | unsigned int stopped; | ||
437 | }; | ||
438 | |||
439 | /* buffer for one video/vbi/ts frame */ | ||
440 | struct saa7134_buf { | ||
441 | /* common v4l buffer stuff -- must be first */ | ||
442 | struct videobuf_buffer vb; | ||
443 | |||
444 | /* saa7134 specific */ | ||
445 | struct saa7134_format *fmt; | ||
446 | unsigned int top_seen; | ||
447 | int (*activate)(struct saa7134_dev *dev, | ||
448 | struct saa7134_buf *buf, | ||
449 | struct saa7134_buf *next); | ||
450 | |||
451 | /* page tables */ | ||
452 | struct saa7134_pgtable *pt; | ||
453 | }; | ||
454 | |||
455 | struct saa7134_dmaqueue { | ||
456 | struct saa7134_dev *dev; | ||
457 | struct saa7134_buf *curr; | ||
458 | struct list_head queue; | ||
459 | struct timer_list timeout; | ||
460 | unsigned int need_two; | ||
461 | }; | ||
462 | |||
463 | /* video filehandle status */ | ||
464 | struct saa7134_fh { | ||
465 | struct saa7134_dev *dev; | ||
466 | unsigned int radio; | ||
467 | enum v4l2_buf_type type; | ||
468 | unsigned int resources; | ||
469 | enum v4l2_priority prio; | ||
470 | |||
471 | /* video overlay */ | ||
472 | struct v4l2_window win; | ||
473 | struct v4l2_clip clips[8]; | ||
474 | unsigned int nclips; | ||
475 | |||
476 | /* video capture */ | ||
477 | struct saa7134_format *fmt; | ||
478 | unsigned int width,height; | ||
479 | struct videobuf_queue cap; | ||
480 | struct saa7134_pgtable pt_cap; | ||
481 | |||
482 | /* vbi capture */ | ||
483 | struct videobuf_queue vbi; | ||
484 | struct saa7134_pgtable pt_vbi; | ||
485 | }; | ||
486 | |||
487 | /* dmasound dsp status */ | ||
488 | struct saa7134_dmasound { | ||
489 | struct mutex lock; | ||
490 | int minor_mixer; | ||
491 | int minor_dsp; | ||
492 | unsigned int users_dsp; | ||
493 | |||
494 | /* mixer */ | ||
495 | enum saa7134_audio_in input; | ||
496 | unsigned int count; | ||
497 | unsigned int line1; | ||
498 | unsigned int line2; | ||
499 | |||
500 | /* dsp */ | ||
501 | unsigned int afmt; | ||
502 | unsigned int rate; | ||
503 | unsigned int channels; | ||
504 | unsigned int recording_on; | ||
505 | unsigned int dma_running; | ||
506 | unsigned int blocks; | ||
507 | unsigned int blksize; | ||
508 | unsigned int bufsize; | ||
509 | struct saa7134_pgtable pt; | ||
510 | struct videobuf_dmabuf dma; | ||
511 | unsigned int dma_blk; | ||
512 | unsigned int read_offset; | ||
513 | unsigned int read_count; | ||
514 | void * priv_data; | ||
515 | struct snd_pcm_substream *substream; | ||
516 | }; | ||
517 | |||
518 | /* ts/mpeg status */ | ||
519 | struct saa7134_ts { | ||
520 | /* TS capture */ | ||
521 | struct saa7134_pgtable pt_ts; | ||
522 | int nr_packets; | ||
523 | int nr_bufs; | ||
524 | }; | ||
525 | |||
526 | /* ts/mpeg ops */ | ||
527 | struct saa7134_mpeg_ops { | ||
528 | enum saa7134_mpeg_type type; | ||
529 | struct list_head next; | ||
530 | int (*init)(struct saa7134_dev *dev); | ||
531 | int (*fini)(struct saa7134_dev *dev); | ||
532 | void (*signal_change)(struct saa7134_dev *dev); | ||
533 | }; | ||
534 | |||
535 | /* global device status */ | ||
536 | struct saa7134_dev { | ||
537 | struct list_head devlist; | ||
538 | struct mutex lock; | ||
539 | spinlock_t slock; | ||
540 | struct v4l2_prio_state prio; | ||
541 | struct v4l2_device v4l2_dev; | ||
542 | /* workstruct for loading modules */ | ||
543 | struct work_struct request_module_wk; | ||
544 | |||
545 | /* insmod option/autodetected */ | ||
546 | int autodetected; | ||
547 | |||
548 | /* various device info */ | ||
549 | unsigned int resources; | ||
550 | struct video_device *video_dev; | ||
551 | struct video_device *radio_dev; | ||
552 | struct video_device *vbi_dev; | ||
553 | struct saa7134_dmasound dmasound; | ||
554 | |||
555 | /* infrared remote */ | ||
556 | int has_remote; | ||
557 | struct saa7134_card_ir *remote; | ||
558 | |||
559 | /* pci i/o */ | ||
560 | char name[32]; | ||
561 | int nr; | ||
562 | struct pci_dev *pci; | ||
563 | unsigned char pci_rev,pci_lat; | ||
564 | __u32 __iomem *lmmio; | ||
565 | __u8 __iomem *bmmio; | ||
566 | |||
567 | /* config info */ | ||
568 | unsigned int board; | ||
569 | unsigned int tuner_type; | ||
570 | unsigned int radio_type; | ||
571 | unsigned char tuner_addr; | ||
572 | unsigned char radio_addr; | ||
573 | |||
574 | unsigned int tda9887_conf; | ||
575 | unsigned int gpio_value; | ||
576 | |||
577 | /* i2c i/o */ | ||
578 | struct i2c_adapter i2c_adap; | ||
579 | struct i2c_client i2c_client; | ||
580 | unsigned char eedata[256]; | ||
581 | int has_rds; | ||
582 | |||
583 | /* video overlay */ | ||
584 | struct v4l2_framebuffer ovbuf; | ||
585 | struct saa7134_format *ovfmt; | ||
586 | unsigned int ovenable; | ||
587 | enum v4l2_field ovfield; | ||
588 | |||
589 | /* video+ts+vbi capture */ | ||
590 | struct saa7134_dmaqueue video_q; | ||
591 | struct saa7134_dmaqueue vbi_q; | ||
592 | unsigned int video_fieldcount; | ||
593 | unsigned int vbi_fieldcount; | ||
594 | |||
595 | /* various v4l controls */ | ||
596 | struct saa7134_tvnorm *tvnorm; /* video */ | ||
597 | struct saa7134_tvaudio *tvaudio; | ||
598 | unsigned int ctl_input; | ||
599 | int ctl_bright; | ||
600 | int ctl_contrast; | ||
601 | int ctl_hue; | ||
602 | int ctl_saturation; | ||
603 | int ctl_freq; | ||
604 | int ctl_mute; /* audio */ | ||
605 | int ctl_volume; | ||
606 | int ctl_invert; /* private */ | ||
607 | int ctl_mirror; | ||
608 | int ctl_y_odd; | ||
609 | int ctl_y_even; | ||
610 | int ctl_automute; | ||
611 | |||
612 | /* crop */ | ||
613 | struct v4l2_rect crop_bounds; | ||
614 | struct v4l2_rect crop_defrect; | ||
615 | struct v4l2_rect crop_current; | ||
616 | |||
617 | /* other global state info */ | ||
618 | unsigned int automute; | ||
619 | struct saa7134_thread thread; | ||
620 | struct saa7134_input *input; | ||
621 | struct saa7134_input *hw_input; | ||
622 | unsigned int hw_mute; | ||
623 | int last_carrier; | ||
624 | int nosignal; | ||
625 | unsigned int insuspend; | ||
626 | |||
627 | /* I2C keyboard data */ | ||
628 | struct IR_i2c_init_data init_data; | ||
629 | |||
630 | /* SAA7134_MPEG_* */ | ||
631 | struct saa7134_ts ts; | ||
632 | struct saa7134_dmaqueue ts_q; | ||
633 | int ts_started; | ||
634 | struct saa7134_mpeg_ops *mops; | ||
635 | |||
636 | /* SAA7134_MPEG_EMPRESS only */ | ||
637 | struct video_device *empress_dev; | ||
638 | struct videobuf_queue empress_tsq; | ||
639 | atomic_t empress_users; | ||
640 | struct work_struct empress_workqueue; | ||
641 | int empress_started; | ||
642 | |||
643 | #if defined(CONFIG_VIDEO_SAA7134_DVB) || defined(CONFIG_VIDEO_SAA7134_DVB_MODULE) | ||
644 | /* SAA7134_MPEG_DVB only */ | ||
645 | struct videobuf_dvb_frontends frontends; | ||
646 | int (*original_demod_sleep)(struct dvb_frontend *fe); | ||
647 | int (*original_set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage); | ||
648 | int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg); | ||
649 | #endif | ||
650 | void (*gate_ctrl)(struct saa7134_dev *dev, int open); | ||
651 | }; | ||
652 | |||
653 | /* ----------------------------------------------------------- */ | ||
654 | |||
655 | #define saa_readl(reg) readl(dev->lmmio + (reg)) | ||
656 | #define saa_writel(reg,value) writel((value), dev->lmmio + (reg)); | ||
657 | #define saa_andorl(reg,mask,value) \ | ||
658 | writel((readl(dev->lmmio+(reg)) & ~(mask)) |\ | ||
659 | ((value) & (mask)), dev->lmmio+(reg)) | ||
660 | #define saa_setl(reg,bit) saa_andorl((reg),(bit),(bit)) | ||
661 | #define saa_clearl(reg,bit) saa_andorl((reg),(bit),0) | ||
662 | |||
663 | #define saa_readb(reg) readb(dev->bmmio + (reg)) | ||
664 | #define saa_writeb(reg,value) writeb((value), dev->bmmio + (reg)); | ||
665 | #define saa_andorb(reg,mask,value) \ | ||
666 | writeb((readb(dev->bmmio+(reg)) & ~(mask)) |\ | ||
667 | ((value) & (mask)), dev->bmmio+(reg)) | ||
668 | #define saa_setb(reg,bit) saa_andorb((reg),(bit),(bit)) | ||
669 | #define saa_clearb(reg,bit) saa_andorb((reg),(bit),0) | ||
670 | |||
671 | #define saa_wait(us) { udelay(us); } | ||
672 | |||
673 | #define SAA7134_NORMS (\ | ||
674 | V4L2_STD_PAL | V4L2_STD_PAL_N | \ | ||
675 | V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \ | ||
676 | V4L2_STD_NTSC | V4L2_STD_PAL_M | \ | ||
677 | V4L2_STD_PAL_60) | ||
678 | |||
679 | #define GRP_EMPRESS (1) | ||
680 | #define saa_call_all(dev, o, f, args...) do { \ | ||
681 | if (dev->gate_ctrl) \ | ||
682 | dev->gate_ctrl(dev, 1); \ | ||
683 | v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args); \ | ||
684 | if (dev->gate_ctrl) \ | ||
685 | dev->gate_ctrl(dev, 0); \ | ||
686 | } while (0) | ||
687 | |||
688 | #define saa_call_empress(dev, o, f, args...) ({ \ | ||
689 | long _rc; \ | ||
690 | if (dev->gate_ctrl) \ | ||
691 | dev->gate_ctrl(dev, 1); \ | ||
692 | _rc = v4l2_device_call_until_err(&(dev)->v4l2_dev, \ | ||
693 | GRP_EMPRESS, o, f , ##args); \ | ||
694 | if (dev->gate_ctrl) \ | ||
695 | dev->gate_ctrl(dev, 0); \ | ||
696 | _rc; \ | ||
697 | }) | ||
698 | |||
699 | /* ----------------------------------------------------------- */ | ||
700 | /* saa7134-core.c */ | ||
701 | |||
702 | extern struct list_head saa7134_devlist; | ||
703 | extern struct mutex saa7134_devlist_lock; | ||
704 | extern int saa7134_no_overlay; | ||
705 | |||
706 | void saa7134_track_gpio(struct saa7134_dev *dev, char *msg); | ||
707 | void saa7134_set_gpio(struct saa7134_dev *dev, int bit_no, int value); | ||
708 | |||
709 | #define SAA7134_PGTABLE_SIZE 4096 | ||
710 | |||
711 | int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt); | ||
712 | int saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt, | ||
713 | struct scatterlist *list, unsigned int length, | ||
714 | unsigned int startpage); | ||
715 | void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt); | ||
716 | |||
717 | int saa7134_buffer_count(unsigned int size, unsigned int count); | ||
718 | int saa7134_buffer_startpage(struct saa7134_buf *buf); | ||
719 | unsigned long saa7134_buffer_base(struct saa7134_buf *buf); | ||
720 | |||
721 | int saa7134_buffer_queue(struct saa7134_dev *dev, struct saa7134_dmaqueue *q, | ||
722 | struct saa7134_buf *buf); | ||
723 | void saa7134_buffer_finish(struct saa7134_dev *dev, struct saa7134_dmaqueue *q, | ||
724 | unsigned int state); | ||
725 | void saa7134_buffer_next(struct saa7134_dev *dev, struct saa7134_dmaqueue *q); | ||
726 | void saa7134_buffer_timeout(unsigned long data); | ||
727 | void saa7134_dma_free(struct videobuf_queue *q,struct saa7134_buf *buf); | ||
728 | |||
729 | int saa7134_set_dmabits(struct saa7134_dev *dev); | ||
730 | |||
731 | extern int (*saa7134_dmasound_init)(struct saa7134_dev *dev); | ||
732 | extern int (*saa7134_dmasound_exit)(struct saa7134_dev *dev); | ||
733 | |||
734 | |||
735 | /* ----------------------------------------------------------- */ | ||
736 | /* saa7134-cards.c */ | ||
737 | |||
738 | extern struct saa7134_board saa7134_boards[]; | ||
739 | extern const unsigned int saa7134_bcount; | ||
740 | extern struct pci_device_id __devinitdata saa7134_pci_tbl[]; | ||
741 | |||
742 | extern int saa7134_board_init1(struct saa7134_dev *dev); | ||
743 | extern int saa7134_board_init2(struct saa7134_dev *dev); | ||
744 | int saa7134_tuner_callback(void *priv, int component, int command, int arg); | ||
745 | |||
746 | |||
747 | /* ----------------------------------------------------------- */ | ||
748 | /* saa7134-i2c.c */ | ||
749 | |||
750 | int saa7134_i2c_register(struct saa7134_dev *dev); | ||
751 | int saa7134_i2c_unregister(struct saa7134_dev *dev); | ||
752 | |||
753 | |||
754 | /* ----------------------------------------------------------- */ | ||
755 | /* saa7134-video.c */ | ||
756 | |||
757 | extern unsigned int video_debug; | ||
758 | extern struct video_device saa7134_video_template; | ||
759 | extern struct video_device saa7134_radio_template; | ||
760 | |||
761 | int saa7134_s_ctrl_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, struct v4l2_control *c); | ||
762 | int saa7134_g_ctrl_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, struct v4l2_control *c); | ||
763 | int saa7134_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *c); | ||
764 | int saa7134_s_std_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, v4l2_std_id *id); | ||
765 | |||
766 | int saa7134_videoport_init(struct saa7134_dev *dev); | ||
767 | void saa7134_set_tvnorm_hw(struct saa7134_dev *dev); | ||
768 | |||
769 | int saa7134_video_init1(struct saa7134_dev *dev); | ||
770 | int saa7134_video_init2(struct saa7134_dev *dev); | ||
771 | void saa7134_irq_video_signalchange(struct saa7134_dev *dev); | ||
772 | void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status); | ||
773 | |||
774 | |||
775 | /* ----------------------------------------------------------- */ | ||
776 | /* saa7134-ts.c */ | ||
777 | |||
778 | #define TS_PACKET_SIZE 188 /* TS packets 188 bytes */ | ||
779 | |||
780 | extern struct videobuf_queue_ops saa7134_ts_qops; | ||
781 | |||
782 | int saa7134_ts_init1(struct saa7134_dev *dev); | ||
783 | int saa7134_ts_fini(struct saa7134_dev *dev); | ||
784 | void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status); | ||
785 | |||
786 | int saa7134_ts_register(struct saa7134_mpeg_ops *ops); | ||
787 | void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops); | ||
788 | |||
789 | int saa7134_ts_init_hw(struct saa7134_dev *dev); | ||
790 | |||
791 | int saa7134_ts_start(struct saa7134_dev *dev); | ||
792 | int saa7134_ts_stop(struct saa7134_dev *dev); | ||
793 | |||
794 | /* ----------------------------------------------------------- */ | ||
795 | /* saa7134-vbi.c */ | ||
796 | |||
797 | extern struct videobuf_queue_ops saa7134_vbi_qops; | ||
798 | extern struct video_device saa7134_vbi_template; | ||
799 | |||
800 | int saa7134_vbi_init1(struct saa7134_dev *dev); | ||
801 | int saa7134_vbi_fini(struct saa7134_dev *dev); | ||
802 | void saa7134_irq_vbi_done(struct saa7134_dev *dev, unsigned long status); | ||
803 | |||
804 | |||
805 | /* ----------------------------------------------------------- */ | ||
806 | /* saa7134-tvaudio.c */ | ||
807 | |||
808 | int saa7134_tvaudio_rx2mode(u32 rx); | ||
809 | |||
810 | void saa7134_tvaudio_setmute(struct saa7134_dev *dev); | ||
811 | void saa7134_tvaudio_setinput(struct saa7134_dev *dev, | ||
812 | struct saa7134_input *in); | ||
813 | void saa7134_tvaudio_setvolume(struct saa7134_dev *dev, int level); | ||
814 | int saa7134_tvaudio_getstereo(struct saa7134_dev *dev); | ||
815 | |||
816 | void saa7134_tvaudio_init(struct saa7134_dev *dev); | ||
817 | int saa7134_tvaudio_init2(struct saa7134_dev *dev); | ||
818 | int saa7134_tvaudio_fini(struct saa7134_dev *dev); | ||
819 | int saa7134_tvaudio_do_scan(struct saa7134_dev *dev); | ||
820 | |||
821 | int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value); | ||
822 | |||
823 | void saa7134_enable_i2s(struct saa7134_dev *dev); | ||
824 | |||
825 | /* ----------------------------------------------------------- */ | ||
826 | /* saa7134-oss.c */ | ||
827 | |||
828 | extern const struct file_operations saa7134_dsp_fops; | ||
829 | extern const struct file_operations saa7134_mixer_fops; | ||
830 | |||
831 | int saa7134_oss_init1(struct saa7134_dev *dev); | ||
832 | int saa7134_oss_fini(struct saa7134_dev *dev); | ||
833 | void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status); | ||
834 | |||
835 | /* ----------------------------------------------------------- */ | ||
836 | /* saa7134-input.c */ | ||
837 | |||
838 | #if defined(CONFIG_VIDEO_SAA7134_RC) | ||
839 | int saa7134_input_init1(struct saa7134_dev *dev); | ||
840 | void saa7134_input_fini(struct saa7134_dev *dev); | ||
841 | void saa7134_input_irq(struct saa7134_dev *dev); | ||
842 | void saa7134_probe_i2c_ir(struct saa7134_dev *dev); | ||
843 | int saa7134_ir_start(struct saa7134_dev *dev); | ||
844 | void saa7134_ir_stop(struct saa7134_dev *dev); | ||
845 | #else | ||
846 | #define saa7134_input_init1(dev) (0) | ||
847 | #define saa7134_input_fini(dev) (0) | ||
848 | #define saa7134_input_irq(dev) (0) | ||
849 | #define saa7134_probe_i2c_ir(dev) (0) | ||
850 | #define saa7134_ir_start(dev) (0) | ||
851 | #define saa7134_ir_stop(dev) (0) | ||
852 | #endif | ||