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/workqueue.h>
66 #include <linux/poll.h>
67 #include <linux/mm.h>
68 #include <linux/fs.h>
69 #include <linux/delay.h>
70 #include <linux/types.h>
71 
72 #include <linux/vmalloc.h>
73 #include <linux/sound.h>
74 #include <sound/core.h>
75 #include <sound/pcm.h>
76 #include <sound/pcm_params.h>
77 #include <sound/info.h>
78 #include <sound/initval.h>
79 #include <sound/control.h>
80 #include <media/v4l2-dev.h>
81 #include <media/v4l2-device.h>
82 #include <linux/videodev2.h>
83 #include <linux/soundcard.h>
84 
85 /*---------------------------------------------------------------------------*/
86 /*  VENDOR, PRODUCT:  Syntek Semiconductor Co., Ltd
87  *
88  *      EITHER        EasyCAP USB 2.0 Video Adapter with Audio, Model No. DC60
89  *               with input cabling:  AUDIO(L), AUDIO(R), CVBS, S-VIDEO.
90  *
91  *          OR        EasyCAP 4CHANNEL USB 2.0 DVR, Model No. EasyCAP002
92  *               with input cabling:  MICROPHONE, CVBS1, CVBS2, CVBS3, CVBS4.
93  */
94 /*---------------------------------------------------------------------------*/
95 #define USB_EASYCAP_VENDOR_ID	0x05e1
96 #define USB_EASYCAP_PRODUCT_ID	0x0408
97 
98 #define EASYCAP_DRIVER_VERSION "0.9.01"
99 #define EASYCAP_DRIVER_DESCRIPTION "easycapdc60"
100 
101 #define DONGLE_MANY 8
102 #define INPUT_MANY 6
103 /*---------------------------------------------------------------------------*/
104 /*
105  *  DEFAULT LUMINANCE, CONTRAST, SATURATION AND HUE
106  */
107 /*---------------------------------------------------------------------------*/
108 #define SAA_0A_DEFAULT 0x7F
109 #define SAA_0B_DEFAULT 0x3F
110 #define SAA_0C_DEFAULT 0x2F
111 #define SAA_0D_DEFAULT 0x00
112 /*---------------------------------------------------------------------------*/
113 /*
114  *  VIDEO STREAMING PARAMETERS:
115  *  USB 2.0 PROVIDES FOR HIGH-BANDWIDTH ENDPOINTS WITH AN UPPER LIMIT
116  *  OF 3072 BYTES PER MICROFRAME for wMaxPacketSize.
117  */
118 /*---------------------------------------------------------------------------*/
119 #define VIDEO_ISOC_BUFFER_MANY 16
120 #define VIDEO_ISOC_ORDER 3
121 #define VIDEO_ISOC_FRAMESPERDESC ((unsigned int) 1 << VIDEO_ISOC_ORDER)
122 #define USB_2_0_MAXPACKETSIZE 3072
123 #if (USB_2_0_MAXPACKETSIZE > PAGE_SIZE)
124 #error video_isoc_buffer[.] will not be big enough
125 #endif
126 #define VIDEO_JUNK_TOLERATE VIDEO_ISOC_BUFFER_MANY
127 #define VIDEO_LOST_TOLERATE 50
128 /*---------------------------------------------------------------------------*/
129 /*
130  *  VIDEO BUFFERS
131  */
132 /*---------------------------------------------------------------------------*/
133 #define FIELD_BUFFER_SIZE (203 * PAGE_SIZE)
134 #define FRAME_BUFFER_SIZE (405 * PAGE_SIZE)
135 #define FIELD_BUFFER_MANY 4
136 #define FRAME_BUFFER_MANY 6
137 /*---------------------------------------------------------------------------*/
138 /*
139  *  AUDIO STREAMING PARAMETERS
140  */
141 /*---------------------------------------------------------------------------*/
142 #define AUDIO_ISOC_BUFFER_MANY 16
143 #define AUDIO_ISOC_ORDER 1
144 #define AUDIO_ISOC_FRAMESPERDESC 32
145 #define AUDIO_ISOC_BUFFER_SIZE (PAGE_SIZE << AUDIO_ISOC_ORDER)
146 /*---------------------------------------------------------------------------*/
147 /*
148  *  AUDIO BUFFERS
149  */
150 /*---------------------------------------------------------------------------*/
151 #define AUDIO_FRAGMENT_MANY 32
152 #define PAGES_PER_AUDIO_FRAGMENT 4
153 /*---------------------------------------------------------------------------*/
154 /*
155  *  IT IS ESSENTIAL THAT EVEN-NUMBERED STANDARDS ARE 25 FRAMES PER SECOND,
156  *                        ODD-NUMBERED STANDARDS ARE 30 FRAMES PER SECOND.
157  *  THE NUMBERING OF STANDARDS MUST NOT BE CHANGED WITHOUT DUE CARE.  NOT
158  *  ONLY MUST THE PARAMETER
159  *                             STANDARD_MANY
160  *  BE CHANGED TO CORRESPOND TO THE NEW NUMBER OF STANDARDS, BUT ALSO THE
161  *  NUMBERING MUST REMAIN AN UNBROKEN ASCENDING SEQUENCE:  DUMMY STANDARDS
162  *  MAY NEED TO BE ADDED.   APPROPRIATE CHANGES WILL ALWAYS BE REQUIRED IN
163  *  ROUTINE fillin_formats() AND POSSIBLY ELSEWHERE.  BEWARE.
164  */
165 /*---------------------------------------------------------------------------*/
166 #define  PAL_BGHIN      0
167 #define  PAL_Nc         2
168 #define  SECAM          4
169 #define  NTSC_N         6
170 #define  NTSC_N_443     8
171 #define  NTSC_M         1
172 #define  NTSC_443       3
173 #define  NTSC_M_JP      5
174 #define  PAL_60         7
175 #define  PAL_M          9
176 #define  PAL_BGHIN_SLOW    10
177 #define  PAL_Nc_SLOW       12
178 #define  SECAM_SLOW        14
179 #define  NTSC_N_SLOW       16
180 #define  NTSC_N_443_SLOW   18
181 #define  NTSC_M_SLOW       11
182 #define  NTSC_443_SLOW     13
183 #define  NTSC_M_JP_SLOW    15
184 #define  PAL_60_SLOW       17
185 #define  PAL_M_SLOW        19
186 #define  STANDARD_MANY 20
187 /*---------------------------------------------------------------------------*/
188 /*
189  *  ENUMS
190  */
191 /*---------------------------------------------------------------------------*/
192 enum {
193 	AT_720x576,
194 	AT_704x576,
195 	AT_640x480,
196 	AT_720x480,
197 	AT_360x288,
198 	AT_320x240,
199 	AT_360x240,
200 	RESOLUTION_MANY
201 };
202 enum {
203 	FMT_UYVY,
204 	FMT_YUY2,
205 	FMT_RGB24,
206 	FMT_RGB32,
207 	FMT_BGR24,
208 	FMT_BGR32,
209 	PIXELFORMAT_MANY
210 };
211 enum {
212 	FIELD_NONE,
213 	FIELD_INTERLACED,
214 	INTERLACE_MANY
215 };
216 #define SETTINGS_MANY	(STANDARD_MANY * \
217 			RESOLUTION_MANY * \
218 			2 * \
219 			PIXELFORMAT_MANY * \
220 			INTERLACE_MANY)
221 /*---------------------------------------------------------------------------*/
222 /*
223  *  STRUCTURE DEFINITIONS
224  */
225 /*---------------------------------------------------------------------------*/
226 struct easycap_dongle {
227 	struct easycap *peasycap;
228 	struct mutex mutex_video;
229 	struct mutex mutex_audio;
230 };
231 /*---------------------------------------------------------------------------*/
232 struct data_buffer {
233 	struct list_head list_head;
234 	void *pgo;
235 	void *pto;
236 	u16 kount;
237 	u16 input;
238 };
239 /*---------------------------------------------------------------------------*/
240 struct data_urb {
241 	struct list_head list_head;
242 	struct urb *purb;
243 	int isbuf;
244 	int length;
245 };
246 /*---------------------------------------------------------------------------*/
247 struct easycap_standard {
248 	u16 mask;
249 struct v4l2_standard v4l2_standard;
250 };
251 struct easycap_format {
252 	u16 mask;
253 	char name[128];
254 struct v4l2_format v4l2_format;
255 };
256 struct inputset {
257 	int input;
258 	int input_ok;
259 	int standard_offset;
260 	int standard_offset_ok;
261 	int format_offset;
262 	int format_offset_ok;
263 	int brightness;
264 	int brightness_ok;
265 	int contrast;
266 	int contrast_ok;
267 	int saturation;
268 	int saturation_ok;
269 	int hue;
270 	int hue_ok;
271 };
272 /*---------------------------------------------------------------------------*/
273 /*
274  *   easycap.ilk == 0   =>  CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=256
275  *   easycap.ilk == 2   =>  CVBS+S-VIDEO HARDWARE, AUDIO wMaxPacketSize=9
276  *   easycap.ilk == 3   =>     FOUR-CVBS HARDWARE, AUDIO wMaxPacketSize=9
277  */
278 /*---------------------------------------------------------------------------*/
279 struct easycap {
280 	int isdongle;
281 	int minor;
282 
283 	struct video_device video_device;
284 	struct v4l2_device v4l2_device;
285 
286 	int status;
287 	unsigned int audio_pages_per_fragment;
288 	unsigned int audio_bytes_per_fragment;
289 	unsigned int audio_buffer_page_many;
290 
291 #define UPSAMPLE
292 #ifdef UPSAMPLE
293 	s16 oldaudio;
294 #endif /*UPSAMPLE*/
295 
296 	int ilk;
297 	bool microphone;
298 
299 	struct usb_device *pusb_device;
300 	struct usb_interface *pusb_interface;
301 
302 	struct kref kref;
303 
304 	int queued[FRAME_BUFFER_MANY];
305 	int done[FRAME_BUFFER_MANY];
306 
307 	wait_queue_head_t wq_video;
308 	wait_queue_head_t wq_audio;
309 	wait_queue_head_t wq_trigger;
310 
311 	int input;
312 	int polled;
313 	int standard_offset;
314 	int format_offset;
315 	struct inputset inputset[INPUT_MANY];
316 
317 	bool ntsc;
318 	int fps;
319 	int usec;
320 	int tolerate;
321 	int skip;
322 	int skipped;
323 	int lost[INPUT_MANY];
324 	int merit[180];
325 
326 	int    video_interface;
327 	int    video_altsetting_on;
328 	int    video_altsetting_off;
329 	int    video_endpointnumber;
330 	int    video_isoc_maxframesize;
331 	int    video_isoc_buffer_size;
332 	int    video_isoc_framesperdesc;
333 
334 	int    video_isoc_streaming;
335 	int    video_isoc_sequence;
336 	int    video_idle;
337 	int    video_eof;
338 	int    video_junk;
339 
340 	struct data_buffer video_isoc_buffer[VIDEO_ISOC_BUFFER_MANY];
341 	struct data_buffer field_buffer[FIELD_BUFFER_MANY]
342 					[(FIELD_BUFFER_SIZE/PAGE_SIZE)];
343 	struct data_buffer frame_buffer[FRAME_BUFFER_MANY]
344 					[(FRAME_BUFFER_SIZE/PAGE_SIZE)];
345 
346 	struct list_head urb_video_head;
347 	struct list_head *purb_video_head;
348 
349 	u8 cache[8];
350 	u8 *pcache;
351 	int video_mt;
352 	int audio_mt;
353 	u32 isequence;
354 
355 	int vma_many;
356 /*---------------------------------------------------------------------------*/
357 /*
358  *  BUFFER INDICATORS
359  */
360 /*---------------------------------------------------------------------------*/
361 	int field_fill;	/* Field buffer being filled by easycap_complete().  */
362 			/*   Bumped only by easycap_complete().              */
363 	int field_page;	/* Page of field buffer page being filled by         */
364 			/*   easycap_complete().                             */
365 	int field_read;	/* Field buffer to be read by field2frame().         */
366 			/*   Bumped only by easycap_complete().              */
367 	int frame_fill;	/* Frame buffer being filled by field2frame().       */
368 			/*   Bumped only by easycap_dqbuf() when             */
369 			/*   field2frame() has created a complete frame.     */
370 	int frame_read;	/* Frame buffer offered to user by DQBUF.            */
371 			/*   Set only by easycap_dqbuf() to trail frame_fill.*/
372 	int frame_lock;	/* Flag set to 1 by DQBUF and cleared by QBUF        */
373 /*---------------------------------------------------------------------------*/
374 /*
375  *  IMAGE PROPERTIES
376  */
377 /*---------------------------------------------------------------------------*/
378 	u32                   pixelformat;
379 	int                     width;
380 	int                     height;
381 	int                     bytesperpixel;
382 	bool                    byteswaporder;
383 	bool                    decimatepixel;
384 	bool                    offerfields;
385 	int                     frame_buffer_used;
386 	int                     frame_buffer_many;
387 	int                     videofieldamount;
388 
389 	int                     brightness;
390 	int                     contrast;
391 	int                     saturation;
392 	int                     hue;
393 
394 	int allocation_video_urb;
395 	int allocation_video_page;
396 	int allocation_video_struct;
397 	int registered_video;
398 /*---------------------------------------------------------------------------*/
399 /*
400  *  ALSA
401  */
402 /*---------------------------------------------------------------------------*/
403 	struct snd_pcm_hardware alsa_hardware;
404 	struct snd_card *psnd_card;
405 	struct snd_pcm *psnd_pcm;
406 	struct snd_pcm_substream *psubstream;
407 	int dma_fill;
408 	int dma_next;
409 	int dma_read;
410 /*---------------------------------------------------------------------------*/
411 /*
412  *  SOUND PROPERTIES
413  */
414 /*---------------------------------------------------------------------------*/
415 	int audio_interface;
416 	int audio_altsetting_on;
417 	int audio_altsetting_off;
418 	int audio_endpointnumber;
419 	int audio_isoc_maxframesize;
420 	int audio_isoc_buffer_size;
421 	int audio_isoc_framesperdesc;
422 
423 	int audio_isoc_streaming;
424 	int audio_idle;
425 	int audio_eof;
426 	int volume;
427 	int mute;
428 	s8 gain;
429 
430 	struct data_buffer audio_isoc_buffer[AUDIO_ISOC_BUFFER_MANY];
431 
432 	struct list_head urb_audio_head;
433 	struct list_head *purb_audio_head;
434 /*---------------------------------------------------------------------------*/
435 /*
436  *  BUFFER INDICATORS
437  */
438 /*---------------------------------------------------------------------------*/
439 	int audio_fill;	/* Audio buffer being filled by easycap_complete().  */
440 			/*   Bumped only by easycap_complete().              */
441 	int audio_read;	/* Audio buffer page being read by easycap_read().   */
442 			/*   Set by easycap_read() to trail audio_fill by    */
443 			/*   one fragment.                                   */
444 /*---------------------------------------------------------------------------*/
445 /*
446  *  SOUND PROPERTIES
447  */
448 /*---------------------------------------------------------------------------*/
449 	int allocation_audio_urb;
450 	int allocation_audio_page;
451 	int allocation_audio_struct;
452 	int registered_audio;
453 
454 	long long int audio_sample;
455 	long long int audio_niveau;
456 	long long int audio_square;
457 
458 	struct data_buffer audio_buffer[];
459 };
460 /*---------------------------------------------------------------------------*/
461 /*
462  *  VIDEO FUNCTION PROTOTYPES
463  */
464 /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
465 int easycap_newinput(struct easycap *, int);
466 void easycap_testcard(struct easycap *, int);
467 int easycap_isdongle(struct easycap *);
468 
469 long easycap_unlocked_ioctl(struct file *, unsigned int, unsigned long);
470 
471 int easycap_video_dqbuf(struct easycap *, int);
472 int easycap_video_submit_urbs(struct easycap *);
473 int easycap_video_kill_urbs(struct easycap *);
474 int easycap_video_fillin_formats(void);
475 
476 int adjust_standard(struct easycap *, v4l2_std_id);
477 int adjust_format(struct easycap *, u32, u32, u32, int, bool);
478 int adjust_brightness(struct easycap *, int);
479 int adjust_contrast(struct easycap *, int);
480 int adjust_saturation(struct easycap *, int);
481 int adjust_hue(struct easycap *, int);
482 /*---------------------------------------------------------------------------*/
483 /*
484  *  AUDIO FUNCTION PROTOTYPES
485  */
486 /*---------------------------------------------------------------------------*/
487 int easycap_alsa_probe(struct easycap *);
488 int easycap_audio_kill_urbs(struct easycap *);
489 void easycap_alsa_complete(struct urb *);
490 /*---------------------------------------------------------------------------*/
491 /*
492  *  LOW-LEVEL FUNCTION PROTOTYPES
493  */
494 /*---------------------------------------------------------------------------*/
495 int easycap_audio_gainset(struct usb_device *, s8);
496 int easycap_audio_setup(struct easycap *);
497 
498 int easycap_wakeup_device(struct usb_device *);
499 
500 int setup_stk(struct usb_device *, bool);
501 int setup_saa(struct usb_device *, bool);
502 int ready_saa(struct usb_device *);
503 int merit_saa(struct usb_device *);
504 int check_vt(struct usb_device *);
505 int select_input(struct usb_device *, int, int);
506 int set_resolution(struct usb_device *, u16, u16, u16, u16);
507 
508 int read_saa(struct usb_device *, u16);
509 int write_saa(struct usb_device *, u16, u16);
510 int start_100(struct usb_device *);
511 int stop_100(struct usb_device *);
512 /*---------------------------------------------------------------------------*/
513 
514 
515 /*---------------------------------------------------------------------------*/
516 /*
517  *  MACROS SAM(...) AND JOM(...) ALLOW DIAGNOSTIC OUTPUT TO BE TAGGED WITH
518  *  THE IDENTITY OF THE DONGLE TO WHICH IT APPLIES, BUT IF INVOKED WHEN THE
519  *  POINTER peasycap IS INVALID AN Oops IS LIKELY, AND ITS CAUSE MAY NOT BE
520  *  IMMEDIATELY OBVIOUS FROM A CASUAL READING OF THE SOURCE CODE.  BEWARE.
521 */
522 /*---------------------------------------------------------------------------*/
523 const char *strerror(int err);
524 
525 #define SAY(format, args...) do { \
526 	printk(KERN_DEBUG "easycap:: %s: " \
527 			format, __func__, ##args); \
528 } while (0)
529 #define SAM(format, args...) do { \
530 	printk(KERN_DEBUG "easycap::%i%s: " \
531 			format, peasycap->isdongle, __func__, ##args);\
532 } while (0)
533 
534 #ifdef CONFIG_EASYCAP_DEBUG
535 extern int easycap_debug;
536 #define JOT(n, format, args...) do { \
537 	if (n <= easycap_debug) { \
538 		printk(KERN_DEBUG "easycap:: %s: " \
539 			format, __func__, ##args);\
540 	} \
541 } while (0)
542 #define JOM(n, format, args...) do { \
543 	if (n <= easycap_debug) { \
544 		printk(KERN_DEBUG "easycap::%i%s: " \
545 			format, peasycap->isdongle, __func__, ##args);\
546 	} \
547 } while (0)
548 
549 #else
550 #define JOT(n, format, args...) do {} while (0)
551 #define JOM(n, format, args...) do {} while (0)
552 #endif /* CONFIG_EASYCAP_DEBUG */
553 
554 /*---------------------------------------------------------------------------*/
555 
556 /*---------------------------------------------------------------------------*/
557 /* globals
558  */
559 /*---------------------------------------------------------------------------*/
560 
561 extern bool easycap_readback;
562 extern const struct easycap_standard easycap_standard[];
563 extern struct easycap_format easycap_format[];
564 extern struct v4l2_queryctrl easycap_control[];
565 extern struct easycap_dongle easycapdc60_dongle[];
566 
567 #endif /* !__EASYCAP_H__  */
568