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