2 * QuickCam Driver For Video4Linux.
4 * Video4Linux conversion work by Alan Cox.
5 * Parport compatibility by Phil Blundell.
6 * Busy loop avoidance by Mark Cooke.
12 * When polling the QuickCam for a response, busy-wait for a
13 * maximum of this many loops. The default of 250 gives little
14 * impact on interactive response.
16 * NOTE: If this parameter is set too high, the processor
17 * will busy wait until this loop times out, and then
18 * slowly poll for a further 5 seconds before failing
19 * the transaction. You have been warned.
21 * yieldlines=<1 - 250>
23 * When acquiring a frame from the camera, the data gathering
24 * loop will yield back to the scheduler after completing
25 * this many lines. The default of 4 provides a trade-off
26 * between increased frame acquisition time and impact on
27 * interactive response.
30 /* qcam-lib.c -- Library for programming with the Connectix QuickCam.
31 * See the included documentation for usage instructions and details
32 * of the protocol involved. */
35 /* Version 0.5, August 4, 1996 */
36 /* Version 0.7, August 27, 1996 */
37 /* Version 0.9, November 17, 1996 */
40 /******************************************************************
42 Copyright (C) 1996 by Scott Laird
44 Permission is hereby granted, free of charge, to any person obtaining
45 a copy of this software and associated documentation files (the
46 "Software"), to deal in the Software without restriction, including
47 without limitation the rights to use, copy, modify, merge, publish,
48 distribute, sublicense, and/or sell copies of the Software, and to
49 permit persons to whom the Software is furnished to do so, subject to
50 the following conditions:
52 The above copyright notice and this permission notice shall be
53 included in all copies or substantial portions of the Software.
55 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
56 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
58 IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
59 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
60 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
61 OTHER DEALINGS IN THE SOFTWARE.
63 ******************************************************************/
65 #include <linux/module.h>
66 #include <linux/delay.h>
67 #include <linux/errno.h>
69 #include <linux/init.h>
70 #include <linux/kernel.h>
71 #include <linux/slab.h>
73 #include <linux/parport.h>
74 #include <linux/sched.h>
75 #include <linux/version.h>
76 #include <linux/videodev.h>
77 #include <asm/semaphore.h>
78 #include <asm/uaccess.h>
82 static unsigned int maxpoll=250; /* Maximum busy-loop count for qcam I/O */
83 static unsigned int yieldlines=4; /* Yield after this many during capture */
84 static int video_nr = -1;
86 MODULE_PARM(maxpoll,"i");
87 MODULE_PARM(yieldlines,"i");
88 MODULE_PARM(video_nr,"i");
90 static inline int read_lpstatus(struct qcam_device *q)
92 return parport_read_status(q->pport);
95 static inline int read_lpcontrol(struct qcam_device *q)
97 return parport_read_control(q->pport);
100 static inline int read_lpdata(struct qcam_device *q)
102 return parport_read_data(q->pport);
105 static inline void write_lpdata(struct qcam_device *q, int d)
107 parport_write_data(q->pport, d);
110 static inline void write_lpcontrol(struct qcam_device *q, int d)
112 parport_write_control(q->pport, d);
115 static int qc_waithand(struct qcam_device *q, int val);
116 static int qc_command(struct qcam_device *q, int command);
117 static int qc_readparam(struct qcam_device *q);
118 static int qc_setscanmode(struct qcam_device *q);
119 static int qc_readbytes(struct qcam_device *q, char buffer[]);
121 static struct video_device qcam_template;
123 static int qc_calibrate(struct qcam_device *q)
126 * Bugfix by Hanno Mueller hmueller@kabel.de, Mai 21 96
127 * The white balance is an individiual value for each
134 qc_command(q, 27); /* AutoAdjustOffset */
135 qc_command(q, 0); /* Dummy Parameter, ignored by the camera */
137 /* GetOffset (33) will read 255 until autocalibration */
138 /* is finished. After that, a value of 1-254 will be */
143 value = qc_readparam(q);
147 } while (value == 0xff && count<2048);
153 /* Initialize the QuickCam driver control structure. This is where
154 * defaults are set for people who don't have a config file.*/
156 static struct qcam_device *qcam_init(struct parport *port)
158 struct qcam_device *q;
160 q = kmalloc(sizeof(struct qcam_device), GFP_KERNEL);
165 q->pdev = parport_register_device(port, "bw-qcam", NULL, NULL,
169 printk(KERN_ERR "bw-qcam: couldn't register for %s.\n",
175 memcpy(&q->vdev, &qcam_template, sizeof(qcam_template));
177 init_MUTEX(&q->lock);
179 q->port_mode = (QC_ANY | QC_NOTSET);
183 q->transfer_scale = 2;
190 q->status = QC_PARAM_CHANGE;
195 /* qc_command is probably a bit of a misnomer -- it's used to send
196 * bytes *to* the camera. Generally, these bytes are either commands
197 * or arguments to commands, so the name fits, but it still bugs me a
198 * bit. See the documentation for a list of commands. */
200 static int qc_command(struct qcam_device *q, int command)
205 write_lpdata(q, command);
206 write_lpcontrol(q, 6);
208 n1 = qc_waithand(q, 1);
210 write_lpcontrol(q, 0xe);
211 n2 = qc_waithand(q, 0);
213 cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
217 static int qc_readparam(struct qcam_device *q)
222 write_lpcontrol(q, 6);
223 n1 = qc_waithand(q, 1);
225 write_lpcontrol(q, 0xe);
226 n2 = qc_waithand(q, 0);
228 cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
232 /* qc_waithand busy-waits for a handshake signal from the QuickCam.
233 * Almost all communication with the camera requires handshaking. */
235 static int qc_waithand(struct qcam_device *q, int val)
242 while (!((status = read_lpstatus(q)) & 8))
244 /* 1000 is enough spins on the I/O for all normal
245 cases, at that point we start to poll slowly
246 until the camera wakes up. However, we are
247 busy blocked until the camera responds, so
248 setting it lower is much better for interactive
253 current->state=TASK_INTERRUPTIBLE;
254 schedule_timeout(HZ/200);
256 if(runs>(maxpoll+1000)) /* 5 seconds */
262 while (((status = read_lpstatus(q)) & 8))
264 /* 1000 is enough spins on the I/O for all normal
265 cases, at that point we start to poll slowly
266 until the camera wakes up. However, we are
267 busy blocked until the camera responds, so
268 setting it lower is much better for interactive
273 current->state=TASK_INTERRUPTIBLE;
274 schedule_timeout(HZ/200);
276 if(runs++>(maxpoll+1000)) /* 5 seconds */
284 /* Waithand2 is used when the qcam is in bidirectional mode, and the
285 * handshaking signal is CamRdy2 (bit 0 of data reg) instead of CamRdy1
286 * (bit 3 of status register). It also returns the last value read,
287 * since this data is useful. */
289 static unsigned int qc_waithand2(struct qcam_device *q, int val)
296 status = read_lpdata(q);
297 /* 1000 is enough spins on the I/O for all normal
298 cases, at that point we start to poll slowly
299 until the camera wakes up. However, we are
300 busy blocked until the camera responds, so
301 setting it lower is much better for interactive
306 current->state=TASK_INTERRUPTIBLE;
307 schedule_timeout(HZ/200);
309 if(runs++>(maxpoll+1000)) /* 5 seconds */
312 while ((status & 1) != val);
318 /* Try to detect a QuickCam. It appears to flash the upper 4 bits of
319 the status register at 5-10 Hz. This is only used in the autoprobe
320 code. Be aware that this isn't the way Connectix detects the
321 camera (they send a reset and try to handshake), but this should be
322 almost completely safe, while their method screws up my printer if
323 I plug it in before the camera. */
325 static int qc_detect(struct qcam_device *q)
331 lastreg = reg = read_lpstatus(q) & 0xf0;
333 for (i = 0; i < 500; i++)
335 reg = read_lpstatus(q) & 0xf0;
344 /* Force camera detection during testing. Sometimes the camera
345 won't be flashing these bits. Possibly unloading the module
346 in the middle of a grab? Or some timeout condition?
347 I've seen this parameter as low as 19 on my 450Mhz box - mpc */
348 printk("Debugging: QCam detection counter <30-200 counts as detected>: %d\n", count);
352 /* Be (even more) liberal in what you accept... */
354 /* if (count > 30 && count < 200) */
355 if (count > 20 && count < 300)
356 return 1; /* found */
358 return 0; /* not found */
362 /* Reset the QuickCam. This uses the same sequence the Windows
363 * QuickPic program uses. Someone with a bi-directional port should
364 * check that bi-directional mode is detected right, and then
365 * implement bi-directional mode in qc_readbyte(). */
367 static void qc_reset(struct qcam_device *q)
369 switch (q->port_mode & QC_FORCE_MASK)
371 case QC_FORCE_UNIDIR:
372 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_UNIDIR;
376 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_BIDIR;
380 write_lpcontrol(q, 0x20);
381 write_lpdata(q, 0x75);
383 if (read_lpdata(q) != 0x75) {
384 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_BIDIR;
386 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_UNIDIR;
391 write_lpcontrol(q, 0xb);
393 write_lpcontrol(q, 0xe);
394 qc_setscanmode(q); /* in case port_mode changed */
398 /* Decide which scan mode to use. There's no real requirement that
399 * the scanmode match the resolution in q->height and q-> width -- the
400 * camera takes the picture at the resolution specified in the
401 * "scanmode" and then returns the image at the resolution specified
402 * with the resolution commands. If the scan is bigger than the
403 * requested resolution, the upper-left hand corner of the scan is
404 * returned. If the scan is smaller, then the rest of the image
405 * returned contains garbage. */
407 static int qc_setscanmode(struct qcam_device *q)
409 int old_mode = q->mode;
411 switch (q->transfer_scale)
433 switch (q->port_mode & QC_MODE_MASK)
443 if (q->mode != old_mode)
444 q->status |= QC_PARAM_CHANGE;
450 /* Reset the QuickCam and program for brightness, contrast,
451 * white-balance, and resolution. */
453 void qc_set(struct qcam_device *q)
460 /* Set the brightness. Yes, this is repetitive, but it works.
461 * Shorter versions seem to fail subtly. Feel free to try :-). */
462 /* I think the problem was in qc_command, not here -- bls */
465 qc_command(q, q->brightness);
467 val = q->height / q->transfer_scale;
470 if ((q->port_mode & QC_MODE_MASK) == QC_UNIDIR && q->bpp == 6) {
471 /* The normal "transfers per line" calculation doesn't seem to work
472 as expected here (and yet it works fine in qc_scan). No idea
473 why this case is the odd man out. Fortunately, Laird's original
474 working version gives me a good way to guess at working values.
477 val2 = q->transfer_scale * 4;
479 val = q->width * q->bpp;
480 val2 = (((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? 24 : 8) *
483 val = (val + val2 - 1) / val2;
487 /* Setting top and left -- bls */
489 qc_command(q, q->top);
491 qc_command(q, q->left / 2);
494 qc_command(q, q->contrast);
496 qc_command(q, q->whitebal);
498 /* Clear flag that we must update the grabbing parameters on the camera
499 before we grab the next frame */
500 q->status &= (~QC_PARAM_CHANGE);
503 /* Qc_readbytes reads some bytes from the QC and puts them in
504 the supplied buffer. It returns the number of bytes read,
507 static inline int qc_readbytes(struct qcam_device *q, char buffer[])
511 unsigned int hi2, lo2;
512 static int state = 0;
520 switch (q->port_mode & QC_MODE_MASK)
522 case QC_BIDIR: /* Bi-directional Port */
523 write_lpcontrol(q, 0x26);
524 lo = (qc_waithand2(q, 1) >> 1);
525 hi = (read_lpstatus(q) >> 3) & 0x1f;
526 write_lpcontrol(q, 0x2e);
527 lo2 = (qc_waithand2(q, 0) >> 1);
528 hi2 = (read_lpstatus(q) >> 3) & 0x1f;
532 buffer[0] = lo & 0xf;
533 buffer[1] = ((lo & 0x70) >> 4) | ((hi & 1) << 3);
534 buffer[2] = (hi & 0x1e) >> 1;
535 buffer[3] = lo2 & 0xf;
536 buffer[4] = ((lo2 & 0x70) >> 4) | ((hi2 & 1) << 3);
537 buffer[5] = (hi2 & 0x1e) >> 1;
541 buffer[0] = lo & 0x3f;
542 buffer[1] = ((lo & 0x40) >> 6) | (hi << 1);
543 buffer[2] = lo2 & 0x3f;
544 buffer[3] = ((lo2 & 0x40) >> 6) | (hi2 << 1);
550 case QC_UNIDIR: /* Unidirectional Port */
551 write_lpcontrol(q, 6);
552 lo = (qc_waithand(q, 1) & 0xf0) >> 4;
553 write_lpcontrol(q, 0xe);
554 hi = (qc_waithand(q, 0) & 0xf0) >> 4;
567 buffer[0] = (lo << 2) | ((hi & 0xc) >> 2);
568 q->saved_bits = (hi & 3) << 4;
573 buffer[0] = lo | q->saved_bits;
574 q->saved_bits = hi << 2;
579 buffer[0] = ((lo & 0xc) >> 2) | q->saved_bits;
580 buffer[1] = ((lo & 3) << 4) | hi;
592 /* requests a scan from the camera. It sends the correct instructions
593 * to the camera and then reads back the correct number of bytes. In
594 * previous versions of this routine the return structure contained
595 * the raw output from the camera, and there was a 'qc_convertscan'
596 * function that converted that to a useful format. In version 0.3 I
597 * rolled qc_convertscan into qc_scan and now I only return the
598 * converted scan. The format is just an one-dimensional array of
599 * characters, one for each pixel, with 0=black up to n=white, where
600 * n=2^(bit depth)-1. Ask me for more details if you don't understand
603 long qc_capture(struct qcam_device * q, char *buf, unsigned long len)
607 int linestotrans, transperline;
620 qc_command(q, q->mode);
622 if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR)
624 write_lpcontrol(q, 0x2e); /* turn port around */
625 write_lpcontrol(q, 0x26);
626 (void) qc_waithand(q, 1);
627 write_lpcontrol(q, 0x2e);
628 (void) qc_waithand(q, 0);
631 /* strange -- should be 15:63 below, but 4bpp is odd */
632 invert = (q->bpp == 4) ? 16 : 63;
634 linestotrans = q->height / q->transfer_scale;
635 pixels_per_line = q->width / q->transfer_scale;
636 transperline = q->width * q->bpp;
637 divisor = (((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? 24 : 8) *
639 transperline = (transperline + divisor - 1) / divisor;
641 for (i = 0, yield = yieldlines; i < linestotrans; i++)
643 for (pixels_read = j = 0; j < transperline; j++)
645 bytes = qc_readbytes(q, buffer);
646 for (k = 0; k < bytes && (pixels_read + k) < pixels_per_line; k++)
649 if (buffer[k] == 0 && invert == 16)
651 /* 4bpp is odd (again) -- inverter is 16, not 15, but output
652 must be 0-15 -- bls */
655 o=i*pixels_per_line + pixels_read + k;
659 put_user((invert - buffer[k])<<shift, buf+o);
662 pixels_read += bytes;
664 (void) qc_readbytes(q, 0); /* reset state machine */
666 /* Grabbing an entire frame from the quickcam is a lengthy
667 process. We don't (usually) want to busy-block the
668 processor for the entire frame. yieldlines is a module
669 parameter. If we yield every line, the minimum frame
670 time will be 240 / 200 = 1.2 seconds. The compile-time
671 default is to yield every 4 lines. */
673 current->state=TASK_INTERRUPTIBLE;
674 schedule_timeout(HZ/200);
675 yield = i + yieldlines;
679 if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR)
681 write_lpcontrol(q, 2);
682 write_lpcontrol(q, 6);
684 write_lpcontrol(q, 0xe);
692 * Video4linux interfacing
695 static int qcam_do_ioctl(struct inode *inode, struct file *file,
696 unsigned int cmd, void *arg)
698 struct video_device *dev = video_devdata(file);
699 struct qcam_device *qcam=(struct qcam_device *)dev;
705 struct video_capability *b = arg;
706 strcpy(b->name, "Quickcam");
707 b->type = VID_TYPE_CAPTURE|VID_TYPE_SCALES|VID_TYPE_MONOCHROME;
718 struct video_channel *v = arg;
723 /* Good question.. its composite or SVHS so.. */
724 v->type = VIDEO_TYPE_CAMERA;
725 strcpy(v->name, "Camera");
730 struct video_channel *v = arg;
737 struct video_tuner *v = arg;
740 strcpy(v->name, "Format");
744 v->mode = VIDEO_MODE_AUTO;
749 struct video_tuner *v = arg;
752 if(v->mode!=VIDEO_MODE_AUTO)
758 struct video_picture *p = arg;
761 p->brightness=qcam->brightness<<8;
762 p->contrast=qcam->contrast<<8;
763 p->whiteness=qcam->whitebal<<8;
765 p->palette=VIDEO_PALETTE_GREY;
770 struct video_picture *p = arg;
771 if(p->palette!=VIDEO_PALETTE_GREY)
773 if(p->depth!=4 && p->depth!=6)
777 * Now load the camera.
780 qcam->brightness = p->brightness>>8;
781 qcam->contrast = p->contrast>>8;
782 qcam->whitebal = p->whiteness>>8;
783 qcam->bpp = p->depth;
786 qc_setscanmode(qcam);
788 qcam->status |= QC_PARAM_CHANGE;
794 struct video_window *vw = arg;
799 if(vw->height<60||vw->height>240)
801 if(vw->width<80||vw->width>320)
806 qcam->transfer_scale = 4;
808 if(vw->width>=160 && vw->height>=120)
810 qcam->transfer_scale = 2;
812 if(vw->width>=320 && vw->height>=240)
816 qcam->transfer_scale = 1;
819 qc_setscanmode(qcam);
822 /* We must update the camera before we grab. We could
823 just have changed the grab size */
824 qcam->status |= QC_PARAM_CHANGE;
826 /* Ok we figured out what to use from our wide choice */
831 struct video_window *vw = arg;
832 memset(vw, 0, sizeof(*vw));
833 vw->width=qcam->width/qcam->transfer_scale;
834 vw->height=qcam->height/qcam->transfer_scale;
853 static int qcam_ioctl(struct inode *inode, struct file *file,
854 unsigned int cmd, unsigned long arg)
856 return video_usercopy(inode, file, cmd, arg, qcam_do_ioctl);
859 static int qcam_read(struct file *file, char *buf,
860 size_t count, loff_t *ppos)
862 struct video_device *v = video_devdata(file);
863 struct qcam_device *qcam=(struct qcam_device *)v;
865 parport_claim_or_block(qcam->pdev);
871 /* Update the camera parameters if we need to */
872 if (qcam->status & QC_PARAM_CHANGE)
875 len=qc_capture(qcam, buf,count);
879 parport_release(qcam->pdev);
883 static struct file_operations qcam_fops = {
884 .owner = THIS_MODULE,
885 .open = video_exclusive_open,
886 .release = video_exclusive_release,
891 static struct video_device qcam_template=
893 .owner = THIS_MODULE,
894 .name = "Connectix Quickcam",
895 .type = VID_TYPE_CAPTURE,
896 .hardware = VID_HARDWARE_QCAM_BW,
901 static struct qcam_device *qcams[MAX_CAMS];
902 static unsigned int num_cams = 0;
904 int init_bwqcam(struct parport *port)
906 struct qcam_device *qcam;
908 if (num_cams == MAX_CAMS)
910 printk(KERN_ERR "Too many Quickcams (max %d)\n", MAX_CAMS);
914 qcam=qcam_init(port);
918 parport_claim_or_block(qcam->pdev);
922 if(qc_detect(qcam)==0)
924 parport_release(qcam->pdev);
925 parport_unregister_device(qcam->pdev);
931 parport_release(qcam->pdev);
933 printk(KERN_INFO "Connectix Quickcam on %s\n", qcam->pport->name);
935 if(video_register_device(&qcam->vdev, VFL_TYPE_GRABBER, video_nr)==-1)
937 parport_unregister_device(qcam->pdev);
942 qcams[num_cams++] = qcam;
947 void close_bwqcam(struct qcam_device *qcam)
949 video_unregister_device(&qcam->vdev);
950 parport_unregister_device(qcam->pdev);
954 /* The parport parameter controls which parports will be scanned.
955 * Scanning all parports causes some printers to print a garbage page.
956 * -- March 14, 1999 Billy Donahue <billy@escape.com> */
958 static char *parport[MAX_CAMS] = { NULL, };
959 MODULE_PARM(parport, "1-" __MODULE_STRING(MAX_CAMS) "s");
962 static void __exit exit_bw_qcams(void)
966 for (i = 0; i < num_cams; i++)
967 close_bwqcam(qcams[i]);
970 static int __init init_bw_qcams(void)
972 struct parport *port;
976 if(parport[0] && strncmp(parport[0], "auto", 4)){
977 /* user gave parport parameters */
978 for(n=0; parport[n] && n<MAX_CAMS; n++){
981 r = simple_strtoul(parport[n], &ep, 0);
982 if(ep == parport[n]){
984 "bw-qcam: bad port specifier \"%s\"\n",
988 for (port=parport_enumerate(); port; port=port->next){
995 return (num_cams)?0:-ENODEV;
997 /* no parameter or "auto" */
998 for (port = parport_enumerate(); port; port=port->next)
1001 /* Do some sanity checks on the module parameters. */
1002 if (maxpoll > 5000) {
1003 printk("Connectix Quickcam max-poll was above 5000. Using 5000.\n");
1007 if (yieldlines < 1) {
1008 printk("Connectix Quickcam yieldlines was less than 1. Using 1.\n");
1012 return (num_cams)?0:-ENODEV;
1014 for (port = parport_enumerate(); port; port=port->next)
1020 module_init(init_bw_qcams);
1021 module_exit(exit_bw_qcams);
1023 MODULE_LICENSE("GPL");