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
bt8xx
bttvp.h
Go to the documentation of this file.
1
/*
2
3
bttv - Bt848 frame grabber driver
4
5
bttv's *private* header file -- nobody other than bttv itself
6
should ever include this file.
7
8
(c) 2000-2002 Gerd Knorr <
[email protected]
>
9
10
This program is free software; you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation; either version 2 of the License, or
13
(at your option) any later version.
14
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
19
20
You should have received a copy of the GNU General Public License
21
along with this program; if not, write to the Free Software
22
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23
*/
24
25
#ifndef _BTTVP_H_
26
#define _BTTVP_H_
27
28
#include <linux/types.h>
29
#include <linux/wait.h>
30
#include <linux/i2c.h>
31
#include <
linux/i2c-algo-bit.h
>
32
#include <linux/pci.h>
33
#include <linux/input.h>
34
#include <
linux/mutex.h
>
35
#include <
linux/scatterlist.h
>
36
#include <asm/io.h>
37
#include <
media/v4l2-common.h
>
38
#include <linux/device.h>
39
#include <
media/videobuf-dma-sg.h
>
40
#include <
media/tveeprom.h
>
41
#include <
media/rc-core.h
>
42
#include <
media/ir-kbd-i2c.h
>
43
44
#include "
bt848.h
"
45
#include "
bttv.h
"
46
#include "
btcx-risc.h
"
47
48
#ifdef __KERNEL__
49
50
#define FORMAT_FLAGS_DITHER 0x01
51
#define FORMAT_FLAGS_PACKED 0x02
52
#define FORMAT_FLAGS_PLANAR 0x04
53
#define FORMAT_FLAGS_RAW 0x08
54
#define FORMAT_FLAGS_CrCb 0x10
55
56
#define RISC_SLOT_O_VBI 4
57
#define RISC_SLOT_O_FIELD 6
58
#define RISC_SLOT_E_VBI 10
59
#define RISC_SLOT_E_FIELD 12
60
#define RISC_SLOT_LOOP 14
61
62
#define RESOURCE_OVERLAY 1
63
#define RESOURCE_VIDEO_STREAM 2
64
#define RESOURCE_VBI 4
65
#define RESOURCE_VIDEO_READ 8
66
67
#define RAW_LINES 640
68
#define RAW_BPL 1024
69
70
#define UNSET (-1U)
71
72
/* Min. value in VDELAY register. */
73
#define MIN_VDELAY 2
74
/* Even to get Cb first, odd for Cr. */
75
#define MAX_HDELAY (0x3FF & -2)
76
/* Limits scaled width, which must be a multiple of 4. */
77
#define MAX_HACTIVE (0x3FF & -4)
78
79
#define BTTV_NORMS (\
80
V4L2_STD_PAL | V4L2_STD_PAL_N | \
81
V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \
82
V4L2_STD_NTSC | V4L2_STD_PAL_M | \
83
V4L2_STD_PAL_60)
84
/* ---------------------------------------------------------- */
85
86
struct
bttv_tvnorm {
87
int
v4l2_id;
88
char
*
name
;
89
u32
Fsc;
90
u16
swidth, sheight;
/* scaled standard width, height */
91
u16
totalwidth;
92
u8
adelay, bdelay, iform;
93
u32
scaledtwidth;
94
u16
hdelayx1, hactivex1;
95
u16
vdelay;
96
u8
vbipack;
97
u16
vtotal;
98
int
sram;
99
/* ITU-R frame line number of the first VBI line we can
100
capture, of the first and second field. The last possible line
101
is determined by cropcap.bounds. */
102
u16
vbistart[2];
103
/* Horizontally this counts fCLKx1 samples following the leading
104
edge of the horizontal sync pulse, vertically ITU-R frame line
105
numbers of the first field times two (2, 4, 6, ... 524 or 624). */
106
struct
v4l2_cropcap
cropcap;
107
};
108
extern
const
struct
bttv_tvnorm
bttv_tvnorms
[];
109
110
struct
bttv_format {
111
char
*
name
;
112
int
fourcc;
/* video4linux 2 */
113
int
btformat;
/* BT848_COLOR_FMT_* */
114
int
btswap;
/* BT848_COLOR_CTL_* */
115
int
depth
;
/* bit/pixel */
116
int
flags
;
117
int
hshift,vshift;
/* for planar modes */
118
};
119
120
struct
bttv_ir {
121
struct
rc_dev
*
dev
;
122
struct
timer_list
timer
;
123
124
char
name
[32];
125
char
phys
[32];
126
127
/* Usual gpio signalling */
128
u32
mask_keycode;
129
u32
mask_keydown;
130
u32
mask_keyup;
131
u32
polling;
132
u32
last_gpio;
133
int
shift_by;
134
int
start
;
// What should RC5_START() be
135
int
addr
;
// What RC5_ADDR() should be.
136
int
rc5_remote_gap;
137
138
/* RC5 gpio */
139
bool
rc5_gpio;
/* Is RC5 legacy GPIO enabled? */
140
u32
last_bit;
/* last raw bit seen */
141
u32
code
;
/* raw code under construction */
142
struct
timeval
base_time;
/* time of last seen code */
143
bool
active
;
/* building raw code */
144
};
145
146
147
/* ---------------------------------------------------------- */
148
149
struct
bttv_geometry {
150
u8
vtc,crop,comb;
151
u16
width
,hscale,hdelay;
152
u16
sheight,vscale,vdelay,vtotal;
153
};
154
155
struct
bttv_buffer {
156
/* common v4l buffer stuff -- must be first */
157
struct
videobuf_buffer
vb;
158
159
/* bttv specific */
160
const
struct
bttv_format *
fmt
;
161
unsigned
int
tvnorm
;
162
int
btformat;
163
int
btswap;
164
struct
bttv_geometry geo;
165
struct
btcx_riscmem
top
;
166
struct
btcx_riscmem
bottom
;
167
struct
v4l2_rect
crop;
168
unsigned
int
vbi_skip[2];
169
unsigned
int
vbi_count[2];
170
};
171
172
struct
bttv_buffer_set {
173
struct
bttv_buffer *
top
;
/* top field buffer */
174
struct
bttv_buffer *
bottom
;
/* bottom field buffer */
175
unsigned
int
top_irq;
176
unsigned
int
frame_irq;
177
};
178
179
struct
bttv_overlay {
180
unsigned
int
tvnorm
;
181
struct
v4l2_rect
w
;
182
enum
v4l2_field
field
;
183
struct
v4l2_clip
*clips;
184
int
nclips;
185
int
setup_ok;
186
};
187
188
struct
bttv_vbi_fmt {
189
struct
v4l2_vbi_format
fmt
;
190
191
/* fmt.start[] and count[] refer to this video standard. */
192
const
struct
bttv_tvnorm *
tvnorm
;
193
194
/* Earliest possible start of video capturing with this
195
v4l2_vbi_format, in struct bttv_crop.rect units. */
196
__s32
end
;
197
};
198
199
/* bttv-vbi.c */
200
void
bttv_vbi_fmt_reset
(
struct
bttv_vbi_fmt *
f
,
unsigned
int
norm);
201
202
struct
bttv_crop {
203
/* A cropping rectangle in struct bttv_tvnorm.cropcap units. */
204
struct
v4l2_rect
rect;
205
206
/* Scaled image size limits with this crop rect. Divide
207
max_height, but not min_height, by two when capturing
208
single fields. See also bttv_crop_reset() and
209
bttv_crop_adjust() in bttv-driver.c. */
210
__s32
min_scaled_width;
211
__s32
min_scaled_height;
212
__s32
max_scaled_width;
213
__s32
max_scaled_height;
214
};
215
216
struct
bttv_fh {
217
struct
bttv *btv;
218
int
resources
;
219
#ifdef VIDIOC_G_PRIORITY
220
enum
v4l2_priority
prio
;
221
#endif
222
enum
v4l2_buf_type
type
;
223
224
/* video capture */
225
struct
videobuf_queue
cap
;
226
const
struct
bttv_format *
fmt
;
227
int
width
;
228
int
height
;
229
230
/* video overlay */
231
const
struct
bttv_format *ovfmt;
232
struct
bttv_overlay ov;
233
234
/* Application called VIDIOC_S_CROP. */
235
int
do_crop;
236
237
/* vbi capture */
238
struct
videobuf_queue
vbi;
239
/* Current VBI capture window as seen through this fh (cannot
240
be global for compatibility with earlier drivers). Protected
241
by struct bttv.lock and struct bttv_fh.vbi.lock. */
242
struct
bttv_vbi_fmt vbi_fmt;
243
};
244
245
/* ---------------------------------------------------------- */
246
/* bttv-risc.c */
247
248
/* risc code generators - capture */
249
int
bttv_risc_packed
(
struct
bttv *btv,
struct
btcx_riscmem
*risc,
250
struct
scatterlist
*sglist,
251
unsigned
int
offset
,
unsigned
int
bpl,
252
unsigned
int
pitch,
unsigned
int
skip_lines,
253
unsigned
int
store_lines);
254
255
/* control dma register + risc main loop */
256
void
bttv_set_dma
(
struct
bttv *btv,
int
override
);
257
int
bttv_risc_init_main
(
struct
bttv *btv);
258
int
bttv_risc_hook
(
struct
bttv *btv,
int
slot
,
struct
btcx_riscmem
*risc,
259
int
irqflags);
260
261
/* capture buffer handling */
262
int
bttv_buffer_risc
(
struct
bttv *btv,
struct
bttv_buffer *
buf
);
263
int
bttv_buffer_activate_video
(
struct
bttv *btv,
264
struct
bttv_buffer_set *
set
);
265
int
bttv_buffer_activate_vbi
(
struct
bttv *btv,
266
struct
bttv_buffer *vbi);
267
void
bttv_dma_free
(
struct
videobuf_queue
*
q
,
struct
bttv *btv,
268
struct
bttv_buffer *
buf
);
269
270
/* overlay handling */
271
int
bttv_overlay_risc
(
struct
bttv *btv,
struct
bttv_overlay *ov,
272
const
struct
bttv_format *
fmt
,
273
struct
bttv_buffer *
buf
);
274
275
276
/* ---------------------------------------------------------- */
277
/* bttv-vbi.c */
278
279
int
bttv_try_fmt_vbi_cap
(
struct
file
*
file
,
void
*fh,
struct
v4l2_format
*
f
);
280
int
bttv_g_fmt_vbi_cap
(
struct
file
*
file
,
void
*fh,
struct
v4l2_format
*
f
);
281
int
bttv_s_fmt_vbi_cap
(
struct
file
*
file
,
void
*fh,
struct
v4l2_format
*
f
);
282
283
extern
struct
videobuf_queue_ops
bttv_vbi_qops
;
284
285
/* ---------------------------------------------------------- */
286
/* bttv-gpio.c */
287
288
extern
struct
bus_type
bttv_sub_bus_type
;
289
int
bttv_sub_add_device
(
struct
bttv_core
*
core
,
char
*
name
);
290
int
bttv_sub_del_devices
(
struct
bttv_core
*
core
);
291
292
/* ---------------------------------------------------------- */
293
/* bttv-cards.c */
294
295
extern
int
no_overlay
;
296
297
/* ---------------------------------------------------------- */
298
/* bttv-input.c */
299
300
extern
void
init_bttv_i2c_ir
(
struct
bttv *btv);
301
extern
int
fini_bttv_i2c
(
struct
bttv *btv);
302
303
/* ---------------------------------------------------------- */
304
/* bttv-driver.c */
305
306
/* insmod options */
307
extern
unsigned
int
bttv_verbose
;
308
extern
unsigned
int
bttv_debug
;
309
extern
unsigned
int
bttv_gpio
;
310
extern
void
bttv_gpio_tracking
(
struct
bttv *btv,
char
*comment);
311
extern
int
init_bttv_i2c
(
struct
bttv *btv);
312
313
#define dprintk(fmt, ...) \
314
do { \
315
if (bttv_debug >= 1) \
316
pr_debug(fmt, ##__VA_ARGS__); \
317
} while (0)
318
#define dprintk_cont(fmt, ...) \
319
do { \
320
if (bttv_debug >= 1) \
321
pr_cont(fmt, ##__VA_ARGS__); \
322
} while (0)
323
#define d2printk(fmt, ...) \
324
do { \
325
if (bttv_debug >= 2) \
326
printk(fmt, ##__VA_ARGS__); \
327
} while (0)
328
329
#define BTTV_MAX_FBUF 0x208000
330
#define BTTV_TIMEOUT msecs_to_jiffies(500)
/* 0.5 seconds */
331
#define BTTV_FREE_IDLE msecs_to_jiffies(1000)
/* one second */
332
333
334
struct
bttv_pll_info {
335
unsigned
int
pll_ifreq;
/* PLL input frequency */
336
unsigned
int
pll_ofreq;
/* PLL output frequency */
337
unsigned
int
pll_crystal;
/* Crystal used for input */
338
unsigned
int
pll_current;
/* Currently programmed ofreq */
339
};
340
341
/* for gpio-connected remote control */
342
struct
bttv_input {
343
struct
input_dev *
dev
;
344
char
name
[32];
345
char
phys
[32];
346
u32
mask_keycode;
347
u32
mask_keydown;
348
};
349
350
struct
bttv_suspend_state {
351
u32
gpio_enable;
352
u32
gpio_data;
353
int
disabled;
354
int
loop_irq;
355
struct
bttv_buffer_set video;
356
struct
bttv_buffer *vbi;
357
};
358
359
struct
bttv {
360
struct
bttv_core
c
;
361
362
/* pci device config */
363
unsigned
short
id
;
364
unsigned
char
revision
;
365
unsigned
char
__iomem
*bt848_mmio;
/* pointer to mmio */
366
367
/* card configuration info */
368
unsigned
int
cardid;
/* pci subsystem id (bt878 based ones) */
369
unsigned
int
tuner_type;
/* tuner chip type */
370
unsigned
int
tda9887_conf;
371
unsigned
int
svhs, dig;
372
unsigned
int
has_saa6588:1;
373
struct
bttv_pll_info
pll
;
374
int
triton1;
375
int
gpioirq;
376
377
int
use_i2c_hw;
378
379
/* old gpio interface */
380
int
shutdown
;
381
382
void
(*volume_gpio)(
struct
bttv *btv,
__u16
volume
);
383
void
(*audio_mode_gpio)(
struct
bttv *btv,
struct
v4l2_tuner
*
tuner
,
int
set
);
384
385
/* new gpio interface */
386
spinlock_t
gpio_lock;
387
388
/* i2c layer */
389
struct
i2c_algo_bit_data
i2c_algo;
390
struct
i2c_client
i2c_client
;
391
int
i2c_state
, i2c_rc;
392
int
i2c_done;
393
wait_queue_head_t
i2c_queue;
394
struct
v4l2_subdev
*sd_msp34xx;
395
struct
v4l2_subdev
*sd_tvaudio;
396
397
/* video4linux (1) */
398
struct
video_device
*video_dev;
399
struct
video_device
*radio_dev;
400
struct
video_device
*vbi_dev;
401
402
/* infrared remote */
403
int
has_remote;
404
struct
bttv_ir *remote;
405
406
/* I2C remote data */
407
struct
IR_i2c_init_data
init_data;
408
409
/* locking */
410
spinlock_t
s_lock;
411
struct
mutex
lock
;
412
int
resources
;
413
#ifdef VIDIOC_G_PRIORITY
414
struct
v4l2_prio_state
prio
;
415
#endif
416
417
/* video state */
418
unsigned
int
input
;
419
unsigned
int
audio
;
420
unsigned
int
mute
;
421
unsigned
long
freq
;
422
unsigned
int
tvnorm
;
423
int
hue
,
contrast
, bright,
saturation
;
424
struct
v4l2_framebuffer
fbuf;
425
unsigned
int
field_count;
426
427
/* various options */
428
int
opt_combfilter;
429
int
opt_lumafilter;
430
int
opt_automute;
431
int
opt_chroma_agc;
432
int
opt_color_killer;
433
int
opt_adc_crush;
434
int
opt_vcr_hack;
435
int
opt_whitecrush_upper;
436
int
opt_whitecrush_lower;
437
int
opt_uv_ratio;
438
int
opt_full_luma_range;
439
int
opt_coring;
440
441
/* radio data/state */
442
int
has_radio;
443
int
radio_user;
444
int
radio_uses_msp_demodulator;
445
446
/* miro/pinnacle + Aimslab VHX
447
philips matchbox (tea5757 radio tuner) support */
448
int
has_matchbox;
449
int
mbox_we;
450
int
mbox_data;
451
int
mbox_clk;
452
int
mbox_most;
453
int
mbox_mask;
454
455
/* ISA stuff (Terratec Active Radio Upgrade) */
456
int
mbox_ior;
457
int
mbox_iow;
458
int
mbox_csel;
459
460
/* risc memory management data
461
- must acquire s_lock before changing these
462
- only the irq handler is supported to touch top + bottom + vcurr */
463
struct
btcx_riscmem
main
;
464
struct
bttv_buffer *screen;
/* overlay */
465
struct
list_head
capture;
/* video capture queue */
466
struct
list_head
vcapture;
/* vbi capture queue */
467
struct
bttv_buffer_set
curr
;
/* active buffers */
468
struct
bttv_buffer *cvbi;
/* active vbi buffer */
469
int
loop_irq;
470
int
new_input;
471
472
unsigned
long
cap_ctl;
473
unsigned
long
dma_on
;
474
struct
timer_list
timeout
;
475
struct
bttv_suspend_state
state
;
476
477
/* stats */
478
unsigned
int
errors
;
479
unsigned
int
framedrop;
480
unsigned
int
irq_total;
481
unsigned
int
irq_me;
482
483
unsigned
int
users;
484
struct
bttv_fh
init
;
485
486
/* used to make dvb-bt8xx autoloadable */
487
struct
work_struct
request_module_wk;
488
489
/* Default (0) and current (1) video capturing and overlay
490
cropping parameters in bttv_tvnorm.cropcap units. Protected
491
by bttv.lock. */
492
struct
bttv_crop crop[2];
493
494
/* Earliest possible start of video capturing in
495
bttv_tvnorm.cropcap line units. Set by check_alloc_btres()
496
and free_btres(). Protected by bttv.lock. */
497
__s32
vbi_end;
498
499
/* Latest possible end of VBI capturing (= crop[x].rect.top when
500
VIDEO_RESOURCES are locked). Set by check_alloc_btres()
501
and free_btres(). Protected by bttv.lock. */
502
__s32
crop_start;
503
};
504
505
static
inline
struct
bttv *to_bttv(
struct
v4l2_device
*v4l2_dev)
506
{
507
return
container_of
(v4l2_dev,
struct
bttv,
c
.v4l2_dev);
508
}
509
510
/* our devices */
511
#define BTTV_MAX 32
512
extern
unsigned
int
bttv_num
;
513
extern
struct
bttv *
bttvs
[BTTV_MAX];
514
515
static
inline
unsigned
int
bttv_muxsel(
const
struct
bttv *btv,
516
unsigned
int
input
)
517
{
518
return
(
bttv_tvcards
[btv->c.type].muxsel >> (input * 2)) & 3;
519
}
520
521
#endif
522
523
#define btwrite(dat,adr) writel((dat), btv->bt848_mmio+(adr))
524
#define btread(adr) readl(btv->bt848_mmio+(adr))
525
526
#define btand(dat,adr) btwrite((dat) & btread(adr), adr)
527
#define btor(dat,adr) btwrite((dat) | btread(adr), adr)
528
#define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)
529
530
#endif
/* _BTTVP_H_ */
531
532
/*
533
* Local variables:
534
* c-basic-offset: 8
535
* End:
536
*/
Generated on Thu Jan 10 2013 13:47:22 for Linux Kernel by
1.8.2