1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef _EM28XX_H
27#define _EM28XX_H
28
29#include <linux/workqueue.h>
30#include <linux/i2c.h>
31#include <linux/mutex.h>
32#include <linux/videodev2.h>
33
34#include <media/videobuf2-vmalloc.h>
35#include <media/v4l2-device.h>
36#include <media/v4l2-ctrls.h>
37#include <media/v4l2-fh.h>
38#include <media/ir-kbd-i2c.h>
39#include <media/rc-core.h>
40#include "tuner-xc2028.h"
41#include "xc5000.h"
42#include "em28xx-reg.h"
43
44
45#define EM2800_BOARD_UNKNOWN 0
46#define EM2820_BOARD_UNKNOWN 1
47#define EM2820_BOARD_TERRATEC_CINERGY_250 2
48#define EM2820_BOARD_PINNACLE_USB_2 3
49#define EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 4
50#define EM2820_BOARD_MSI_VOX_USB_2 5
51#define EM2800_BOARD_TERRATEC_CINERGY_200 6
52#define EM2800_BOARD_LEADTEK_WINFAST_USBII 7
53#define EM2800_BOARD_KWORLD_USB2800 8
54#define EM2820_BOARD_PINNACLE_DVC_90 9
55#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 10
56#define EM2880_BOARD_TERRATEC_HYBRID_XS 11
57#define EM2820_BOARD_KWORLD_PVRTV2800RF 12
58#define EM2880_BOARD_TERRATEC_PRODIGY_XS 13
59#define EM2820_BOARD_PROLINK_PLAYTV_USB2 14
60#define EM2800_BOARD_VGEAR_POCKETTV 15
61#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950 16
62#define EM2880_BOARD_PINNACLE_PCTV_HD_PRO 17
63#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2 18
64#define EM2860_BOARD_SAA711X_REFERENCE_DESIGN 19
65#define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 20
66#define EM2800_BOARD_GRABBEEX_USB2800 21
67#define EM2750_BOARD_UNKNOWN 22
68#define EM2750_BOARD_DLCW_130 23
69#define EM2820_BOARD_DLINK_USB_TV 24
70#define EM2820_BOARD_GADMEI_UTV310 25
71#define EM2820_BOARD_HERCULES_SMART_TV_USB2 26
72#define EM2820_BOARD_PINNACLE_USB_2_FM1216ME 27
73#define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28
74#define EM2860_BOARD_TVP5150_REFERENCE_DESIGN 29
75#define EM2820_BOARD_VIDEOLOGY_20K14XUSB 30
76#define EM2821_BOARD_USBGEAR_VD204 31
77#define EM2821_BOARD_SUPERCOMP_USB_2 32
78#define EM2860_BOARD_ELGATO_VIDEO_CAPTURE 33
79#define EM2860_BOARD_TERRATEC_HYBRID_XS 34
80#define EM2860_BOARD_TYPHOON_DVD_MAKER 35
81#define EM2860_BOARD_NETGMBH_CAM 36
82#define EM2860_BOARD_GADMEI_UTV330 37
83#define EM2861_BOARD_YAKUMO_MOVIE_MIXER 38
84#define EM2861_BOARD_KWORLD_PVRTV_300U 39
85#define EM2861_BOARD_PLEXTOR_PX_TV100U 40
86#define EM2870_BOARD_KWORLD_350U 41
87#define EM2870_BOARD_KWORLD_355U 42
88#define EM2870_BOARD_TERRATEC_XS 43
89#define EM2870_BOARD_TERRATEC_XS_MT2060 44
90#define EM2870_BOARD_PINNACLE_PCTV_DVB 45
91#define EM2870_BOARD_COMPRO_VIDEOMATE 46
92#define EM2880_BOARD_KWORLD_DVB_305U 47
93#define EM2880_BOARD_KWORLD_DVB_310U 48
94#define EM2880_BOARD_MSI_DIGIVOX_AD 49
95#define EM2880_BOARD_MSI_DIGIVOX_AD_II 50
96#define EM2880_BOARD_TERRATEC_HYBRID_XS_FR 51
97#define EM2881_BOARD_DNT_DA2_HYBRID 52
98#define EM2881_BOARD_PINNACLE_HYBRID_PRO 53
99#define EM2882_BOARD_KWORLD_VS_DVBT 54
100#define EM2882_BOARD_TERRATEC_HYBRID_XS 55
101#define EM2882_BOARD_PINNACLE_HYBRID_PRO_330E 56
102#define EM2883_BOARD_KWORLD_HYBRID_330U 57
103#define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU 58
104#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 60
105#define EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2 61
106#define EM2820_BOARD_GADMEI_TVR200 62
107#define EM2860_BOARD_KAIOMY_TVNPC_U2 63
108#define EM2860_BOARD_EASYCAP 64
109#define EM2820_BOARD_IODATA_GVMVP_SZ 65
110#define EM2880_BOARD_EMPIRE_DUAL_TV 66
111#define EM2860_BOARD_TERRATEC_GRABBY 67
112#define EM2860_BOARD_TERRATEC_AV350 68
113#define EM2882_BOARD_KWORLD_ATSC_315U 69
114#define EM2882_BOARD_EVGA_INDTUBE 70
115#define EM2820_BOARD_SILVERCREST_WEBCAM 71
116#define EM2861_BOARD_GADMEI_UTV330PLUS 72
117#define EM2870_BOARD_REDDO_DVB_C_USB_BOX 73
118#define EM2800_BOARD_VC211A 74
119#define EM2882_BOARD_DIKOM_DK300 75
120#define EM2870_BOARD_KWORLD_A340 76
121#define EM2874_BOARD_LEADERSHIP_ISDBT 77
122#define EM28174_BOARD_PCTV_290E 78
123#define EM2884_BOARD_TERRATEC_H5 79
124#define EM28174_BOARD_PCTV_460E 80
125#define EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C 81
126#define EM2884_BOARD_CINERGY_HTC_STICK 82
127#define EM2860_BOARD_HT_VIDBOX_NW03 83
128#define EM2874_BOARD_MAXMEDIA_UB425_TC 84
129#define EM2884_BOARD_PCTV_510E 85
130#define EM2884_BOARD_PCTV_520E 86
131#define EM2884_BOARD_TERRATEC_HTC_USB_XS 87
132#define EM2884_BOARD_C3TECH_DIGITAL_DUO 88
133
134
135#define EM28XX_MIN_BUF 4
136#define EM28XX_DEF_BUF 8
137
138
139#define URB_MAX_CTRL_SIZE 80
140
141
142#define EM28XX_BOARD_NOT_VALIDATED 1
143#define EM28XX_BOARD_VALIDATED 0
144
145
146#define EM28XX_START_AUDIO 1
147#define EM28XX_STOP_AUDIO 0
148
149
150#define EM28XX_MAXBOARDS 4
151
152
153#define EM28XX_NUM_FRAMES 5
154
155#define EM28XX_NUM_READ_FRAMES 2
156
157
158#define EM28XX_NUM_BUFS 5
159#define EM28XX_DVB_NUM_BUFS 5
160
161
162#define NUM_I2C_BUSES 2
163
164
165
166
167
168#define EM28XX_NUM_ISOC_PACKETS 64
169#define EM28XX_DVB_NUM_ISOC_PACKETS 64
170
171
172
173
174#define EM28XX_BULK_PACKET_MULTIPLIER 384
175#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384
176
177#define EM28XX_INTERLACED_DEFAULT 1
178
179
180#define EM2800_I2C_XFER_TIMEOUT 20
181
182enum em28xx_mode {
183 EM28XX_SUSPEND,
184 EM28XX_ANALOG_MODE,
185 EM28XX_DIGITAL_MODE,
186};
187
188
189struct em28xx;
190
191struct em28xx_usb_bufs {
192
193 int max_pkt_size;
194
195
196 int num_packets;
197
198
199 int num_bufs;
200
201
202 struct urb **urb;
203
204
205 char **transfer_buffer;
206};
207
208struct em28xx_usb_ctl {
209
210 struct em28xx_usb_bufs analog_bufs;
211
212
213 struct em28xx_usb_bufs digital_bufs;
214
215
216 struct em28xx_buffer *vid_buf;
217 struct em28xx_buffer *vbi_buf;
218
219
220 int (*urb_data_copy) (struct em28xx *dev, struct urb *urb);
221
222};
223
224
225struct em28xx_fmt {
226 char *name;
227 u32 fourcc;
228 int depth;
229 int reg;
230};
231
232
233struct em28xx_buffer {
234
235 struct vb2_buffer vb;
236 struct list_head list;
237
238 void *mem;
239 unsigned int length;
240 int top_field;
241
242
243 unsigned int pos;
244
245
246
247
248 char *vb_buf;
249};
250
251struct em28xx_dmaqueue {
252 struct list_head active;
253
254 wait_queue_head_t wq;
255};
256
257
258
259#define MAX_EM28XX_INPUT 4
260enum enum28xx_itype {
261 EM28XX_VMUX_COMPOSITE1 = 1,
262 EM28XX_VMUX_COMPOSITE2,
263 EM28XX_VMUX_COMPOSITE3,
264 EM28XX_VMUX_COMPOSITE4,
265 EM28XX_VMUX_SVIDEO,
266 EM28XX_VMUX_TELEVISION,
267 EM28XX_VMUX_CABLE,
268 EM28XX_VMUX_DVB,
269 EM28XX_VMUX_DEBUG,
270 EM28XX_RADIO,
271};
272
273enum em28xx_ac97_mode {
274 EM28XX_NO_AC97 = 0,
275 EM28XX_AC97_EM202,
276 EM28XX_AC97_SIGMATEL,
277 EM28XX_AC97_OTHER,
278};
279
280struct em28xx_audio_mode {
281 enum em28xx_ac97_mode ac97;
282
283 u16 ac97_feat;
284 u32 ac97_vendor_id;
285
286 unsigned int has_audio:1;
287
288 unsigned int i2s_3rates:1;
289 unsigned int i2s_5rates:1;
290};
291
292
293
294
295
296
297
298enum em28xx_amux {
299
300 EM28XX_AMUX_VIDEO,
301
302 EM28XX_AMUX_LINE_IN,
303
304
305 EM28XX_AMUX_VIDEO2,
306 EM28XX_AMUX_PHONE,
307 EM28XX_AMUX_MIC,
308 EM28XX_AMUX_CD,
309 EM28XX_AMUX_AUX,
310 EM28XX_AMUX_PCM_OUT,
311};
312
313enum em28xx_aout {
314
315 EM28XX_AOUT_MASTER = 1 << 0,
316 EM28XX_AOUT_LINE = 1 << 1,
317 EM28XX_AOUT_MONO = 1 << 2,
318 EM28XX_AOUT_LFE = 1 << 3,
319 EM28XX_AOUT_SURR = 1 << 4,
320
321
322 EM28XX_AOUT_PCM_IN = 1 << 7,
323
324
325 EM28XX_AOUT_PCM_MIC_PCM = 0 << 8,
326 EM28XX_AOUT_PCM_CD = 1 << 8,
327 EM28XX_AOUT_PCM_VIDEO = 2 << 8,
328 EM28XX_AOUT_PCM_AUX = 3 << 8,
329 EM28XX_AOUT_PCM_LINE = 4 << 8,
330 EM28XX_AOUT_PCM_STEREO = 5 << 8,
331 EM28XX_AOUT_PCM_MONO = 6 << 8,
332 EM28XX_AOUT_PCM_PHONE = 7 << 8,
333};
334
335static inline int ac97_return_record_select(int a_out)
336{
337 return (a_out & 0x700) >> 8;
338}
339
340struct em28xx_reg_seq {
341 int reg;
342 unsigned char val, mask;
343 int sleep;
344};
345
346struct em28xx_input {
347 enum enum28xx_itype type;
348 unsigned int vmux;
349 enum em28xx_amux amux;
350 enum em28xx_aout aout;
351 struct em28xx_reg_seq *gpio;
352};
353
354#define INPUT(nr) (&em28xx_boards[dev->model].input[nr])
355
356enum em28xx_decoder {
357 EM28XX_NODECODER = 0,
358 EM28XX_TVP5150,
359 EM28XX_SAA711X,
360};
361
362enum em28xx_sensor {
363 EM28XX_NOSENSOR = 0,
364 EM28XX_MT9V011,
365 EM28XX_MT9M001,
366 EM28XX_MT9M111,
367 EM28XX_OV2640,
368};
369
370enum em28xx_adecoder {
371 EM28XX_NOADECODER = 0,
372 EM28XX_TVAUDIO,
373};
374
375struct em28xx_board {
376 char *name;
377 int vchannels;
378 int tuner_type;
379 int tuner_addr;
380 unsigned def_i2c_bus;
381
382
383 unsigned int tda9887_conf;
384
385
386 struct em28xx_reg_seq *dvb_gpio;
387 struct em28xx_reg_seq *suspend_gpio;
388 struct em28xx_reg_seq *tuner_gpio;
389 struct em28xx_reg_seq *mute_gpio;
390
391 unsigned int is_em2800:1;
392 unsigned int has_msp34xx:1;
393 unsigned int mts_firmware:1;
394 unsigned int max_range_640_480:1;
395 unsigned int has_dvb:1;
396 unsigned int has_snapshot_button:1;
397 unsigned int is_webcam:1;
398 unsigned int valid:1;
399 unsigned int has_ir_i2c:1;
400
401 unsigned char xclk, i2c_speed;
402 unsigned char radio_addr;
403 unsigned short tvaudio_addr;
404
405 enum em28xx_decoder decoder;
406 enum em28xx_adecoder adecoder;
407
408 struct em28xx_input input[MAX_EM28XX_INPUT];
409 struct em28xx_input radio;
410 char *ir_codes;
411};
412
413struct em28xx_eeprom {
414 u8 id[4];
415 __le16 vendor_ID;
416 __le16 product_ID;
417
418 __le16 chip_conf;
419
420 __le16 board_conf;
421
422 __le16 string1, string2, string3;
423
424 u8 string_idx_table;
425};
426
427#define EM28XX_AUDIO_BUFS 5
428#define EM28XX_NUM_AUDIO_PACKETS 64
429#define EM28XX_AUDIO_MAX_PACKET_SIZE 196
430#define EM28XX_CAPTURE_STREAM_EN 1
431
432
433#define EM28XX_AUDIO 0x10
434#define EM28XX_DVB 0x20
435#define EM28XX_RC 0x30
436
437
438#define EM28XX_RESOURCE_VIDEO 0x01
439#define EM28XX_RESOURCE_VBI 0x02
440
441struct em28xx_audio {
442 char name[50];
443 char *transfer_buffer[EM28XX_AUDIO_BUFS];
444 struct urb *urb[EM28XX_AUDIO_BUFS];
445 struct usb_device *udev;
446 unsigned int capture_transfer_done;
447 struct snd_pcm_substream *capture_pcm_substream;
448
449 unsigned int hwptr_done_capture;
450 struct snd_card *sndcard;
451
452 int users;
453 spinlock_t slock;
454};
455
456struct em28xx;
457
458struct em28xx_fh {
459 struct v4l2_fh fh;
460 struct em28xx *dev;
461
462 enum v4l2_buf_type type;
463};
464
465enum em28xx_i2c_algo_type {
466 EM28XX_I2C_ALGO_EM28XX = 0,
467 EM28XX_I2C_ALGO_EM2800,
468 EM28XX_I2C_ALGO_EM25XX_BUS_B,
469};
470
471struct em28xx_i2c_bus {
472 struct em28xx *dev;
473
474 unsigned bus;
475 enum em28xx_i2c_algo_type algo_type;
476};
477
478
479
480struct em28xx {
481
482 char name[30];
483 int model;
484 int devno;
485 enum em28xx_chip_id chip_id;
486 unsigned int is_em25xx:1;
487
488 unsigned char disconnected:1;
489
490 int audio_ifnum;
491
492 struct v4l2_device v4l2_dev;
493 struct v4l2_ctrl_handler ctrl_handler;
494 struct em28xx_board board;
495
496
497 enum em28xx_sensor em28xx_sensor;
498 int sensor_xres, sensor_yres;
499 int sensor_xtal;
500
501
502 int progressive;
503
504
505 int vinmode, vinctl;
506
507 unsigned int has_audio_class:1;
508 unsigned int has_alsa_audio:1;
509 unsigned int is_audio_only:1;
510
511
512 struct work_struct wq_trigger;
513 atomic_t stream_started;
514
515 struct em28xx_fmt *format;
516
517 struct em28xx_IR *ir;
518
519
520 unsigned int wait_after_write;
521
522 struct list_head devlist;
523
524 u32 i2s_speed;
525
526 struct em28xx_audio_mode audio_mode;
527
528 int tuner_type;
529 int tuner_addr;
530 int tda9887_conf;
531
532
533 struct i2c_adapter i2c_adap[NUM_I2C_BUSES];
534 struct i2c_client i2c_client[NUM_I2C_BUSES];
535 struct em28xx_i2c_bus i2c_bus[NUM_I2C_BUSES];
536
537 unsigned char eeprom_addrwidth_16bit:1;
538 unsigned def_i2c_bus;
539 unsigned cur_i2c_bus;
540 struct rt_mutex i2c_bus_lock;
541
542
543 int users;
544 int streaming_users;
545 struct video_device *vdev;
546 v4l2_std_id norm;
547 int ctl_freq;
548 unsigned int ctl_input;
549 unsigned int ctl_ainput;
550 unsigned int ctl_aoutput;
551 int mute;
552 int volume;
553
554 int width;
555 int height;
556 unsigned hscale;
557 unsigned vscale;
558 int interlaced;
559 unsigned int video_bytesread;
560
561 unsigned long hash;
562 unsigned long i2c_hash;
563
564
565 struct em28xx_audio adev;
566
567
568 int capture_type;
569 unsigned char top_field:1;
570 int vbi_read;
571 unsigned int vbi_width;
572 unsigned int vbi_height;
573
574 struct work_struct request_module_wk;
575
576
577 struct mutex lock;
578 struct mutex ctrl_urb_lock;
579
580 struct list_head inqueue, outqueue;
581 struct video_device *vbi_dev;
582 struct video_device *radio_dev;
583
584
585 struct vb2_queue vb_vidq;
586 struct vb2_queue vb_vbiq;
587 struct mutex vb_queue_lock;
588 struct mutex vb_vbi_queue_lock;
589
590
591 unsigned int resources;
592
593
594 u8 *eedata;
595 u16 eedata_len;
596
597
598 struct em28xx_dmaqueue vidq;
599 struct em28xx_dmaqueue vbiq;
600 struct em28xx_usb_ctl usb_ctl;
601 spinlock_t slock;
602
603 unsigned int field_count;
604 unsigned int vbi_field_count;
605
606
607 struct usb_device *udev;
608 u8 analog_ep_isoc;
609 u8 analog_ep_bulk;
610 u8 dvb_ep_isoc;
611 u8 dvb_ep_bulk;
612 int alt;
613 int max_pkt_size;
614 int packet_multiplier;
615
616 int num_alt;
617 unsigned int *alt_max_pkt_size_isoc;
618 unsigned int analog_xfer_bulk:1;
619
620 int dvb_alt_isoc;
621 unsigned int dvb_max_pkt_size_isoc;
622
623 unsigned int dvb_xfer_bulk:1;
624
625 char urb_buf[URB_MAX_CTRL_SIZE];
626
627
628 int (*em28xx_write_regs) (struct em28xx *dev, u16 reg,
629 char *buf, int len);
630 int (*em28xx_read_reg) (struct em28xx *dev, u16 reg);
631 int (*em28xx_read_reg_req_len) (struct em28xx *dev, u8 req, u16 reg,
632 char *buf, int len);
633 int (*em28xx_write_regs_req) (struct em28xx *dev, u8 req, u16 reg,
634 char *buf, int len);
635 int (*em28xx_read_reg_req) (struct em28xx *dev, u8 req, u16 reg);
636
637 enum em28xx_mode mode;
638
639
640 u16 reg_gpo_num, reg_gpio_num;
641
642
643 unsigned char reg_gpo, reg_gpio;
644
645
646 char snapshot_button_path[30];
647 struct input_dev *sbutton_input_dev;
648 struct delayed_work sbutton_query_work;
649
650 struct em28xx_dvb *dvb;
651};
652
653struct em28xx_ops {
654 struct list_head next;
655 char *name;
656 int id;
657 int (*init)(struct em28xx *);
658 int (*fini)(struct em28xx *);
659};
660
661
662void em28xx_do_i2c_scan(struct em28xx *dev, unsigned bus);
663int em28xx_i2c_register(struct em28xx *dev, unsigned bus,
664 enum em28xx_i2c_algo_type algo_type);
665int em28xx_i2c_unregister(struct em28xx *dev, unsigned bus);
666
667
668int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
669 char *buf, int len);
670int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg);
671int em28xx_read_reg(struct em28xx *dev, u16 reg);
672int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
673 int len);
674int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len);
675int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val);
676int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
677 u8 bitmask);
678
679int em28xx_read_ac97(struct em28xx *dev, u8 reg);
680int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val);
681
682int em28xx_audio_analog_set(struct em28xx *dev);
683int em28xx_audio_setup(struct em28xx *dev);
684
685int em28xx_colorlevels_set_default(struct em28xx *dev);
686int em28xx_capture_start(struct em28xx *dev, int start);
687int em28xx_vbi_supported(struct em28xx *dev);
688int em28xx_set_outfmt(struct em28xx *dev);
689int em28xx_resolution_set(struct em28xx *dev);
690int em28xx_set_alternate(struct em28xx *dev);
691int em28xx_alloc_urbs(struct em28xx *dev, enum em28xx_mode mode, int xfer_bulk,
692 int num_bufs, int max_pkt_size, int packet_multiplier);
693int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode,
694 int xfer_bulk,
695 int num_bufs, int max_pkt_size, int packet_multiplier,
696 int (*urb_data_copy)
697 (struct em28xx *dev, struct urb *urb));
698void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode);
699void em28xx_stop_urbs(struct em28xx *dev);
700int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode);
701int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio);
702void em28xx_wake_i2c(struct em28xx *dev);
703int em28xx_register_extension(struct em28xx_ops *dev);
704void em28xx_unregister_extension(struct em28xx_ops *dev);
705void em28xx_init_extension(struct em28xx *dev);
706void em28xx_close_extension(struct em28xx *dev);
707
708
709int em28xx_vb2_setup(struct em28xx *dev);
710int em28xx_register_analog_devices(struct em28xx *dev);
711void em28xx_release_analog_resources(struct em28xx *dev);
712void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv);
713int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count);
714int em28xx_stop_vbi_streaming(struct vb2_queue *vq);
715extern const struct v4l2_ctrl_ops em28xx_ctrl_ops;
716
717
718extern struct em28xx_board em28xx_boards[];
719extern struct usb_device_id em28xx_id_table[];
720int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
721void em28xx_release_resources(struct em28xx *dev);
722
723
724extern struct vb2_ops em28xx_vbi_qops;
725
726
727int em28xx_detect_sensor(struct em28xx *dev);
728int em28xx_init_camera(struct em28xx *dev);
729
730
731
732#define em28xx_err(fmt, arg...) do {\
733 printk(KERN_ERR fmt , ##arg); } while (0)
734
735#define em28xx_errdev(fmt, arg...) do {\
736 printk(KERN_ERR "%s: "fmt,\
737 dev->name , ##arg); } while (0)
738
739#define em28xx_info(fmt, arg...) do {\
740 printk(KERN_INFO "%s: "fmt,\
741 dev->name , ##arg); } while (0)
742#define em28xx_warn(fmt, arg...) do {\
743 printk(KERN_WARNING "%s: "fmt,\
744 dev->name , ##arg); } while (0)
745
746static inline int em28xx_compression_disable(struct em28xx *dev)
747{
748
749 return em28xx_write_reg(dev, EM28XX_R26_COMPR, 0x00);
750}
751
752
753static inline unsigned int norm_maxw(struct em28xx *dev)
754{
755 if (dev->board.is_webcam)
756 return dev->sensor_xres;
757
758 if (dev->board.max_range_640_480)
759 return 640;
760
761 return 720;
762}
763
764static inline unsigned int norm_maxh(struct em28xx *dev)
765{
766 if (dev->board.is_webcam)
767 return dev->sensor_yres;
768
769 if (dev->board.max_range_640_480)
770 return 480;
771
772 return (dev->norm & V4L2_STD_625_50) ? 576 : 480;
773}
774#endif
775