This source file includes following definitions.
- fh2id
- file2id
- to_cx18
- cx18_raw_vbi
1
2
3
4
5
6
7
8
9
10
11 #ifndef CX18_DRIVER_H
12 #define CX18_DRIVER_H
13
14 #include <linux/module.h>
15 #include <linux/moduleparam.h>
16 #include <linux/init.h>
17 #include <linux/delay.h>
18 #include <linux/sched/signal.h>
19 #include <linux/fs.h>
20 #include <linux/pci.h>
21 #include <linux/interrupt.h>
22 #include <linux/spinlock.h>
23 #include <linux/i2c.h>
24 #include <linux/i2c-algo-bit.h>
25 #include <linux/list.h>
26 #include <linux/unistd.h>
27 #include <linux/pagemap.h>
28 #include <linux/workqueue.h>
29 #include <linux/mutex.h>
30 #include <linux/slab.h>
31 #include <asm/byteorder.h>
32
33 #include <media/v4l2-common.h>
34 #include <media/v4l2-ioctl.h>
35 #include <media/v4l2-device.h>
36 #include <media/v4l2-fh.h>
37 #include <media/tuner.h>
38 #include <media/i2c/ir-kbd-i2c.h>
39 #include "cx18-mailbox.h"
40 #include "cx18-av-core.h"
41 #include "cx23418.h"
42
43
44 #include <media/demux.h>
45 #include <media/dmxdev.h>
46 #include <media/dvb_demux.h>
47 #include <media/dvb_frontend.h>
48 #include <media/dvb_net.h>
49 #include <media/dvbdev.h>
50
51
52 #include <media/videobuf-core.h>
53 #include <media/videobuf-vmalloc.h>
54
55 #ifndef CONFIG_PCI
56 # error "This driver requires kernel PCI support."
57 #endif
58
59 #define CX18_MEM_OFFSET 0x00000000
60 #define CX18_MEM_SIZE 0x04000000
61 #define CX18_REG_OFFSET 0x02000000
62
63
64 #define CX18_MAX_CARDS 32
65
66
67 #define CX18_CARD_HVR_1600_ESMT 0
68 #define CX18_CARD_HVR_1600_SAMSUNG 1
69 #define CX18_CARD_COMPRO_H900 2
70 #define CX18_CARD_YUAN_MPC718 3
71 #define CX18_CARD_CNXT_RAPTOR_PAL 4
72 #define CX18_CARD_TOSHIBA_QOSMIO_DVBT 5
73 #define CX18_CARD_LEADTEK_PVR2100 6
74 #define CX18_CARD_LEADTEK_DVR3100H 7
75 #define CX18_CARD_GOTVIEW_PCI_DVD3 8
76 #define CX18_CARD_HVR_1600_S5H1411 9
77 #define CX18_CARD_LAST 9
78
79 #define CX18_ENC_STREAM_TYPE_MPG 0
80 #define CX18_ENC_STREAM_TYPE_TS 1
81 #define CX18_ENC_STREAM_TYPE_YUV 2
82 #define CX18_ENC_STREAM_TYPE_VBI 3
83 #define CX18_ENC_STREAM_TYPE_PCM 4
84 #define CX18_ENC_STREAM_TYPE_IDX 5
85 #define CX18_ENC_STREAM_TYPE_RAD 6
86 #define CX18_MAX_STREAMS 7
87
88
89 #define PCI_VENDOR_ID_CX 0x14f1
90 #define PCI_DEVICE_ID_CX23418 0x5b7a
91
92
93 #define CX18_PCI_ID_HAUPPAUGE 0x0070
94 #define CX18_PCI_ID_COMPRO 0x185b
95 #define CX18_PCI_ID_YUAN 0x12ab
96 #define CX18_PCI_ID_CONEXANT 0x14f1
97 #define CX18_PCI_ID_TOSHIBA 0x1179
98 #define CX18_PCI_ID_LEADTEK 0x107D
99 #define CX18_PCI_ID_GOTVIEW 0x5854
100
101
102
103
104
105
106 #define CX18_DEFAULT_ENC_TS_BUFFERS 1
107 #define CX18_DEFAULT_ENC_MPG_BUFFERS 2
108 #define CX18_DEFAULT_ENC_IDX_BUFFERS 1
109 #define CX18_DEFAULT_ENC_YUV_BUFFERS 2
110 #define CX18_DEFAULT_ENC_VBI_BUFFERS 1
111 #define CX18_DEFAULT_ENC_PCM_BUFFERS 1
112
113
114 #define CX18_MAX_FW_MDLS_PER_STREAM 63
115
116
117 #define CX18_UNIT_ENC_YUV_BUFSIZE (720 * 32 * 3 / 2)
118 #define CX18_625_LINE_ENC_YUV_BUFSIZE (CX18_UNIT_ENC_YUV_BUFSIZE * 576/32)
119 #define CX18_525_LINE_ENC_YUV_BUFSIZE (CX18_UNIT_ENC_YUV_BUFSIZE * 480/32)
120
121
122 struct cx18_enc_idx_entry {
123 __le32 length;
124 __le32 offset_low;
125 __le32 offset_high;
126 __le32 flags;
127 __le32 pts_low;
128 __le32 pts_high;
129 } __attribute__ ((packed));
130 #define CX18_UNIT_ENC_IDX_BUFSIZE \
131 (sizeof(struct cx18_enc_idx_entry) * V4L2_ENC_IDX_ENTRIES)
132
133
134 #define CX18_DEFAULT_ENC_TS_BUFSIZE 32
135 #define CX18_DEFAULT_ENC_MPG_BUFSIZE 32
136 #define CX18_DEFAULT_ENC_IDX_BUFSIZE (CX18_UNIT_ENC_IDX_BUFSIZE * 1 / 1024 + 1)
137 #define CX18_DEFAULT_ENC_YUV_BUFSIZE (CX18_UNIT_ENC_YUV_BUFSIZE * 3 / 1024 + 1)
138 #define CX18_DEFAULT_ENC_PCM_BUFSIZE 4
139
140
141 #define I2C_CLIENTS_MAX 16
142
143
144
145
146 #define CX18_DBGFLG_WARN (1 << 0)
147 #define CX18_DBGFLG_INFO (1 << 1)
148 #define CX18_DBGFLG_API (1 << 2)
149 #define CX18_DBGFLG_DMA (1 << 3)
150 #define CX18_DBGFLG_IOCTL (1 << 4)
151 #define CX18_DBGFLG_FILE (1 << 5)
152 #define CX18_DBGFLG_I2C (1 << 6)
153 #define CX18_DBGFLG_IRQ (1 << 7)
154
155 #define CX18_DBGFLG_HIGHVOL (1 << 8)
156
157
158
159 #define CX18_DEBUG(x, type, fmt, args...) \
160 do { \
161 if ((x) & cx18_debug) \
162 v4l2_info(&cx->v4l2_dev, " " type ": " fmt , ## args); \
163 } while (0)
164 #define CX18_DEBUG_WARN(fmt, args...) CX18_DEBUG(CX18_DBGFLG_WARN, "warning", fmt , ## args)
165 #define CX18_DEBUG_INFO(fmt, args...) CX18_DEBUG(CX18_DBGFLG_INFO, "info", fmt , ## args)
166 #define CX18_DEBUG_API(fmt, args...) CX18_DEBUG(CX18_DBGFLG_API, "api", fmt , ## args)
167 #define CX18_DEBUG_DMA(fmt, args...) CX18_DEBUG(CX18_DBGFLG_DMA, "dma", fmt , ## args)
168 #define CX18_DEBUG_IOCTL(fmt, args...) CX18_DEBUG(CX18_DBGFLG_IOCTL, "ioctl", fmt , ## args)
169 #define CX18_DEBUG_FILE(fmt, args...) CX18_DEBUG(CX18_DBGFLG_FILE, "file", fmt , ## args)
170 #define CX18_DEBUG_I2C(fmt, args...) CX18_DEBUG(CX18_DBGFLG_I2C, "i2c", fmt , ## args)
171 #define CX18_DEBUG_IRQ(fmt, args...) CX18_DEBUG(CX18_DBGFLG_IRQ, "irq", fmt , ## args)
172
173 #define CX18_DEBUG_HIGH_VOL(x, type, fmt, args...) \
174 do { \
175 if (((x) & cx18_debug) && (cx18_debug & CX18_DBGFLG_HIGHVOL)) \
176 v4l2_info(&cx->v4l2_dev, " " type ": " fmt , ## args); \
177 } while (0)
178 #define CX18_DEBUG_HI_WARN(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_WARN, "warning", fmt , ## args)
179 #define CX18_DEBUG_HI_INFO(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_INFO, "info", fmt , ## args)
180 #define CX18_DEBUG_HI_API(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_API, "api", fmt , ## args)
181 #define CX18_DEBUG_HI_DMA(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_DMA, "dma", fmt , ## args)
182 #define CX18_DEBUG_HI_IOCTL(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_IOCTL, "ioctl", fmt , ## args)
183 #define CX18_DEBUG_HI_FILE(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_FILE, "file", fmt , ## args)
184 #define CX18_DEBUG_HI_I2C(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_I2C, "i2c", fmt , ## args)
185 #define CX18_DEBUG_HI_IRQ(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_IRQ, "irq", fmt , ## args)
186
187
188 #define CX18_ERR(fmt, args...) v4l2_err(&cx->v4l2_dev, fmt , ## args)
189 #define CX18_WARN(fmt, args...) v4l2_warn(&cx->v4l2_dev, fmt , ## args)
190 #define CX18_INFO(fmt, args...) v4l2_info(&cx->v4l2_dev, fmt , ## args)
191
192
193 #define CX18_DEBUG_DEV(x, dev, type, fmt, args...) \
194 do { \
195 if ((x) & cx18_debug) \
196 v4l2_info(dev, " " type ": " fmt , ## args); \
197 } while (0)
198 #define CX18_DEBUG_WARN_DEV(dev, fmt, args...) \
199 CX18_DEBUG_DEV(CX18_DBGFLG_WARN, dev, "warning", fmt , ## args)
200 #define CX18_DEBUG_INFO_DEV(dev, fmt, args...) \
201 CX18_DEBUG_DEV(CX18_DBGFLG_INFO, dev, "info", fmt , ## args)
202 #define CX18_DEBUG_API_DEV(dev, fmt, args...) \
203 CX18_DEBUG_DEV(CX18_DBGFLG_API, dev, "api", fmt , ## args)
204 #define CX18_DEBUG_DMA_DEV(dev, fmt, args...) \
205 CX18_DEBUG_DEV(CX18_DBGFLG_DMA, dev, "dma", fmt , ## args)
206 #define CX18_DEBUG_IOCTL_DEV(dev, fmt, args...) \
207 CX18_DEBUG_DEV(CX18_DBGFLG_IOCTL, dev, "ioctl", fmt , ## args)
208 #define CX18_DEBUG_FILE_DEV(dev, fmt, args...) \
209 CX18_DEBUG_DEV(CX18_DBGFLG_FILE, dev, "file", fmt , ## args)
210 #define CX18_DEBUG_I2C_DEV(dev, fmt, args...) \
211 CX18_DEBUG_DEV(CX18_DBGFLG_I2C, dev, "i2c", fmt , ## args)
212 #define CX18_DEBUG_IRQ_DEV(dev, fmt, args...) \
213 CX18_DEBUG_DEV(CX18_DBGFLG_IRQ, dev, "irq", fmt , ## args)
214
215 #define CX18_DEBUG_HIGH_VOL_DEV(x, dev, type, fmt, args...) \
216 do { \
217 if (((x) & cx18_debug) && (cx18_debug & CX18_DBGFLG_HIGHVOL)) \
218 v4l2_info(dev, " " type ": " fmt , ## args); \
219 } while (0)
220 #define CX18_DEBUG_HI_WARN_DEV(dev, fmt, args...) \
221 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_WARN, dev, "warning", fmt , ## args)
222 #define CX18_DEBUG_HI_INFO_DEV(dev, fmt, args...) \
223 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_INFO, dev, "info", fmt , ## args)
224 #define CX18_DEBUG_HI_API_DEV(dev, fmt, args...) \
225 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_API, dev, "api", fmt , ## args)
226 #define CX18_DEBUG_HI_DMA_DEV(dev, fmt, args...) \
227 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_DMA, dev, "dma", fmt , ## args)
228 #define CX18_DEBUG_HI_IOCTL_DEV(dev, fmt, args...) \
229 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_IOCTL, dev, "ioctl", fmt , ## args)
230 #define CX18_DEBUG_HI_FILE_DEV(dev, fmt, args...) \
231 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_FILE, dev, "file", fmt , ## args)
232 #define CX18_DEBUG_HI_I2C_DEV(dev, fmt, args...) \
233 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_I2C, dev, "i2c", fmt , ## args)
234 #define CX18_DEBUG_HI_IRQ_DEV(dev, fmt, args...) \
235 CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_IRQ, dev, "irq", fmt , ## args)
236
237 #define CX18_ERR_DEV(dev, fmt, args...) v4l2_err(dev, fmt , ## args)
238 #define CX18_WARN_DEV(dev, fmt, args...) v4l2_warn(dev, fmt , ## args)
239 #define CX18_INFO_DEV(dev, fmt, args...) v4l2_info(dev, fmt , ## args)
240
241 extern int cx18_debug;
242
243 struct cx18_options {
244 int megabytes[CX18_MAX_STREAMS];
245 int cardtype;
246 int tuner;
247 int radio;
248 };
249
250
251 #define CX18_F_M_NEED_SWAP 0
252
253
254 #define CX18_F_S_CLAIMED 3
255 #define CX18_F_S_STREAMING 4
256 #define CX18_F_S_INTERNAL_USE 5
257 #define CX18_F_S_STREAMOFF 7
258 #define CX18_F_S_APPL_IO 8
259 #define CX18_F_S_STOPPING 9
260
261
262 #define CX18_F_I_LOADED_FW 0
263 #define CX18_F_I_EOS 4
264 #define CX18_F_I_RADIO_USER 5
265 #define CX18_F_I_ENC_PAUSED 13
266 #define CX18_F_I_INITED 21
267 #define CX18_F_I_FAILED 22
268
269
270 #define CX18_SLICED_TYPE_TELETEXT_B (1)
271 #define CX18_SLICED_TYPE_CAPTION_525 (4)
272 #define CX18_SLICED_TYPE_WSS_625 (5)
273 #define CX18_SLICED_TYPE_VPS (7)
274
275
276
277
278
279
280
281
282
283
284 #define list_entry_is_past_end(pos, head, member) \
285 (&pos->member == (head))
286
287 struct cx18_buffer {
288 struct list_head list;
289 dma_addr_t dma_handle;
290 char *buf;
291
292 u32 bytesused;
293 u32 readpos;
294 };
295
296 struct cx18_mdl {
297 struct list_head list;
298 u32 id;
299
300 unsigned int skipped;
301 unsigned long m_flags;
302
303 struct list_head buf_list;
304 struct cx18_buffer *curr_buf;
305
306 u32 bytesused;
307 u32 readpos;
308 };
309
310 struct cx18_queue {
311 struct list_head list;
312 atomic_t depth;
313 u32 bytesused;
314 spinlock_t lock;
315 };
316
317 struct cx18_stream;
318
319 struct cx18_dvb {
320 struct cx18_stream *stream;
321 struct dmx_frontend hw_frontend;
322 struct dmx_frontend mem_frontend;
323 struct dmxdev dmxdev;
324 struct dvb_adapter dvb_adapter;
325 struct dvb_demux demux;
326 struct dvb_frontend *fe;
327 struct dvb_net dvbnet;
328 int enabled;
329 int feeding;
330 struct mutex feedlock;
331 };
332
333 struct cx18;
334 struct cx18_scb;
335
336
337 #define CX18_MAX_MDL_ACKS 2
338 #define CX18_MAX_IN_WORK_ORDERS (CX18_MAX_FW_MDLS_PER_STREAM + 7)
339
340
341 #define CX18_F_EWO_MB_STALE_UPON_RECEIPT 0x1
342 #define CX18_F_EWO_MB_STALE_WHILE_PROC 0x2
343 #define CX18_F_EWO_MB_STALE \
344 (CX18_F_EWO_MB_STALE_UPON_RECEIPT | CX18_F_EWO_MB_STALE_WHILE_PROC)
345
346 struct cx18_in_work_order {
347 struct work_struct work;
348 atomic_t pending;
349 struct cx18 *cx;
350 unsigned long flags;
351 int rpu;
352 struct cx18_mailbox mb;
353 struct cx18_mdl_ack mdl_ack[CX18_MAX_MDL_ACKS];
354 char *str;
355 };
356
357 #define CX18_INVALID_TASK_HANDLE 0xffffffff
358
359 struct cx18_stream {
360
361
362 struct video_device video_dev;
363 struct cx18_dvb *dvb;
364 struct cx18 *cx;
365 const char *name;
366 int type;
367 u32 handle;
368 u32 v4l2_dev_caps;
369 unsigned int mdl_base_idx;
370
371 u32 id;
372 unsigned long s_flags;
373 int dma;
374
375
376 wait_queue_head_t waitq;
377
378
379 struct list_head buf_pool;
380 u32 buffers;
381 u32 buf_size;
382
383
384 u32 bufs_per_mdl;
385 u32 mdl_size;
386
387
388 struct cx18_queue q_free;
389 struct cx18_queue q_busy;
390 struct cx18_queue q_full;
391 struct cx18_queue q_idle;
392
393 struct work_struct out_work_order;
394
395
396 u32 pixelformat;
397 u32 vb_bytes_per_frame;
398 u32 vb_bytes_per_line;
399 struct list_head vb_capture;
400 spinlock_t vb_lock;
401 struct timer_list vb_timeout;
402
403 struct videobuf_queue vbuf_q;
404 spinlock_t vbuf_q_lock;
405 enum v4l2_buf_type vb_type;
406 };
407
408 struct cx18_videobuf_buffer {
409
410 struct videobuf_buffer vb;
411 v4l2_std_id tvnorm;
412 u32 bytes_used;
413 };
414
415 struct cx18_open_id {
416 struct v4l2_fh fh;
417 u32 open_id;
418 int type;
419 struct cx18 *cx;
420 };
421
422 static inline struct cx18_open_id *fh2id(struct v4l2_fh *fh)
423 {
424 return container_of(fh, struct cx18_open_id, fh);
425 }
426
427 static inline struct cx18_open_id *file2id(struct file *file)
428 {
429 return fh2id(file->private_data);
430 }
431
432
433 struct cx18_card;
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481 #define VBI_ACTIVE_SAMPLES 1444
482 #define VBI_HBLANK_SAMPLES_60HZ 272
483 #define VBI_HBLANK_SAMPLES_50HZ 284
484
485 #define CX18_VBI_FRAMES 32
486
487 struct vbi_info {
488
489 struct v4l2_format in;
490 struct v4l2_sliced_vbi_format *sliced_in;
491 u32 count;
492 u32 start[2];
493
494 u32 frame;
495
496
497
498
499
500
501
502 int insert_mpeg;
503
504
505
506
507
508
509
510
511 struct v4l2_sliced_vbi_data sliced_data[36];
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535 #define CX18_SLICED_MPEG_DATA_MAXSZ 1584
536
537 #define CX18_SLICED_MPEG_DATA_BUFSZ (CX18_SLICED_MPEG_DATA_MAXSZ+8)
538 u8 *sliced_mpeg_data[CX18_VBI_FRAMES];
539 u32 sliced_mpeg_size[CX18_VBI_FRAMES];
540
541
542 u32 inserted_frame;
543
544
545
546
547
548
549 struct cx18_mdl sliced_mpeg_mdl;
550 struct cx18_buffer sliced_mpeg_buf;
551 };
552
553
554 struct cx18_i2c_algo_callback_data {
555 struct cx18 *cx;
556 int bus_index;
557 };
558
559 #define CX18_MAX_MMIO_WR_RETRIES 10
560
561
562 struct cx18 {
563 int instance;
564 struct pci_dev *pci_dev;
565 struct v4l2_device v4l2_dev;
566 struct v4l2_subdev *sd_av;
567 struct v4l2_subdev *sd_extmux;
568
569 const struct cx18_card *card;
570 const char *card_name;
571 const struct cx18_card_tuner_i2c *card_i2c;
572 u8 is_50hz;
573 u8 is_60hz;
574 u8 nof_inputs;
575 u8 nof_audio_inputs;
576 u32 v4l2_cap;
577 u32 hw_flags;
578 unsigned int free_mdl_idx;
579 struct cx18_scb __iomem *scb;
580 struct mutex epu2apu_mb_lock;
581 struct mutex epu2cpu_mb_lock;
582
583 struct cx18_av_state av_state;
584
585
586 struct cx2341x_handler cxhdl;
587 u32 filter_mode;
588 u32 temporal_strength;
589 u32 spatial_strength;
590
591
592 unsigned long dualwatch_jiffies;
593 u32 dualwatch_stereo_mode;
594
595 struct mutex serialize_lock;
596 struct cx18_options options;
597 int stream_buffers[CX18_MAX_STREAMS];
598 int stream_buf_size[CX18_MAX_STREAMS];
599 struct cx18_stream streams[CX18_MAX_STREAMS];
600 struct snd_cx18_card *alsa;
601 void (*pcm_announce_callback)(struct snd_cx18_card *card, u8 *pcm_data,
602 size_t num_bytes);
603
604 unsigned long i_flags;
605 atomic_t ana_capturing;
606 atomic_t tot_capturing;
607 int search_pack_header;
608
609 int open_id;
610
611
612
613 resource_size_t base_addr;
614
615 u8 card_rev;
616 void __iomem *enc_mem, *reg_mem;
617
618 struct vbi_info vbi;
619
620 u64 mpg_data_received;
621 u64 vbi_data_inserted;
622
623 wait_queue_head_t mb_apu_waitq;
624 wait_queue_head_t mb_cpu_waitq;
625 wait_queue_head_t cap_w;
626
627 wait_queue_head_t dma_waitq;
628
629 u32 sw1_irq_mask;
630 u32 sw2_irq_mask;
631 u32 hw2_irq_mask;
632
633 struct workqueue_struct *in_work_queue;
634 char in_workq_name[11];
635 struct cx18_in_work_order in_work_order[CX18_MAX_IN_WORK_ORDERS];
636 char epu_debug_str[256];
637
638
639 struct i2c_adapter i2c_adap[2];
640 struct i2c_algo_bit_data i2c_algo[2];
641 struct cx18_i2c_algo_callback_data i2c_algo_cb_data[2];
642
643 struct IR_i2c_init_data ir_i2c_init_data;
644
645
646 u32 gpio_dir;
647 u32 gpio_val;
648 struct mutex gpio_lock;
649 struct v4l2_subdev sd_gpiomux;
650 struct v4l2_subdev sd_resetctrl;
651
652
653
654
655 u32 audio_input;
656 u32 active_input;
657 v4l2_std_id std;
658 v4l2_std_id tuner_std;
659
660
661 struct work_struct request_module_wk;
662 };
663
664 static inline struct cx18 *to_cx18(struct v4l2_device *v4l2_dev)
665 {
666 return container_of(v4l2_dev, struct cx18, v4l2_dev);
667 }
668
669
670 extern int (*cx18_ext_init)(struct cx18 *);
671
672
673 extern int cx18_first_minor;
674
675
676
677
678 int cx18_msleep_timeout(unsigned int msecs, int intr);
679
680
681 struct tveeprom;
682 void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv);
683
684
685 int cx18_init_on_first_open(struct cx18 *cx);
686
687
688 static inline int cx18_raw_vbi(const struct cx18 *cx)
689 {
690 return cx->vbi.in.type == V4L2_BUF_TYPE_VBI_CAPTURE;
691 }
692
693
694
695 #define cx18_call_hw(cx, hw, o, f, args...) \
696 v4l2_device_mask_call_all(&(cx)->v4l2_dev, hw, o, f, ##args)
697
698 #define cx18_call_all(cx, o, f, args...) cx18_call_hw(cx, 0, o, f , ##args)
699
700
701
702
703 #define cx18_call_hw_err(cx, hw, o, f, args...) \
704 v4l2_device_mask_call_until_err(&(cx)->v4l2_dev, hw, o, f, ##args)
705
706 #define cx18_call_all_err(cx, o, f, args...) \
707 cx18_call_hw_err(cx, 0, o, f , ##args)
708
709 #endif