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/videodev.h>
76 #include <asm/semaphore.h>
77 #include <asm/uaccess.h>
81 static unsigned int maxpoll=250; /* Maximum busy-loop count for qcam I/O */
82 static unsigned int yieldlines=4; /* Yield after this many during capture */
83 static int video_nr = -1;
85 MODULE_PARM(maxpoll,"i");
86 MODULE_PARM(yieldlines,"i");
87 MODULE_PARM(video_nr,"i");
89 static inline int read_lpstatus(struct qcam_device *q)
91 return parport_read_status(q->pport);
94 static inline int read_lpcontrol(struct qcam_device *q)
96 return parport_read_control(q->pport);
99 static inline int read_lpdata(struct qcam_device *q)
101 return parport_read_data(q->pport);
104 static inline void write_lpdata(struct qcam_device *q, int d)
106 parport_write_data(q->pport, d);
109 static inline void write_lpcontrol(struct qcam_device *q, int d)
111 parport_write_control(q->pport, d);
114 static int qc_waithand(struct qcam_device *q, int val);
115 static int qc_command(struct qcam_device *q, int command);
116 static int qc_readparam(struct qcam_device *q);
117 static int qc_setscanmode(struct qcam_device *q);
118 static int qc_readbytes(struct qcam_device *q, char buffer[]);
120 static struct video_device qcam_template;
122 static int qc_calibrate(struct qcam_device *q)
125 * Bugfix by Hanno Mueller hmueller@kabel.de, Mai 21 96
126 * The white balance is an individiual value for each
133 qc_command(q, 27); /* AutoAdjustOffset */
134 qc_command(q, 0); /* Dummy Parameter, ignored by the camera */
136 /* GetOffset (33) will read 255 until autocalibration */
137 /* is finished. After that, a value of 1-254 will be */
142 value = qc_readparam(q);
146 } while (value == 0xff && count<2048);
152 /* Initialize the QuickCam driver control structure. This is where
153 * defaults are set for people who don't have a config file.*/
155 static struct qcam_device *qcam_init(struct parport *port)
157 struct qcam_device *q;
159 q = kmalloc(sizeof(struct qcam_device), GFP_KERNEL);
164 q->pdev = parport_register_device(port, "bw-qcam", NULL, NULL,
168 printk(KERN_ERR "bw-qcam: couldn't register for %s.\n",
174 memcpy(&q->vdev, &qcam_template, sizeof(qcam_template));
176 init_MUTEX(&q->lock);
178 q->port_mode = (QC_ANY | QC_NOTSET);
182 q->transfer_scale = 2;
189 q->status = QC_PARAM_CHANGE;
194 /* qc_command is probably a bit of a misnomer -- it's used to send
195 * bytes *to* the camera. Generally, these bytes are either commands
196 * or arguments to commands, so the name fits, but it still bugs me a
197 * bit. See the documentation for a list of commands. */
199 static int qc_command(struct qcam_device *q, int command)
204 write_lpdata(q, command);
205 write_lpcontrol(q, 6);
207 n1 = qc_waithand(q, 1);
209 write_lpcontrol(q, 0xe);
210 n2 = qc_waithand(q, 0);
212 cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
216 static int qc_readparam(struct qcam_device *q)
221 write_lpcontrol(q, 6);
222 n1 = qc_waithand(q, 1);
224 write_lpcontrol(q, 0xe);
225 n2 = qc_waithand(q, 0);
227 cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
231 /* qc_waithand busy-waits for a handshake signal from the QuickCam.
232 * Almost all communication with the camera requires handshaking. */
234 static int qc_waithand(struct qcam_device *q, int val)
241 while (!((status = read_lpstatus(q)) & 8))
243 /* 1000 is enough spins on the I/O for all normal
244 cases, at that point we start to poll slowly
245 until the camera wakes up. However, we are
246 busy blocked until the camera responds, so
247 setting it lower is much better for interactive
252 current->state=TASK_INTERRUPTIBLE;
253 schedule_timeout(HZ/200);
255 if(runs>(maxpoll+1000)) /* 5 seconds */
261 while (((status = read_lpstatus(q)) & 8))
263 /* 1000 is enough spins on the I/O for all normal
264 cases, at that point we start to poll slowly
265 until the camera wakes up. However, we are
266 busy blocked until the camera responds, so
267 setting it lower is much better for interactive
272 current->state=TASK_INTERRUPTIBLE;
273 schedule_timeout(HZ/200);
275 if(runs++>(maxpoll+1000)) /* 5 seconds */
283 /* Waithand2 is used when the qcam is in bidirectional mode, and the
284 * handshaking signal is CamRdy2 (bit 0 of data reg) instead of CamRdy1
285 * (bit 3 of status register). It also returns the last value read,
286 * since this data is useful. */
288 static unsigned int qc_waithand2(struct qcam_device *q, int val)
295 status = read_lpdata(q);
296 /* 1000 is enough spins on the I/O for all normal
297 cases, at that point we start to poll slowly
298 until the camera wakes up. However, we are
299 busy blocked until the camera responds, so
300 setting it lower is much better for interactive
305 current->state=TASK_INTERRUPTIBLE;
306 schedule_timeout(HZ/200);
308 if(runs++>(maxpoll+1000)) /* 5 seconds */
311 while ((status & 1) != val);
317 /* Try to detect a QuickCam. It appears to flash the upper 4 bits of
318 the status register at 5-10 Hz. This is only used in the autoprobe
319 code. Be aware that this isn't the way Connectix detects the
320 camera (they send a reset and try to handshake), but this should be
321 almost completely safe, while their method screws up my printer if
322 I plug it in before the camera. */
324 static int qc_detect(struct qcam_device *q)
330 lastreg = reg = read_lpstatus(q) & 0xf0;
332 for (i = 0; i < 500; i++)
334 reg = read_lpstatus(q) & 0xf0;
343 /* Force camera detection during testing. Sometimes the camera
344 won't be flashing these bits. Possibly unloading the module
345 in the middle of a grab? Or some timeout condition?
346 I've seen this parameter as low as 19 on my 450Mhz box - mpc */
347 printk("Debugging: QCam detection counter <30-200 counts as detected>: %d\n", count);
351 /* Be (even more) liberal in what you accept... */
353 /* if (count > 30 && count < 200) */
354 if (count > 20 && count < 300)
355 return 1; /* found */
357 return 0; /* not found */
361 /* Reset the QuickCam. This uses the same sequence the Windows
362 * QuickPic program uses. Someone with a bi-directional port should
363 * check that bi-directional mode is detected right, and then
364 * implement bi-directional mode in qc_readbyte(). */
366 static void qc_reset(struct qcam_device *q)
368 switch (q->port_mode & QC_FORCE_MASK)
370 case QC_FORCE_UNIDIR:
371 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_UNIDIR;
375 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_BIDIR;
379 write_lpcontrol(q, 0x20);
380 write_lpdata(q, 0x75);
382 if (read_lpdata(q) != 0x75) {
383 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_BIDIR;
385 q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_UNIDIR;
390 write_lpcontrol(q, 0xb);
392 write_lpcontrol(q, 0xe);
393 qc_setscanmode(q); /* in case port_mode changed */
397 /* Decide which scan mode to use. There's no real requirement that
398 * the scanmode match the resolution in q->height and q-> width -- the
399 * camera takes the picture at the resolution specified in the
400 * "scanmode" and then returns the image at the resolution specified
401 * with the resolution commands. If the scan is bigger than the
402 * requested resolution, the upper-left hand corner of the scan is
403 * returned. If the scan is smaller, then the rest of the image
404 * returned contains garbage. */
406 static int qc_setscanmode(struct qcam_device *q)
408 int old_mode = q->mode;
410 switch (q->transfer_scale)
432 switch (q->port_mode & QC_MODE_MASK)
442 if (q->mode != old_mode)
443 q->status |= QC_PARAM_CHANGE;
449 /* Reset the QuickCam and program for brightness, contrast,
450 * white-balance, and resolution. */
452 void qc_set(struct qcam_device *q)
459 /* Set the brightness. Yes, this is repetitive, but it works.
460 * Shorter versions seem to fail subtly. Feel free to try :-). */
461 /* I think the problem was in qc_command, not here -- bls */
464 qc_command(q, q->brightness);
466 val = q->height / q->transfer_scale;
469 if ((q->port_mode & QC_MODE_MASK) == QC_UNIDIR && q->bpp == 6) {
470 /* The normal "transfers per line" calculation doesn't seem to work
471 as expected here (and yet it works fine in qc_scan). No idea
472 why this case is the odd man out. Fortunately, Laird's original
473 working version gives me a good way to guess at working values.
476 val2 = q->transfer_scale * 4;
478 val = q->width * q->bpp;
479 val2 = (((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? 24 : 8) *
482 val = (val + val2 - 1) / val2;
486 /* Setting top and left -- bls */
488 qc_command(q, q->top);
490 qc_command(q, q->left / 2);
493 qc_command(q, q->contrast);
495 qc_command(q, q->whitebal);
497 /* Clear flag that we must update the grabbing parameters on the camera
498 before we grab the next frame */
499 q->status &= (~QC_PARAM_CHANGE);
502 /* Qc_readbytes reads some bytes from the QC and puts them in
503 the supplied buffer. It returns the number of bytes read,
506 static inline int qc_readbytes(struct qcam_device *q, char buffer[])
510 unsigned int hi2, lo2;
511 static int state = 0;
519 switch (q->port_mode & QC_MODE_MASK)
521 case QC_BIDIR: /* Bi-directional Port */
522 write_lpcontrol(q, 0x26);
523 lo = (qc_waithand2(q, 1) >> 1);
524 hi = (read_lpstatus(q) >> 3) & 0x1f;
525 write_lpcontrol(q, 0x2e);
526 lo2 = (qc_waithand2(q, 0) >> 1);
527 hi2 = (read_lpstatus(q) >> 3) & 0x1f;
531 buffer[0] = lo & 0xf;
532 buffer[1] = ((lo & 0x70) >> 4) | ((hi & 1) << 3);
533 buffer[2] = (hi & 0x1e) >> 1;
534 buffer[3] = lo2 & 0xf;
535 buffer[4] = ((lo2 & 0x70) >> 4) | ((hi2 & 1) << 3);
536 buffer[5] = (hi2 & 0x1e) >> 1;
540 buffer[0] = lo & 0x3f;
541 buffer[1] = ((lo & 0x40) >> 6) | (hi << 1);
542 buffer[2] = lo2 & 0x3f;
543 buffer[3] = ((lo2 & 0x40) >> 6) | (hi2 << 1);
549 case QC_UNIDIR: /* Unidirectional Port */
550 write_lpcontrol(q, 6);
551 lo = (qc_waithand(q, 1) & 0xf0) >> 4;
552 write_lpcontrol(q, 0xe);
553 hi = (qc_waithand(q, 0) & 0xf0) >> 4;
566 buffer[0] = (lo << 2) | ((hi & 0xc) >> 2);
567 q->saved_bits = (hi & 3) << 4;
572 buffer[0] = lo | q->saved_bits;
573 q->saved_bits = hi << 2;
578 buffer[0] = ((lo & 0xc) >> 2) | q->saved_bits;
579 buffer[1] = ((lo & 3) << 4) | hi;
591 /* requests a scan from the camera. It sends the correct instructions
592 * to the camera and then reads back the correct number of bytes. In
593 * previous versions of this routine the return structure contained
594 * the raw output from the camera, and there was a 'qc_convertscan'
595 * function that converted that to a useful format. In version 0.3 I
596 * rolled qc_convertscan into qc_scan and now I only return the
597 * converted scan. The format is just an one-dimensional array of
598 * characters, one for each pixel, with 0=black up to n=white, where
599 * n=2^(bit depth)-1. Ask me for more details if you don't understand
602 long qc_capture(struct qcam_device * q, char __user *buf, unsigned long len)
606 int linestotrans, transperline;
619 qc_command(q, q->mode);
621 if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR)
623 write_lpcontrol(q, 0x2e); /* turn port around */
624 write_lpcontrol(q, 0x26);
625 (void) qc_waithand(q, 1);
626 write_lpcontrol(q, 0x2e);
627 (void) qc_waithand(q, 0);
630 /* strange -- should be 15:63 below, but 4bpp is odd */
631 invert = (q->bpp == 4) ? 16 : 63;
633 linestotrans = q->height / q->transfer_scale;
634 pixels_per_line = q->width / q->transfer_scale;
635 transperline = q->width * q->bpp;
636 divisor = (((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? 24 : 8) *
638 transperline = (transperline + divisor - 1) / divisor;
640 for (i = 0, yield = yieldlines; i < linestotrans; i++)
642 for (pixels_read = j = 0; j < transperline; j++)
644 bytes = qc_readbytes(q, buffer);
645 for (k = 0; k < bytes && (pixels_read + k) < pixels_per_line; k++)
648 if (buffer[k] == 0 && invert == 16)
650 /* 4bpp is odd (again) -- inverter is 16, not 15, but output
651 must be 0-15 -- bls */
654 o=i*pixels_per_line + pixels_read + k;
658 put_user((invert - buffer[k])<<shift, buf+o);
661 pixels_read += bytes;
663 (void) qc_readbytes(q, NULL); /* reset state machine */
665 /* Grabbing an entire frame from the quickcam is a lengthy
666 process. We don't (usually) want to busy-block the
667 processor for the entire frame. yieldlines is a module
668 parameter. If we yield every line, the minimum frame
669 time will be 240 / 200 = 1.2 seconds. The compile-time
670 default is to yield every 4 lines. */
672 current->state=TASK_INTERRUPTIBLE;
673 schedule_timeout(HZ/200);
674 yield = i + yieldlines;
678 if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR)
680 write_lpcontrol(q, 2);
681 write_lpcontrol(q, 6);
683 write_lpcontrol(q, 0xe);
691 * Video4linux interfacing
694 static int qcam_do_ioctl(struct inode *inode, struct file *file,
695 unsigned int cmd, void *arg)
697 struct video_device *dev = video_devdata(file);
698 struct qcam_device *qcam=(struct qcam_device *)dev;
704 struct video_capability *b = arg;
705 strcpy(b->name, "Quickcam");
706 b->type = VID_TYPE_CAPTURE|VID_TYPE_SCALES|VID_TYPE_MONOCHROME;
717 struct video_channel *v = arg;
722 /* Good question.. its composite or SVHS so.. */
723 v->type = VIDEO_TYPE_CAMERA;
724 strcpy(v->name, "Camera");
729 struct video_channel *v = arg;
736 struct video_tuner *v = arg;
739 strcpy(v->name, "Format");
743 v->mode = VIDEO_MODE_AUTO;
748 struct video_tuner *v = arg;
751 if(v->mode!=VIDEO_MODE_AUTO)
757 struct video_picture *p = arg;
760 p->brightness=qcam->brightness<<8;
761 p->contrast=qcam->contrast<<8;
762 p->whiteness=qcam->whitebal<<8;
764 p->palette=VIDEO_PALETTE_GREY;
769 struct video_picture *p = arg;
770 if(p->palette!=VIDEO_PALETTE_GREY)
772 if(p->depth!=4 && p->depth!=6)
776 * Now load the camera.
779 qcam->brightness = p->brightness>>8;
780 qcam->contrast = p->contrast>>8;
781 qcam->whitebal = p->whiteness>>8;
782 qcam->bpp = p->depth;
785 qc_setscanmode(qcam);
787 qcam->status |= QC_PARAM_CHANGE;
793 struct video_window *vw = arg;
798 if(vw->height<60||vw->height>240)
800 if(vw->width<80||vw->width>320)
805 qcam->transfer_scale = 4;
807 if(vw->width>=160 && vw->height>=120)
809 qcam->transfer_scale = 2;
811 if(vw->width>=320 && vw->height>=240)
815 qcam->transfer_scale = 1;
818 qc_setscanmode(qcam);
821 /* We must update the camera before we grab. We could
822 just have changed the grab size */
823 qcam->status |= QC_PARAM_CHANGE;
825 /* Ok we figured out what to use from our wide choice */
830 struct video_window *vw = arg;
831 memset(vw, 0, sizeof(*vw));
832 vw->width=qcam->width/qcam->transfer_scale;
833 vw->height=qcam->height/qcam->transfer_scale;
852 static int qcam_ioctl(struct inode *inode, struct file *file,
853 unsigned int cmd, unsigned long arg)
855 return video_usercopy(inode, file, cmd, arg, qcam_do_ioctl);
858 static ssize_t qcam_read(struct file *file, char __user *buf,
859 size_t count, loff_t *ppos)
861 struct video_device *v = video_devdata(file);
862 struct qcam_device *qcam=(struct qcam_device *)v;
864 parport_claim_or_block(qcam->pdev);
870 /* Update the camera parameters if we need to */
871 if (qcam->status & QC_PARAM_CHANGE)
874 len=qc_capture(qcam, buf,count);
878 parport_release(qcam->pdev);
882 static struct file_operations qcam_fops = {
883 .owner = THIS_MODULE,
884 .open = video_exclusive_open,
885 .release = video_exclusive_release,
890 static struct video_device qcam_template=
892 .owner = THIS_MODULE,
893 .name = "Connectix Quickcam",
894 .type = VID_TYPE_CAPTURE,
895 .hardware = VID_HARDWARE_QCAM_BW,
900 static struct qcam_device *qcams[MAX_CAMS];
901 static unsigned int num_cams = 0;
903 int init_bwqcam(struct parport *port)
905 struct qcam_device *qcam;
907 if (num_cams == MAX_CAMS)
909 printk(KERN_ERR "Too many Quickcams (max %d)\n", MAX_CAMS);
913 qcam=qcam_init(port);
917 parport_claim_or_block(qcam->pdev);
921 if(qc_detect(qcam)==0)
923 parport_release(qcam->pdev);
924 parport_unregister_device(qcam->pdev);
930 parport_release(qcam->pdev);
932 printk(KERN_INFO "Connectix Quickcam on %s\n", qcam->pport->name);
934 if(video_register_device(&qcam->vdev, VFL_TYPE_GRABBER, video_nr)==-1)
936 parport_unregister_device(qcam->pdev);
941 qcams[num_cams++] = qcam;
946 void close_bwqcam(struct qcam_device *qcam)
948 video_unregister_device(&qcam->vdev);
949 parport_unregister_device(qcam->pdev);
953 /* The parport parameter controls which parports will be scanned.
954 * Scanning all parports causes some printers to print a garbage page.
955 * -- March 14, 1999 Billy Donahue <billy@escape.com> */
957 static char *parport[MAX_CAMS] = { NULL, };
958 MODULE_PARM(parport, "1-" __MODULE_STRING(MAX_CAMS) "s");
961 static int accept_bwqcam(struct parport *port)
966 if (parport[0] && strncmp(parport[0], "auto", 4) != 0) {
967 /* user gave parport parameters */
968 for(n=0; parport[n] && n<MAX_CAMS; n++){
971 r = simple_strtoul(parport[n], &ep, 0);
972 if (ep == parport[n]) {
974 "bw-qcam: bad port specifier \"%s\"\n",
978 if (r == port->number)
987 static void bwqcam_attach(struct parport *port)
989 if (accept_bwqcam(port))
993 static void bwqcam_detach(struct parport *port)
996 for (i = 0; i < num_cams; i++) {
997 struct qcam_device *qcam = qcams[i];
998 if (qcam && qcam->pdev->port == port) {
1005 static struct parport_driver bwqcam_driver = {
1007 .attach = bwqcam_attach,
1008 .detach = bwqcam_detach,
1011 static void __exit exit_bw_qcams(void)
1013 parport_unregister_driver(&bwqcam_driver);
1016 static int __init init_bw_qcams(void)
1019 /* Do some sanity checks on the module parameters. */
1020 if (maxpoll > 5000) {
1021 printk("Connectix Quickcam max-poll was above 5000. Using 5000.\n");
1025 if (yieldlines < 1) {
1026 printk("Connectix Quickcam yieldlines was less than 1. Using 1.\n");
1030 return parport_register_driver(&bwqcam_driver);
1033 module_init(init_bw_qcams);
1034 module_exit(exit_bw_qcams);
1036 MODULE_LICENSE("GPL");