Initial commit
[kernel/linux-3.0.git] / drivers / staging / easycap / easycap.h
1 /*****************************************************************************
2 *                                                                            *
3 *  easycap.h                                                                 *
4 *                                                                            *
5 *****************************************************************************/
6 /*
7  *
8  *  Copyright (C) 2010 R.M. Thomas  <rmthomas@sciolus.org>
9  *
10  *
11  *  This is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2 of the License, or
14  *  (at your option) any later version.
15  *
16  *  The software is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *  GNU General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with this software; if not, write to the Free Software
23  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24  *
25 */
26 /*****************************************************************************/
27 /*---------------------------------------------------------------------------*/
28 /*
29  *  THE FOLLOWING PARAMETERS ARE UNDEFINED:
30  *
31  *                EASYCAP_DEBUG
32  *
33  *  IF REQUIRED THEY MUST BE EXTERNALLY DEFINED, FOR EXAMPLE AS COMPILER
34  *  OPTIONS.
35  */
36 /*---------------------------------------------------------------------------*/
37
38 #ifndef __EASYCAP_H__
39 #define __EASYCAP_H__
40
41 /*---------------------------------------------------------------------------*/
42 /*
43  *  THESE ARE NORMALLY DEFINED
44  */
45 /*---------------------------------------------------------------------------*/
46 #define  PATIENCE  500
47 #define  PERSEVERE
48 /*---------------------------------------------------------------------------*/
49 /*
50  *  THESE ARE FOR MAINTENANCE ONLY - NORMALLY UNDEFINED:
51  */
52 /*---------------------------------------------------------------------------*/
53 #undef  EASYCAP_TESTCARD
54 /*---------------------------------------------------------------------------*/
55 #include <linux/kernel.h>
56 #include <linux/errno.h>
57 #include <linux/init.h>
58 #include <linux/slab.h>
59 #include <linux/module.h>
60 #include <linux/kref.h>
61 #include <linux/usb.h>
62 #include <linux/uaccess.h>
63
64 #include <linux/i2c.h>
65 #include <linux/version.h>
66 #include <linux/workqueue.h>
67 #include <linux/poll.h>
68 #include <linux/mm.h>
69 #include <linux/fs.h>
70 #include <linux/delay.h>
71 #include <linux/types.h>
72
73 #ifndef CONFIG_EASYCAP_OSS
74 #include <linux/vmalloc.h>
75 #include <linux/sound.h>
76 #include <sound/core.h>
77 #include <sound/pcm.h>
78 #include <sound/pcm_params.h>
79 #include <sound/info.h>
80 #include <sound/initval.h>
81 #include <sound/control.h>
82 #endif /* !CONFIG_EASYCAP_OSS */
83 #include <media/v4l2-dev.h>
84 #include <media/v4l2-device.h>
85 #include <linux/videodev2.h>
86 #include <linux/soundcard.h>
87
88 #ifndef PAGE_SIZE
89 #error "PAGE_SIZE not defined"
90 #endif /* PAGE_SIZE */
91
92 /*---------------------------------------------------------------------------*/
93 /*  VENDOR, PRODUCT:  Syntek Semiconductor Co., Ltd
94  *
95  *      EITHER        EasyCAP USB 2.0 Video Adapter with Audio, Model No. DC60
96  *               with input cabling:  AUDIO(L), AUDIO(R), CVBS, S-VIDEO.
97  *
98  *          OR        EasyCAP 4CHANNEL USB 2.0 DVR, Model No. EasyCAP002
99  *               with input cabling:  MICROPHONE, CVBS1, CVBS2, CVBS3, CVBS4.
100  */
101 /*---------------------------------------------------------------------------*/
102 #define USB_EASYCAP_VENDOR_ID   0x05e1
103 #define USB_EASYCAP_PRODUCT_ID  0x0408
104
105 #define EASYCAP_DRIVER_VERSION "0.9.01"
106 #define EASYCAP_DRIVER_DESCRIPTION "easycapdc60"
107
108 #define USB_SKEL_MINOR_BASE     192
109 #define DONGLE_MANY 8
110 #define INPUT_MANY 6
111 /*---------------------------------------------------------------------------*/
112 /*
113  *  DEFAULT LUMINANCE, CONTRAST, SATURATION AND HUE
114  */
115 /*---------------------------------------------------------------------------*/
116 #define SAA_0A_DEFAULT 0x7F
117 #define SAA_0B_DEFAULT 0x3F
118 #define SAA_0C_DEFAULT 0x2F
119 #define SAA_0D_DEFAULT 0x00
120 /*---------------------------------------------------------------------------*/
121 /*
122  *  VIDEO STREAMING PARAMETERS:
123  *  USB 2.0 PROVIDES FOR HIGH-BANDWIDTH ENDPOINTS WITH AN UPPER LIMIT
124  *  OF 3072 BYTES PER MICROFRAME for wMaxPacketSize.
125  */
126 /*---------------------------------------------------------------------------*/
127 #define VIDEO_ISOC_BUFFER_MANY 16
128 #define VIDEO_ISOC_ORDER 3
129 #define VIDEO_ISOC_FRAMESPERDESC ((unsigned int) 1 << VIDEO_ISOC_ORDER)
130 #define USB_2_0_MAXPACKETSIZE 3072
131 #if (USB_2_0_MAXPACKETSIZE > PAGE_SIZE)
132 #error video_isoc_buffer[.] will not be big enough
133 #endif
134 #define VIDEO_JUNK_TOLERATE VIDEO_ISOC_BUFFER_MANY
135 #define VIDEO_LOST_TOLERATE 50
136 /*---------------------------------------------------------------------------*/
137 /*
138  *  VIDEO BUFFERS
139  */
140 /*---------------------------------------------------------------------------*/
141 #define FIELD_BUFFER_SIZE (203 * PAGE_SIZE)
142 #define FRAME_BUFFER_SIZE (405 * PAGE_SIZE)
143 #define FIELD_BUFFER_MANY 4
144 #define FRAME_BUFFER_MANY 6
145 /*---------------------------------------------------------------------------*/
146 /*
147  *  AUDIO STREAMING PARAMETERS
148  */
149 /*---------------------------------------------------------------------------*/
150 #define AUDIO_ISOC_BUFFER_MANY 16
151 #define AUDIO_ISOC_ORDER 1
152 #define AUDIO_ISOC_FRAMESPERDESC 32
153 #define AUDIO_ISOC_BUFFER_SIZE (PAGE_SIZE << AUDIO_ISOC_ORDER)
154 /*---------------------------------------------------------------------------*/
155 /*
156  *  AUDIO BUFFERS
157  */
158 /*---------------------------------------------------------------------------*/
159 #define AUDIO_FRAGMENT_MANY 32
160 #define PAGES_PER_AUDIO_FRAGMENT 4
161 /*---------------------------------------------------------------------------*/
162 /*
163  *  IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND,
164  *                        ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND.
165  *  THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE.  NOT
166  *  ONLY MUST THE PARAMETER
167  *                             STANDARD_MANY
168  *  BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE
169  *  NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE:  DUMMY STANDARDS
170  *  MAY NEED TO BE ADDED.   APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN
171  *  ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE.  BEWARE.
172  */
173 /*---------------------------------------------------------------------------*/
174 #define  PAL_BGHIN      0
175 #define  PAL_Nc         2
176 #define  SECAM          4
177 #define  NTSC_N         6
178 #define  NTSC_N_443     8
179 #define  NTSC_M         1
180 #define  NTSC_443       3
181 #define  NTSC_M_JP      5
182 #define  PAL_60         7
183 #define  PAL_M          9
184 #define  PAL_BGHIN_SLOW    10
185 #define  PAL_Nc_SLOW       12
186 #define  SECAM_SLOW        14
187 #define  NTSC_N_SLOW       16
188 #define  NTSC_N_443_SLOW   18
189 #define  NTSC_M_SLOW       11
190 #define  NTSC_443_SLOW     13
191 #define  NTSC_M_JP_SLOW    15
192 #define  PAL_60_SLOW       17
193 #define  PAL_M_SLOW        19
194 #define  STANDARD_MANY 20
195 /*---------------------------------------------------------------------------*/
196 /*
197  *  ENUMS
198  */
199 /*---------------------------------------------------------------------------*/
200 enum {
201         AT_720x576,
202         AT_704x576,
203         AT_640x480,
204         AT_720x480,
205         AT_360x288,
206         AT_320x240,
207         AT_360x240,
208         RESOLUTION_MANY
209 };
210 enum {
211         FMT_UYVY,
212         FMT_YUY2,
213         FMT_RGB24,
214         FMT_RGB32,
215         FMT_BGR24,
216         FMT_BGR32,
217         PIXELFORMAT_MANY
218 };
219 enum {
220         FIELD_NONE,
221         FIELD_INTERLACED,
222         INTERLACE_MANY
223 };
224 #define SETTINGS_MANY   (STANDARD_MANY * \
225                         RESOLUTION_MANY * \
226                         2 * \
227                         PIXELFORMAT_MANY * \
228                         INTERLACE_MANY)
229 /*---------------------------------------------------------------------------*/
230 /*
231  *  STRUCTURE DEFINITIONS
232  */
233 /*---------------------------------------------------------------------------*/
234 struct easycap_dongle {
235         struct easycap *peasycap;
236         struct mutex mutex_video;
237         struct mutex mutex_audio;
238 };
239 /*---------------------------------------------------------------------------*/
240 struct data_buffer {
241         struct list_head list_head;
242         void *pgo;
243         void *pto;
244         u16 kount;
245         u16 input;
246 };
247 /*---------------------------------------------------------------------------*/
248 struct data_urb {
249         struct list_head list_head;
250         struct urb *purb;
251         int isbuf;
252         int length;
253 };
254 /*---------------------------------------------------------------------------*/
255 struct easycap_standard {
256         u16 mask;
257 struct v4l2_standard v4l2_standard;
258 };
259 struct easycap_format {
260         u16 mask;
261         char name[128];
262 struct v4l2_format v4l2_format;
263 };
264 struct inputset {
265         int input;
266         int input_ok;
267         int standard_offset;
268         int standard_offset_ok;
269         int format_offset;
270         int format_offset_ok;
271         int brightness;
272         int brightness_ok;
273         int contrast;
274         int contrast_ok;
275         int saturation;
276         int saturation_ok;
277         int hue;
278         int hue_ok;
279 };
280 /*---------------------------------------------------------------------------*/
281 /*
282  *   easycap.ilk == 0   =>  CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=256
283  *   easycap.ilk == 2   =>  CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=9
284  *   easycap.ilk == 3   =>     FOUR-CVBS HARDWARE, AUDIO wMaxPacketSize=9
285  */
286 /*---------------------------------------------------------------------------*/
287 struct easycap {
288 #define TELLTALE "expectedstring"
289         char telltale[16];
290         int isdongle;
291         int minor;
292
293         struct video_device video_device;
294         struct v4l2_device v4l2_device;
295
296         int status;
297         unsigned int audio_pages_per_fragment;
298         unsigned int audio_bytes_per_fragment;
299         unsigned int audio_buffer_page_many;
300
301 #define UPSAMPLE
302 #ifdef UPSAMPLE
303         s16 oldaudio;
304 #endif /*UPSAMPLE*/
305
306         int ilk;
307         bool microphone;
308
309         struct usb_device *pusb_device;
310         struct usb_interface *pusb_interface;
311
312         struct kref kref;
313
314         int queued[FRAME_BUFFER_MANY];
315         int done[FRAME_BUFFER_MANY];
316
317         wait_queue_head_t wq_video;
318         wait_queue_head_t wq_audio;
319         wait_queue_head_t wq_trigger;
320
321         int input;
322         int polled;
323         int standard_offset;
324         int format_offset;
325         struct inputset inputset[INPUT_MANY];
326
327         bool ntsc;
328         int fps;
329         int usec;
330         int tolerate;
331         int skip;
332         int skipped;
333         int lost[INPUT_MANY];
334         int merit[180];
335
336         struct timeval timeval0;
337         struct timeval timeval1;
338         struct timeval timeval2;
339         struct timeval timeval3;
340         struct timeval timeval6;
341         struct timeval timeval7;
342         struct timeval timeval8;
343         long long int dnbydt;
344
345         int    video_interface;
346         int    video_altsetting_on;
347         int    video_altsetting_off;
348         int    video_endpointnumber;
349         int    video_isoc_maxframesize;
350         int    video_isoc_buffer_size;
351         int    video_isoc_framesperdesc;
352
353         int    video_isoc_streaming;
354         int    video_isoc_sequence;
355         int    video_idle;
356         int    video_eof;
357         int    video_junk;
358
359         struct data_buffer video_isoc_buffer[VIDEO_ISOC_BUFFER_MANY];
360         struct data_buffer field_buffer[FIELD_BUFFER_MANY]
361                                         [(FIELD_BUFFER_SIZE/PAGE_SIZE)];
362         struct data_buffer frame_buffer[FRAME_BUFFER_MANY]
363                                         [(FRAME_BUFFER_SIZE/PAGE_SIZE)];
364
365         struct list_head urb_video_head;
366         struct list_head *purb_video_head;
367
368         u8 cache[8];
369         u8 *pcache;
370         int video_mt;
371         int audio_mt;
372         long long audio_bytes;
373         u32 isequence;
374
375         int vma_many;
376 /*---------------------------------------------------------------------------*/
377 /*
378  *  BUFFER INDICATORS
379  */
380 /*---------------------------------------------------------------------------*/
381         int field_fill; /* Field buffer being filled by easycap_complete().  */
382                         /*   Bumped only by easycap_complete().              */
383         int field_page; /* Page of field buffer page being filled by         */
384                         /*   easycap_complete().                             */
385         int field_read; /* Field buffer to be read by field2frame().         */
386                         /*   Bumped only by easycap_complete().              */
387         int frame_fill; /* Frame buffer being filled by field2frame().       */
388                         /*   Bumped only by easycap_dqbuf() when             */
389                         /*   field2frame() has created a complete frame.     */
390         int frame_read; /* Frame buffer offered to user by DQBUF.            */
391                         /*   Set only by easycap_dqbuf() to trail frame_fill.*/
392         int frame_lock; /* Flag set to 1 by DQBUF and cleared by QBUF        */
393 /*---------------------------------------------------------------------------*/
394 /*
395  *  IMAGE PROPERTIES
396  */
397 /*---------------------------------------------------------------------------*/
398         u32                   pixelformat;
399         int                     width;
400         int                     height;
401         int                     bytesperpixel;
402         bool                    byteswaporder;
403         bool                    decimatepixel;
404         bool                    offerfields;
405         int                     frame_buffer_used;
406         int                     frame_buffer_many;
407         int                     videofieldamount;
408
409         int                     brightness;
410         int                     contrast;
411         int                     saturation;
412         int                     hue;
413
414         int allocation_video_urb;
415         int allocation_video_page;
416         int allocation_video_struct;
417         int registered_video;
418 /*---------------------------------------------------------------------------*/
419 /*
420  *  ALSA
421  */
422 /*---------------------------------------------------------------------------*/
423 #ifndef CONFIG_EASYCAP_OSS
424         struct snd_pcm_hardware alsa_hardware;
425         struct snd_card *psnd_card;
426         struct snd_pcm *psnd_pcm;
427         struct snd_pcm_substream *psubstream;
428         int dma_fill;
429         int dma_next;
430         int dma_read;
431 #endif /* !CONFIG_EASYCAP_OSS */
432 /*---------------------------------------------------------------------------*/
433 /*
434  *  SOUND PROPERTIES
435  */
436 /*---------------------------------------------------------------------------*/
437         int audio_interface;
438         int audio_altsetting_on;
439         int audio_altsetting_off;
440         int audio_endpointnumber;
441         int audio_isoc_maxframesize;
442         int audio_isoc_buffer_size;
443         int audio_isoc_framesperdesc;
444
445         int audio_isoc_streaming;
446         int audio_idle;
447         int audio_eof;
448         int volume;
449         int mute;
450         s8 gain;
451
452         struct data_buffer audio_isoc_buffer[AUDIO_ISOC_BUFFER_MANY];
453
454         struct list_head urb_audio_head;
455         struct list_head *purb_audio_head;
456 /*---------------------------------------------------------------------------*/
457 /*
458  *  BUFFER INDICATORS
459  */
460 /*---------------------------------------------------------------------------*/
461         int audio_fill; /* Audio buffer being filled by easycap_complete().  */
462                         /*   Bumped only by easycap_complete().              */
463         int audio_read; /* Audio buffer page being read by easycap_read().   */
464                         /*   Set by easycap_read() to trail audio_fill by    */
465                         /*   one fragment.                                   */
466 /*---------------------------------------------------------------------------*/
467 /*
468  *  SOUND PROPERTIES
469  */
470 /*---------------------------------------------------------------------------*/
471
472         int audio_buffer_many;
473
474         int allocation_audio_urb;
475         int allocation_audio_page;
476         int allocation_audio_struct;
477         int registered_audio;
478
479         long long int audio_sample;
480         long long int audio_niveau;
481         long long int audio_square;
482
483         struct data_buffer audio_buffer[];
484 };
485 /*---------------------------------------------------------------------------*/
486 /*
487  *  VIDEO FUNCTION PROTOTYPES
488  */
489 /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
490 long easycap_unlocked_ioctl(struct file *, unsigned int, unsigned long);
491 int              easycap_dqbuf(struct easycap *, int);
492 int              submit_video_urbs(struct easycap *);
493 int              kill_video_urbs(struct easycap *);
494 int              field2frame(struct easycap *);
495 int              redaub(struct easycap *, void *, void *,
496                                                 int, int, u8, u8, bool);
497 void             easycap_testcard(struct easycap *, int);
498 int              fillin_formats(void);
499 int              newinput(struct easycap *, int);
500 int              adjust_standard(struct easycap *, v4l2_std_id);
501 int              adjust_format(struct easycap *, u32, u32, u32,
502                                                                 int, bool);
503 int              adjust_brightness(struct easycap *, int);
504 int              adjust_contrast(struct easycap *, int);
505 int              adjust_saturation(struct easycap *, int);
506 int              adjust_hue(struct easycap *, int);
507 int              adjust_volume(struct easycap *, int);
508 /*---------------------------------------------------------------------------*/
509 /*
510  *  AUDIO FUNCTION PROTOTYPES
511  */
512 /*---------------------------------------------------------------------------*/
513 #ifndef CONFIG_EASYCAP_OSS
514 int             easycap_alsa_probe(struct easycap *);
515 void            easycap_alsa_complete(struct urb *);
516 #else /* CONFIG_EASYCAP_OSS */
517 void             easyoss_complete(struct urb *);
518 #endif /* !CONFIG_EASYCAP_OSS */
519
520 int              easycap_sound_setup(struct easycap *);
521 int              submit_audio_urbs(struct easycap *);
522 int              kill_audio_urbs(struct easycap *);
523 void             easyoss_testtone(struct easycap *, int);
524 int              audio_setup(struct easycap *);
525 /*---------------------------------------------------------------------------*/
526 /*
527  *  LOW-LEVEL FUNCTION PROTOTYPES
528  */
529 /*---------------------------------------------------------------------------*/
530 int              audio_gainget(struct usb_device *);
531 int              audio_gainset(struct usb_device *, s8);
532
533 int              set_interface(struct usb_device *, u16);
534 int              wakeup_device(struct usb_device *);
535 int              confirm_resolution(struct usb_device *);
536 int              confirm_stream(struct usb_device *);
537
538 int              setup_stk(struct usb_device *, bool);
539 int              setup_saa(struct usb_device *, bool);
540 int              setup_vt(struct usb_device *);
541 int              check_stk(struct usb_device *, bool);
542 int              check_saa(struct usb_device *, bool);
543 int              ready_saa(struct usb_device *);
544 int              merit_saa(struct usb_device *);
545 int              check_vt(struct usb_device *);
546 int              select_input(struct usb_device *, int, int);
547 int              set_resolution(struct usb_device *,
548                                                 u16, u16, u16, u16);
549
550 int              read_saa(struct usb_device *, u16);
551 int              read_stk(struct usb_device *, u32);
552 int              write_saa(struct usb_device *, u16, u16);
553 int              write_000(struct usb_device *, u16, u16);
554 int              start_100(struct usb_device *);
555 int              stop_100(struct usb_device *);
556 int              write_300(struct usb_device *);
557 int              read_vt(struct usb_device *, u16);
558 int              write_vt(struct usb_device *, u16, u16);
559 int             isdongle(struct easycap *);
560 /*---------------------------------------------------------------------------*/
561 struct signed_div_result {
562         long long int quotient;
563         unsigned long long int remainder;
564 } signed_div(long long int, long long int);
565
566
567 /*---------------------------------------------------------------------------*/
568 /*
569  *  MACROS SAM(...) AND JOM(...) ALLOW DIAGNOSTIC OUTPUT TO BE TAGGED WITH
570  *  THE IDENTITY OF THE DONGLE TO WHICH IT APPLIES, BUT IF INVOKED WHEN THE
571  *  POINTER peasycap IS INVALID AN Oops IS LIKELY, AND ITS CAUSE MAY NOT BE
572  *  IMMEDIATELY OBVIOUS FROM A CASUAL READING OF THE SOURCE CODE.  BEWARE.
573 */
574 /*---------------------------------------------------------------------------*/
575 const char *strerror(int err);
576
577 #define SAY(format, args...) do { \
578         printk(KERN_DEBUG "easycap:: %s: " \
579                         format, __func__, ##args); \
580 } while (0)
581 #define SAM(format, args...) do { \
582         printk(KERN_DEBUG "easycap::%i%s: " \
583                         format, peasycap->isdongle, __func__, ##args);\
584 } while (0)
585
586 #ifdef CONFIG_EASYCAP_DEBUG
587 extern int easycap_debug;
588 #define JOT(n, format, args...) do { \
589         if (n <= easycap_debug) { \
590                 printk(KERN_DEBUG "easycap:: %s: " \
591                         format, __func__, ##args);\
592         } \
593 } while (0)
594 #define JOM(n, format, args...) do { \
595         if (n <= easycap_debug) { \
596                 printk(KERN_DEBUG "easycap::%i%s: " \
597                         format, peasycap->isdongle, __func__, ##args);\
598         } \
599 } while (0)
600
601 #else
602 #define JOT(n, format, args...) do {} while (0)
603 #define JOM(n, format, args...) do {} while (0)
604 #endif /* CONFIG_EASYCAP_DEBUG */
605
606 #define MICROSECONDS(X, Y) \
607                         ((1000000*((long long int)(X.tv_sec - Y.tv_sec))) + \
608                                         (long long int)(X.tv_usec - Y.tv_usec))
609
610 /*---------------------------------------------------------------------------*/
611 /*
612  *  (unsigned char *)P           pointer to next byte pair
613  *       (long int *)X           pointer to accumulating count
614  *       (long int *)Y           pointer to accumulating sum
615  *  (long long int *)Z           pointer to accumulating sum of squares
616  */
617 /*---------------------------------------------------------------------------*/
618 #define SUMMER(P, X, Y, Z) do {                                 \
619         unsigned char *p;                                    \
620         unsigned int u0, u1, u2;                             \
621         long int s;                                          \
622         p = (unsigned char *)(P);                            \
623         u0 = (unsigned int) (*p);                            \
624         u1 = (unsigned int) (*(p + 1));                      \
625         u2 = (unsigned int) ((u1 << 8) | u0);                \
626         if (0x8000 & u2)                                     \
627                 s = -(long int)(0x7FFF & (~u2));             \
628         else                                                 \
629                 s =  (long int)(0x7FFF & u2);                \
630         *((X)) += (long int) 1;                              \
631         *((Y)) += (long int) s;                              \
632         *((Z)) += ((long long int)(s) * (long long int)(s)); \
633 } while (0)
634 /*---------------------------------------------------------------------------*/
635
636 /*---------------------------------------------------------------------------*/
637 /* globals
638  */
639 /*---------------------------------------------------------------------------*/
640
641 extern bool easycap_readback;
642 extern const struct easycap_standard easycap_standard[];
643 extern struct easycap_format easycap_format[];
644 extern struct v4l2_queryctrl easycap_control[];
645 extern struct usb_driver easycap_usb_driver;
646 extern struct easycap_dongle easycapdc60_dongle[];
647 #ifdef CONFIG_EASYCAP_OSS
648 extern struct usb_class_driver easyoss_class;
649 #endif /* !CONFIG_EASYCAP_OSS */
650
651 #endif /* !__EASYCAP_H__  */