• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/media/video/

Lines Matching refs:qcam

45 struct qcam {
87 static struct qcam *qcams[MAX_CAMS];
90 static inline void qcam_set_ack(struct qcam *qcam, unsigned int i)
94 parport_frob_control(qcam->pport, 8, i ? 8 : 0);
97 static inline unsigned int qcam_ready1(struct qcam *qcam)
99 return (parport_read_status(qcam->pport) & 0x8) ? 1 : 0;
102 static inline unsigned int qcam_ready2(struct qcam *qcam)
104 return (parport_read_data(qcam->pport) & 0x1) ? 1 : 0;
107 static unsigned int qcam_await_ready1(struct qcam *qcam, int value)
109 struct v4l2_device *v4l2_dev = &qcam->v4l2_dev;
115 if (qcam_ready1(qcam) == value)
121 if (qcam_ready1(qcam) == value)
128 parport_read_status(qcam->pport),
129 parport_read_control(qcam->pport));
133 static unsigned int qcam_await_ready2(struct qcam *qcam, int value)
135 struct v4l2_device *v4l2_dev = &qcam->v4l2_dev;
141 if (qcam_ready2(qcam) == value)
147 if (qcam_ready2(qcam) == value)
154 parport_read_status(qcam->pport),
155 parport_read_control(qcam->pport),
156 parport_read_data(qcam->pport));
160 static int qcam_read_data(struct qcam *qcam)
164 qcam_set_ack(qcam, 0);
165 if (qcam_await_ready1(qcam, 1))
167 idata = parport_read_status(qcam->pport) & 0xf0;
168 qcam_set_ack(qcam, 1);
169 if (qcam_await_ready1(qcam, 0))
171 idata |= parport_read_status(qcam->pport) >> 4;
175 static int qcam_write_data(struct qcam *qcam, unsigned int data)
177 struct v4l2_device *v4l2_dev = &qcam->v4l2_dev;
180 parport_write_data(qcam->pport, data);
181 idata = qcam_read_data(qcam);
190 static inline int qcam_set(struct qcam *qcam, unsigned int cmd, unsigned int data)
192 if (qcam_write_data(qcam, cmd))
194 if (qcam_write_data(qcam, data))
199 static inline int qcam_get(struct qcam *qcam, unsigned int cmd)
201 if (qcam_write_data(qcam, cmd))
203 return qcam_read_data(qcam);
206 static int qc_detect(struct qcam *qcam)
212 if (qcam->pport->probe_info[0].class == PARPORT_CLASS_MEDIA
213 && qcam->pport->probe_info[0].model
214 && !strcmp(qcam->pdev->port->probe_info[0].model,
223 parport_write_control(qcam->pport, 0xc);
226 ostat = stat = parport_read_status(qcam->pport);
229 stat = parport_read_status(qcam->pport);
238 parport_write_control(qcam->pport, 0xc);
239 parport_write_control(qcam->pport, 0x8);
241 parport_write_control(qcam->pport, 0xc);
245 ostat = stat = parport_read_status(qcam->pport);
248 stat = parport_read_status(qcam->pport);
260 static void qc_reset(struct qcam *qcam)
262 parport_write_control(qcam->pport, 0xc);
263 parport_write_control(qcam->pport, 0x8);
265 parport_write_control(qcam->pport, 0xc);
272 static void qc_setup(struct qcam *qcam)
274 qc_reset(qcam);
277 qcam_set(qcam, 11, qcam->brightness);
281 qcam_set(qcam, 17, qcam->ccd_height);
282 qcam_set(qcam, 19, qcam->ccd_width / 2);
285 qcam_set(qcam, 0xd, qcam->top);
286 qcam_set(qcam, 0xf, qcam->left);
289 qcam_set(qcam, 0x19, qcam->contrast);
290 qcam_set(qcam, 0x1f, qcam->whitebal);
293 qcam_set(qcam, 45, 2);
300 static unsigned int qcam_read_bytes(struct qcam *qcam, unsigned char *buf, unsigned int nbytes)
304 qcam_set_ack(qcam, 0);
305 if (qcam->bidirectional) {
311 if (qcam_await_ready2(qcam, 1))
313 lo1 = parport_read_data(qcam->pport) >> 1;
314 hi1 = ((parport_read_status(qcam->pport) >> 3) & 0x1f) ^ 0x10;
315 qcam_set_ack(qcam, 1);
316 if (qcam_await_ready2(qcam, 0))
318 lo2 = parport_read_data(qcam->pport) >> 1;
319 hi2 = ((parport_read_status(qcam->pport) >> 3) & 0x1f) ^ 0x10;
320 qcam_set_ack(qcam, 0);
342 if (qcam_await_ready1(qcam, 1))
344 hi = (parport_read_status(qcam->pport) & 0xf0);
345 qcam_set_ack(qcam, 1);
346 if (qcam_await_ready1(qcam, 0))
348 lo = (parport_read_status(qcam->pport) & 0xf0);
349 qcam_set_ack(qcam, 0);
375 static long qc_capture(struct qcam *qcam, char __user *buf, unsigned long len)
377 struct v4l2_device *v4l2_dev = &qcam->v4l2_dev;
379 unsigned int is_bi_dir = qcam->bidirectional;
388 int i = qcam_get(qcam, 41);
391 qc_setup(qcam);
399 if (qcam_set(qcam, 7, (qcam->mode | (is_bi_dir ? 1 : 0)) + 1))
402 lines = qcam->height;
403 pixelsperline = qcam->width;
408 parport_data_reverse(qcam->pport);
410 qcam_set_ack(qcam, 0);
411 if (qcam_await_ready1(qcam, 1)) {
412 qc_setup(qcam);
415 qcam_set_ack(qcam, 1);
416 if (qcam_await_ready1(qcam, 0)) {
417 qc_setup(qcam);
428 t = qcam_read_bytes(qcam, tmpbuf, s);
449 parport_data_forward(qcam->pport);
450 qc_setup(qcam);
458 l = qcam_read_bytes(qcam, tmpbuf, 3);
468 qcam_set_ack(qcam, 0);
469 if (qcam_await_ready1(qcam, 1)) {
471 parport_data_forward(qcam->pport);
472 qc_setup(qcam);
475 parport_data_forward(qcam->pport);
477 qcam_set_ack(qcam, 1);
478 if (qcam_await_ready1(qcam, 0)) {
480 qc_setup(qcam);
487 l = qcam_read_bytes(qcam, tmpbuf, 1);
490 l = qcam_read_bytes(qcam, tmpbuf + 1, 2);
500 qcam_write_data(qcam, 0);
511 struct qcam *qcam = video_drvdata(file);
513 strlcpy(vcap->driver, qcam->v4l2_dev.name, sizeof(vcap->driver));
562 struct qcam *qcam = video_drvdata(file);
567 ctrl->value = qcam->brightness;
570 ctrl->value = qcam->contrast;
573 ctrl->value = qcam->whitebal;
585 struct qcam *qcam = video_drvdata(file);
588 mutex_lock(&qcam->lock);
591 qcam->brightness = ctrl->value;
594 qcam->contrast = ctrl->value;
597 qcam->whitebal = ctrl->value;
604 parport_claim_or_block(qcam->pdev);
605 qc_setup(qcam);
606 parport_release(qcam->pdev);
608 mutex_unlock(&qcam->lock);
614 struct qcam *qcam = video_drvdata(file);
617 pix->width = qcam->width;
618 pix->height = qcam->height;
621 pix->bytesperline = 3 * qcam->width;
622 pix->sizeimage = 3 * qcam->width * qcam->height;
653 struct qcam *qcam = video_drvdata(file);
661 qcam->mode = QC_DECIMATION_4;
664 qcam->mode = QC_DECIMATION_2;
667 qcam->mode = QC_DECIMATION_1;
671 mutex_lock(&qcam->lock);
672 qcam->mode |= QC_MILLIONS;
673 qcam->height = pix->height;
674 qcam->width = pix->width;
675 parport_claim_or_block(qcam->pdev);
676 qc_setup(qcam);
677 parport_release(qcam->pdev);
678 mutex_unlock(&qcam->lock);
703 struct qcam *qcam = video_drvdata(file);
706 mutex_lock(&qcam->lock);
707 parport_claim_or_block(qcam->pdev);
709 len = qc_capture(qcam, buf, count);
710 parport_release(qcam->pdev);
711 mutex_unlock(&qcam->lock);
737 static struct qcam *qcam_init(struct parport *port)
739 struct qcam *qcam;
742 qcam = kzalloc(sizeof(*qcam), GFP_KERNEL);
743 if (qcam == NULL)
746 v4l2_dev = &qcam->v4l2_dev;
747 strlcpy(v4l2_dev->name, "c-qcam", sizeof(v4l2_dev->name));
754 qcam->pport = port;
755 qcam->pdev = parport_register_device(port, "c-qcam", NULL, NULL,
758 qcam->bidirectional = (qcam->pport->modes & PARPORT_MODE_TRISTATE) ? 1 : 0;
760 if (qcam->pdev == NULL) {
762 kfree(qcam);
766 strlcpy(qcam->vdev.name, "Colour QuickCam", sizeof(qcam->vdev.name));
767 qcam->vdev.v4l2_dev = v4l2_dev;
768 qcam->vdev.fops = &qcam_fops;
769 qcam->vdev.ioctl_ops = &qcam_ioctl_ops;
770 qcam->vdev.release = video_device_release_empty;
771 video_set_drvdata(&qcam->vdev, qcam);
773 mutex_init(&qcam->lock);
774 qcam->width = qcam->ccd_width = 320;
775 qcam->height = qcam->ccd_height = 240;
776 qcam->mode = QC_MILLIONS | QC_DECIMATION_1;
777 qcam->contrast = 192;
778 qcam->brightness = 240;
779 qcam->whitebal = 128;
780 qcam->top = 1;
781 qcam->left = 14;
782 return qcam;
787 struct qcam *qcam;
805 qcam = qcam_init(port);
806 if (qcam == NULL)
809 v4l2_dev = &qcam->v4l2_dev;
811 parport_claim_or_block(qcam->pdev);
813 qc_reset(qcam);
815 if (probe && qc_detect(qcam) == 0) {
816 parport_release(qcam->pdev);
817 parport_unregister_device(qcam->pdev);
818 kfree(qcam);
822 qc_setup(qcam);
824 parport_release(qcam->pdev);
826 if (video_register_device(&qcam->vdev, VFL_TYPE_GRABBER, video_nr) < 0) {
828 qcam->pport->name);
829 parport_unregister_device(qcam->pdev);
830 kfree(qcam);
835 video_device_node_name(&qcam->vdev), qcam->pport->name);
837 qcams[num_cams++] = qcam;
842 static void close_cqcam(struct qcam *qcam)
844 video_unregister_device(&qcam->vdev);
845 parport_unregister_device(qcam->pdev);
846 kfree(qcam);