Lines Matching refs:cam

129 	struct zr364xx_camera	*cam;
137 void *cam; /* back pointer to zr364xx_camera struct */
343 struct zr364xx_camera *cam = vq->priv_data;
345 *size = cam->width * cam->height * (cam->fmt->depth >> 3);
369 struct zr364xx_camera *cam = vq->priv_data;
375 if (!cam->fmt)
378 buf->vb.size = cam->width * cam->height * (cam->fmt->depth >> 3);
385 buf->fmt = cam->fmt;
386 buf->vb.width = cam->width;
387 buf->vb.height = cam->height;
407 struct zr364xx_camera *cam = vq->priv_data;
412 list_add_tail(&buf->vb.queue, &cam->vidq.active);
441 struct zr364xx_camera *cam = video_drvdata(file);
452 if (mutex_lock_interruptible(&cam->lock))
462 err = videobuf_read_one(&cam->vb_vidq, buf, count, ppos,
465 mutex_unlock(&cam->lock);
477 static void zr364xx_fillbuff(struct zr364xx_camera *cam,
489 last_frame = cam->last_frame;
491 tmpbuf = (const char *)cam->buffer.frame[last_frame].lpvbits;
500 cam->last_frame = -1;
508 buf->vb.field_count = cam->frame_count * 2;
513 static int zr364xx_got_frame(struct zr364xx_camera *cam, int jpgsize)
515 struct zr364xx_dmaqueue *dma_q = &cam->vidq;
521 spin_lock_irqsave(&cam->slock, flags);
539 zr364xx_fillbuff(cam, buf, jpgsize);
543 spin_unlock_irqrestore(&cam->slock, flags);
552 static int zr364xx_read_video_callback(struct zr364xx_camera *cam,
558 s32 idx = cam->cur_frame;
559 struct zr364xx_framei *frm = &cam->buffer.frame[idx];
566 if (cam->method == METHOD0) {
573 if (!cam->b_acquire) {
585 dev_info(&cam->udev->dev,
619 dev_info(&cam->udev->dev,
633 cam->last_frame = cam->cur_frame;
634 cam->cur_frame++;
636 if (cam->cur_frame == cam->buffer.dwFrames)
637 cam->cur_frame = 0;
661 DBG("Bogus frame ? %d\n", ++(cam->nb));
662 } else if (cam->b_acquire) {
664 if (cam->skip)
665 cam->skip--;
672 zr364xx_got_frame(cam, frm->cur_size);
675 cam->frame_count++;
686 struct zr364xx_camera *cam = video_drvdata(file);
689 if (cam->udev->product)
690 strscpy(cap->card, cam->udev->product, sizeof(cap->card));
691 strscpy(cap->bus_info, dev_name(&cam->udev->dev),
723 struct zr364xx_camera *cam =
730 send_control_msg(cam->udev, 1, 0x2001, 0, NULL, 0);
732 send_control_msg(cam->udev, 1, temp, 0, NULL, 0);
763 struct zr364xx_camera *cam = video_drvdata(file);
766 if (!cam)
794 struct zr364xx_camera *cam;
798 cam = video_drvdata(file);
802 f->fmt.pix.width = cam->width;
803 f->fmt.pix.height = cam->height;
813 struct zr364xx_camera *cam = video_drvdata(file);
814 struct videobuf_queue *q = &cam->vb_vidq;
816 int ret = zr364xx_vidioc_try_fmt_vid_cap(file, cam, f);
824 if (videobuf_queue_is_busy(&cam->vb_vidq)) {
830 if (cam->owner) {
836 cam->width = f->fmt.pix.width;
837 cam->height = f->fmt.pix.height;
839 cam->width, cam->height);
843 cam->vb_vidq.field = f->fmt.pix.field;
857 if (cam->method == METHOD3) {
871 header2[437] = cam->height / 256;
872 header2[438] = cam->height % 256;
873 header2[439] = cam->width / 256;
874 header2[440] = cam->width % 256;
876 for (i = 0; init[cam->method][i].size != -1; i++) {
878 send_control_msg(cam->udev, 1, init[cam->method][i].value,
879 0, init[cam->method][i].bytes,
880 init[cam->method][i].size);
882 dev_err(&cam->udev->dev,
892 cam->skip = 2;
907 struct zr364xx_camera *cam = video_drvdata(file);
909 if (cam->owner && cam->owner != priv)
911 return videobuf_reqbufs(&cam->vb_vidq, p);
919 struct zr364xx_camera *cam = video_drvdata(file);
920 rc = videobuf_querybuf(&cam->vb_vidq, p);
929 struct zr364xx_camera *cam = video_drvdata(file);
931 if (cam->owner && cam->owner != priv)
933 rc = videobuf_qbuf(&cam->vb_vidq, p);
942 struct zr364xx_camera *cam = video_drvdata(file);
944 if (cam->owner && cam->owner != priv)
946 rc = videobuf_dqbuf(&cam->vb_vidq, p, file->f_flags & O_NONBLOCK);
953 struct zr364xx_camera *cam;
963 cam = pipe_info->cam;
964 if (!cam) {
982 dev_err(&cam->udev->dev, "wrong number of bytes\n");
987 zr364xx_read_video_callback(cam, pipe_info, purb);
993 pipe = usb_rcvbulkpipe(cam->udev, cam->read_endpoint);
996 usb_fill_bulk_urb(pipe_info->stream_urb, cam->udev,
1007 dev_err(&cam->udev->dev,
1014 static int zr364xx_start_readpipe(struct zr364xx_camera *cam)
1018 struct zr364xx_pipeinfo *pipe_info = cam->pipe;
1019 pipe = usb_rcvbulkpipe(cam->udev, cam->read_endpoint);
1020 DBG("%s: start pipe IN x%x\n", __func__, cam->read_endpoint);
1028 usb_fill_bulk_urb(pipe_info->stream_urb, cam->udev,
1045 static void zr364xx_stop_readpipe(struct zr364xx_camera *cam)
1049 if (!cam) {
1054 pipe_info = cam->pipe;
1070 static int zr364xx_start_acquire(struct zr364xx_camera *cam)
1076 cam->last_frame = -1;
1077 cam->cur_frame = 0;
1079 cam->buffer.frame[j].ulState = ZR364XX_READ_IDLE;
1080 cam->buffer.frame[j].cur_size = 0;
1082 cam->b_acquire = 1;
1086 static inline int zr364xx_stop_acquire(struct zr364xx_camera *cam)
1088 cam->b_acquire = 0;
1092 static int zr364xx_prepare(struct zr364xx_camera *cam)
1097 for (i = 0; init[cam->method][i].size != -1; i++) {
1098 res = send_control_msg(cam->udev, 1, init[cam->method][i].value,
1099 0, init[cam->method][i].bytes,
1100 init[cam->method][i].size);
1102 dev_err(&cam->udev->dev,
1108 cam->skip = 2;
1109 cam->last_frame = -1;
1110 cam->cur_frame = 0;
1111 cam->frame_count = 0;
1113 cam->buffer.frame[j].ulState = ZR364XX_READ_IDLE;
1114 cam->buffer.frame[j].cur_size = 0;
1116 v4l2_ctrl_handler_setup(&cam->ctrl_handler);
1123 struct zr364xx_camera *cam = video_drvdata(file);
1131 if (cam->owner && cam->owner != priv)
1134 res = zr364xx_prepare(cam);
1137 res = videobuf_streamon(&cam->vb_vidq);
1139 zr364xx_start_acquire(cam);
1140 cam->owner = file->private_data;
1148 struct zr364xx_camera *cam = video_drvdata(file);
1153 if (cam->owner && cam->owner != priv)
1155 zr364xx_stop_acquire(cam);
1156 return videobuf_streamoff(&cam->vb_vidq);
1163 struct zr364xx_camera *cam = video_drvdata(file);
1168 if (mutex_lock_interruptible(&cam->lock))
1182 mutex_unlock(&cam->lock);
1187 static void zr364xx_board_uninit(struct zr364xx_camera *cam)
1191 zr364xx_stop_readpipe(cam);
1195 if (cam->buffer.frame[i].lpvbits) {
1196 DBG("vfree %p\n", cam->buffer.frame[i].lpvbits);
1197 vfree(cam->buffer.frame[i].lpvbits);
1199 cam->buffer.frame[i].lpvbits = NULL;
1203 kfree(cam->pipe->transfer_buffer);
1208 struct zr364xx_camera *cam =
1211 videobuf_mmap_free(&cam->vb_vidq);
1212 v4l2_ctrl_handler_free(&cam->ctrl_handler);
1213 zr364xx_board_uninit(cam);
1214 v4l2_device_unregister(&cam->v4l2_dev);
1215 kfree(cam);
1221 struct zr364xx_camera *cam;
1226 cam = video_drvdata(file);
1228 mutex_lock(&cam->lock);
1229 udev = cam->udev;
1231 if (file->private_data == cam->owner) {
1233 if (cam->b_acquire)
1234 zr364xx_stop_acquire(cam);
1235 videobuf_streamoff(&cam->vb_vidq);
1238 send_control_msg(udev, 1, init[cam->method][i].value,
1239 0, init[cam->method][i].bytes,
1240 init[cam->method][i].size);
1242 cam->owner = NULL;
1249 mutex_unlock(&cam->lock);
1256 struct zr364xx_camera *cam = video_drvdata(file);
1259 if (!cam) {
1260 DBG("%s: cam == NULL\n", __func__);
1265 ret = videobuf_mmap_mapper(&cam->vb_vidq, vma);
1276 struct zr364xx_camera *cam = video_drvdata(file);
1277 struct videobuf_queue *q = &cam->vb_vidq;
1333 static int zr364xx_board_init(struct zr364xx_camera *cam)
1335 struct zr364xx_pipeinfo *pipe = cam->pipe;
1339 DBG("board init: %p\n", cam);
1341 pipe->cam = cam;
1351 cam->b_acquire = 0;
1352 cam->frame_count = 0;
1357 cam->buffer.frame[i].lpvbits = vmalloc(MAX_FRAME_SIZE);
1360 &cam->buffer.frame[i], i,
1361 cam->buffer.frame[i].lpvbits);
1362 if (!cam->buffer.frame[i].lpvbits) {
1373 cam->buffer.dwFrames = i;
1377 cam->buffer.frame[i].ulState = ZR364XX_READ_IDLE;
1378 cam->buffer.frame[i].cur_size = 0;
1381 cam->cur_frame = 0;
1382 cam->last_frame = -1;
1386 err = zr364xx_start_readpipe(cam);
1395 vfree(cam->buffer.frame[i].lpvbits);
1397 kfree(cam->pipe->transfer_buffer);
1398 cam->pipe->transfer_buffer = NULL;
1406 struct zr364xx_camera *cam = NULL;
1420 cam = kzalloc(sizeof(*cam), GFP_KERNEL);
1421 if (!cam)
1424 err = v4l2_device_register(&intf->dev, &cam->v4l2_dev);
1429 hdl = &cam->ctrl_handler;
1439 cam->method = id->driver_info;
1440 mutex_init(&cam->lock);
1441 cam->vdev = zr364xx_template;
1442 cam->vdev.lock = &cam->lock;
1443 cam->vdev.v4l2_dev = &cam->v4l2_dev;
1444 cam->vdev.ctrl_handler = &cam->ctrl_handler;
1445 video_set_drvdata(&cam->vdev, cam);
1447 cam->udev = udev;
1452 cam->width = 160;
1453 cam->height = 120;
1457 cam->width = 640;
1458 cam->height = 480;
1462 cam->width = 320;
1463 cam->height = 240;
1472 if (cam->method == METHOD3) {
1486 header2[437] = cam->height / 256;
1487 header2[438] = cam->height % 256;
1488 header2[439] = cam->width / 256;
1489 header2[440] = cam->width % 256;
1491 cam->nb = 0;
1493 DBG("dev: %p, udev %p interface %p\n", cam, cam->udev, intf);
1500 if (!cam->read_endpoint && usb_endpoint_is_bulk_in(endpoint)) {
1502 cam->read_endpoint = endpoint->bEndpointAddress;
1506 if (!cam->read_endpoint) {
1513 INIT_LIST_HEAD(&cam->vidq.active);
1514 cam->vidq.cam = cam;
1516 usb_set_intfdata(intf, cam);
1519 err = zr364xx_board_init(cam);
1526 spin_lock_init(&cam->slock);
1528 cam->fmt = formats;
1530 videobuf_queue_vmalloc_init(&cam->vb_vidq, &zr364xx_video_qops,
1531 NULL, &cam->slock,
1534 sizeof(struct zr364xx_buffer), cam, &cam->lock);
1536 err = video_register_device(&cam->vdev, VFL_TYPE_VIDEO, -1);
1541 cam->v4l2_dev.release = zr364xx_release;
1544 video_device_node_name(&cam->vdev));
1548 zr364xx_board_uninit(cam);
1551 v4l2_device_unregister(&cam->v4l2_dev);
1553 kfree(cam);
1560 struct zr364xx_camera *cam = usb_get_intfdata(intf);
1562 mutex_lock(&cam->lock);
1565 video_unregister_device(&cam->vdev);
1566 v4l2_device_disconnect(&cam->v4l2_dev);
1569 if (cam->b_acquire)
1570 zr364xx_stop_acquire(cam);
1572 zr364xx_stop_readpipe(cam);
1573 mutex_unlock(&cam->lock);
1574 v4l2_device_put(&cam->v4l2_dev);
1581 struct zr364xx_camera *cam = usb_get_intfdata(intf);
1583 cam->was_streaming = cam->b_acquire;
1584 if (!cam->was_streaming)
1586 zr364xx_stop_acquire(cam);
1587 zr364xx_stop_readpipe(cam);
1593 struct zr364xx_camera *cam = usb_get_intfdata(intf);
1596 if (!cam->was_streaming)
1599 res = zr364xx_start_readpipe(cam);
1603 res = zr364xx_prepare(cam);
1607 zr364xx_start_acquire(cam);
1611 zr364xx_stop_readpipe(cam);