• Home
  • Raw
  • Download

Lines Matching refs:gspca_dev

66 static void PDEBUG_MODE(struct gspca_dev *gspca_dev, int debug, char *txt,  in PDEBUG_MODE()  argument
121 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in int_irq() local
127 if (gspca_dev->sd_desc->int_pkt_scan(gspca_dev, in int_irq()
155 static int gspca_input_connect(struct gspca_dev *dev) in gspca_input_connect()
192 static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev, in alloc_and_submit_int_urb() argument
208 dev = gspca_dev->dev; in alloc_and_submit_int_urb()
225 int_irq, (void *)gspca_dev, interval); in alloc_and_submit_int_urb()
232 gspca_dev->int_urb = urb; in alloc_and_submit_int_urb()
246 static void gspca_input_create_urb(struct gspca_dev *gspca_dev) in gspca_input_create_urb() argument
253 if (gspca_dev->sd_desc->int_pkt_scan) { in gspca_input_create_urb()
254 intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface); in gspca_input_create_urb()
261 alloc_and_submit_int_urb(gspca_dev, ep); in gspca_input_create_urb()
268 static void gspca_input_destroy_urb(struct gspca_dev *gspca_dev) in gspca_input_destroy_urb() argument
272 urb = gspca_dev->int_urb; in gspca_input_destroy_urb()
274 gspca_dev->int_urb = NULL; in gspca_input_destroy_urb()
276 usb_free_coherent(gspca_dev->dev, in gspca_input_destroy_urb()
284 static inline void gspca_input_destroy_urb(struct gspca_dev *gspca_dev) in gspca_input_destroy_urb() argument
288 static inline void gspca_input_create_urb(struct gspca_dev *gspca_dev) in gspca_input_create_urb() argument
292 static inline int gspca_input_connect(struct gspca_dev *dev) in gspca_input_connect()
301 static void fill_frame(struct gspca_dev *gspca_dev, in fill_frame() argument
312 if (gspca_dev->frozen) in fill_frame()
319 pkt_scan = gspca_dev->sd_desc->pkt_scan; in fill_frame()
328 gspca_dev->last_packet_type = DISCARD_PACKET; in fill_frame()
332 if (gspca_dev->empty_packet == 0) in fill_frame()
333 gspca_dev->empty_packet = 1; in fill_frame()
342 pkt_scan(gspca_dev, data, len); in fill_frame()
359 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in isoc_irq() local
362 if (!gspca_dev->streaming) in isoc_irq()
364 fill_frame(gspca_dev, urb); in isoc_irq()
372 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in bulk_irq() local
376 if (!gspca_dev->streaming) in bulk_irq()
385 if (gspca_dev->frozen) in bulk_irq()
394 gspca_dev->sd_desc->pkt_scan(gspca_dev, in bulk_irq()
400 if (gspca_dev->cam.bulk_nurbs != 0) { in bulk_irq()
418 void gspca_frame_add(struct gspca_dev *gspca_dev, in gspca_frame_add() argument
429 i = atomic_read(&gspca_dev->fr_i); in gspca_frame_add()
432 if (i == atomic_read(&gspca_dev->fr_q)) { in gspca_frame_add()
433 gspca_dev->last_packet_type = DISCARD_PACKET; in gspca_frame_add()
434 gspca_dev->sequence++; in gspca_frame_add()
437 j = gspca_dev->fr_queue[i]; in gspca_frame_add()
438 frame = &gspca_dev->frame[j]; in gspca_frame_add()
440 frame->v4l2_buf.sequence = gspca_dev->sequence++; in gspca_frame_add()
441 gspca_dev->image = frame->data; in gspca_frame_add()
442 gspca_dev->image_len = 0; in gspca_frame_add()
444 switch (gspca_dev->last_packet_type) { in gspca_frame_add()
447 gspca_dev->last_packet_type = packet_type; in gspca_frame_add()
448 gspca_dev->image = NULL; in gspca_frame_add()
449 gspca_dev->image_len = 0; in gspca_frame_add()
459 if (gspca_dev->image_len + len > gspca_dev->frsz) { in gspca_frame_add()
461 gspca_dev->image_len + len, in gspca_frame_add()
462 gspca_dev->frsz); in gspca_frame_add()
471 memcpy(gspca_dev->image + gspca_dev->image_len, in gspca_frame_add()
473 gspca_dev->image_len += len; in gspca_frame_add()
476 gspca_dev->last_packet_type = packet_type; in gspca_frame_add()
482 i = atomic_read(&gspca_dev->fr_i); in gspca_frame_add()
483 j = gspca_dev->fr_queue[i]; in gspca_frame_add()
484 frame = &gspca_dev->frame[j]; in gspca_frame_add()
485 frame->v4l2_buf.bytesused = gspca_dev->image_len; in gspca_frame_add()
490 atomic_set(&gspca_dev->fr_i, i); in gspca_frame_add()
491 wake_up_interruptible(&gspca_dev->wq); /* event = new frame */ in gspca_frame_add()
494 gspca_dev->image = NULL; in gspca_frame_add()
495 gspca_dev->image_len = 0; in gspca_frame_add()
500 static int frame_alloc(struct gspca_dev *gspca_dev, struct file *file, in frame_alloc() argument
507 i = gspca_dev->curr_mode; in frame_alloc()
508 frsz = gspca_dev->cam.cam_mode[i].sizeimage; in frame_alloc()
513 gspca_dev->frbuf = vmalloc_32(frsz * count); in frame_alloc()
514 if (!gspca_dev->frbuf) { in frame_alloc()
518 gspca_dev->capt_file = file; in frame_alloc()
519 gspca_dev->memory = memory; in frame_alloc()
520 gspca_dev->frsz = frsz; in frame_alloc()
521 gspca_dev->nframes = count; in frame_alloc()
523 frame = &gspca_dev->frame[i]; in frame_alloc()
531 frame->data = gspca_dev->frbuf + i * frsz; in frame_alloc()
534 atomic_set(&gspca_dev->fr_q, 0); in frame_alloc()
535 atomic_set(&gspca_dev->fr_i, 0); in frame_alloc()
536 gspca_dev->fr_o = 0; in frame_alloc()
540 static void frame_free(struct gspca_dev *gspca_dev) in frame_free() argument
545 if (gspca_dev->frbuf != NULL) { in frame_free()
546 vfree(gspca_dev->frbuf); in frame_free()
547 gspca_dev->frbuf = NULL; in frame_free()
548 for (i = 0; i < gspca_dev->nframes; i++) in frame_free()
549 gspca_dev->frame[i].data = NULL; in frame_free()
551 gspca_dev->nframes = 0; in frame_free()
552 gspca_dev->frsz = 0; in frame_free()
553 gspca_dev->capt_file = NULL; in frame_free()
554 gspca_dev->memory = GSPCA_MEMORY_NO; in frame_free()
557 static void destroy_urbs(struct gspca_dev *gspca_dev) in destroy_urbs() argument
564 urb = gspca_dev->urb[i]; in destroy_urbs()
568 gspca_dev->urb[i] = NULL; in destroy_urbs()
570 usb_free_coherent(gspca_dev->dev, in destroy_urbs()
578 static int gspca_set_alt0(struct gspca_dev *gspca_dev) in gspca_set_alt0() argument
582 if (gspca_dev->alt == 0) in gspca_set_alt0()
584 ret = usb_set_interface(gspca_dev->dev, gspca_dev->iface, 0); in gspca_set_alt0()
591 static void gspca_stream_off(struct gspca_dev *gspca_dev) in gspca_stream_off() argument
593 gspca_dev->streaming = 0; in gspca_stream_off()
594 gspca_dev->usb_err = 0; in gspca_stream_off()
595 if (gspca_dev->sd_desc->stopN) in gspca_stream_off()
596 gspca_dev->sd_desc->stopN(gspca_dev); in gspca_stream_off()
597 destroy_urbs(gspca_dev); in gspca_stream_off()
598 gspca_input_destroy_urb(gspca_dev); in gspca_stream_off()
599 gspca_set_alt0(gspca_dev); in gspca_stream_off()
600 gspca_input_create_urb(gspca_dev); in gspca_stream_off()
601 if (gspca_dev->sd_desc->stop0) in gspca_stream_off()
602 gspca_dev->sd_desc->stop0(gspca_dev); in gspca_stream_off()
627 static u32 which_bandwidth(struct gspca_dev *gspca_dev) in which_bandwidth() argument
633 i = gspca_dev->curr_mode; in which_bandwidth()
634 bandwidth = gspca_dev->cam.cam_mode[i].sizeimage; in which_bandwidth()
637 if (!gspca_dev->cam.needs_full_bandwidth && in which_bandwidth()
638 bandwidth < gspca_dev->cam.cam_mode[i].width * in which_bandwidth()
639 gspca_dev->cam.cam_mode[i].height) in which_bandwidth()
643 if (gspca_dev->sd_desc->get_streamparm) { in which_bandwidth()
646 gspca_dev->sd_desc->get_streamparm(gspca_dev, &parm); in which_bandwidth()
653 if (gspca_dev->width >= 640 in which_bandwidth()
654 && gspca_dev->dev->speed == USB_SPEED_FULL) in which_bandwidth()
675 static int build_isoc_ep_tb(struct gspca_dev *gspca_dev, in build_isoc_ep_tb() argument
705 if (gspca_dev->dev->speed == USB_SPEED_HIGH in build_isoc_ep_tb()
706 || gspca_dev->dev->speed == USB_SPEED_SUPER) in build_isoc_ep_tb()
734 if (gspca_dev->audio && in build_isoc_ep_tb()
735 gspca_dev->dev->speed == USB_SPEED_FULL && in build_isoc_ep_tb()
744 bandwidth = which_bandwidth(gspca_dev); in build_isoc_ep_tb()
758 static int create_urbs(struct gspca_dev *gspca_dev, in create_urbs() argument
767 if (!gspca_dev->cam.bulk) { /* isoc */ in create_urbs()
770 if (gspca_dev->pkt_size == 0) in create_urbs()
773 psize = gspca_dev->pkt_size; in create_urbs()
774 npkt = gspca_dev->cam.npkt; in create_urbs()
784 bsize = gspca_dev->cam.bulk_size; in create_urbs()
788 if (gspca_dev->cam.bulk_nurbs != 0) in create_urbs()
789 nurbs = gspca_dev->cam.bulk_nurbs; in create_urbs()
800 gspca_dev->urb[n] = urb; in create_urbs()
801 urb->transfer_buffer = usb_alloc_coherent(gspca_dev->dev, in create_urbs()
810 urb->dev = gspca_dev->dev; in create_urbs()
811 urb->context = gspca_dev; in create_urbs()
814 urb->pipe = usb_rcvisocpipe(gspca_dev->dev, in create_urbs()
826 urb->pipe = usb_rcvbulkpipe(gspca_dev->dev, in create_urbs()
838 static int gspca_init_transfer(struct gspca_dev *gspca_dev) in gspca_init_transfer() argument
847 gspca_dev->image = NULL; in gspca_init_transfer()
848 gspca_dev->image_len = 0; in gspca_init_transfer()
849 gspca_dev->last_packet_type = DISCARD_PACKET; in gspca_init_transfer()
850 gspca_dev->sequence = 0; in gspca_init_transfer()
852 gspca_dev->usb_err = 0; in gspca_init_transfer()
855 intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface); in gspca_init_transfer()
856 gspca_dev->alt = gspca_dev->cam.bulk ? intf->num_altsetting : 0; in gspca_init_transfer()
857 if (gspca_dev->sd_desc->isoc_init) { in gspca_init_transfer()
858 ret = gspca_dev->sd_desc->isoc_init(gspca_dev); in gspca_init_transfer()
862 xfer = gspca_dev->cam.bulk ? USB_ENDPOINT_XFER_BULK in gspca_init_transfer()
866 if (gspca_dev->alt != 0) { in gspca_init_transfer()
867 gspca_dev->alt--; /* (previous version compatibility) */ in gspca_init_transfer()
868 ep = alt_xfer(&intf->altsetting[gspca_dev->alt], xfer); in gspca_init_transfer()
870 pr_err("bad altsetting %d\n", gspca_dev->alt); in gspca_init_transfer()
873 ep_tb[0].alt = gspca_dev->alt; in gspca_init_transfer()
879 alt_idx = build_isoc_ep_tb(gspca_dev, intf, ep_tb); in gspca_init_transfer()
888 gspca_input_destroy_urb(gspca_dev); in gspca_init_transfer()
890 gspca_dev->alt = ep_tb[--alt_idx].alt; in gspca_init_transfer()
893 if (alt != gspca_dev->alt) { in gspca_init_transfer()
894 alt = gspca_dev->alt; in gspca_init_transfer()
896 ret = usb_set_interface(gspca_dev->dev, in gspca_init_transfer()
897 gspca_dev->iface, in gspca_init_transfer()
907 if (!gspca_dev->cam.no_urb_create) { in gspca_init_transfer()
909 ret = create_urbs(gspca_dev, in gspca_init_transfer()
912 destroy_urbs(gspca_dev); in gspca_init_transfer()
918 if (gspca_dev->cam.bulk) in gspca_init_transfer()
919 usb_clear_halt(gspca_dev->dev, in gspca_init_transfer()
920 gspca_dev->urb[0]->pipe); in gspca_init_transfer()
923 ret = gspca_dev->sd_desc->start(gspca_dev); in gspca_init_transfer()
925 destroy_urbs(gspca_dev); in gspca_init_transfer()
928 gspca_dev->streaming = 1; in gspca_init_transfer()
929 v4l2_ctrl_handler_setup(gspca_dev->vdev.ctrl_handler); in gspca_init_transfer()
932 if (gspca_dev->cam.bulk && gspca_dev->cam.bulk_nurbs == 0) in gspca_init_transfer()
937 urb = gspca_dev->urb[n]; in gspca_init_transfer()
949 gspca_stream_off(gspca_dev); in gspca_init_transfer()
952 gspca_dev->alt, ret); in gspca_init_transfer()
961 if (gspca_dev->sd_desc->isoc_nego) { in gspca_init_transfer()
962 ret = gspca_dev->sd_desc->isoc_nego(gspca_dev); in gspca_init_transfer()
971 gspca_dev->alt = ep_tb[--alt_idx].alt; in gspca_init_transfer()
975 gspca_input_create_urb(gspca_dev); in gspca_init_transfer()
979 static void gspca_set_default_mode(struct gspca_dev *gspca_dev) in gspca_set_default_mode() argument
983 i = gspca_dev->cam.nmodes - 1; /* take the highest mode */ in gspca_set_default_mode()
984 gspca_dev->curr_mode = i; in gspca_set_default_mode()
985 gspca_dev->width = gspca_dev->cam.cam_mode[i].width; in gspca_set_default_mode()
986 gspca_dev->height = gspca_dev->cam.cam_mode[i].height; in gspca_set_default_mode()
987 gspca_dev->pixfmt = gspca_dev->cam.cam_mode[i].pixelformat; in gspca_set_default_mode()
990 v4l2_ctrl_handler_setup(gspca_dev->vdev.ctrl_handler); in gspca_set_default_mode()
993 static int wxh_to_mode(struct gspca_dev *gspca_dev, in wxh_to_mode() argument
998 for (i = gspca_dev->cam.nmodes; --i > 0; ) { in wxh_to_mode()
999 if (width >= gspca_dev->cam.cam_mode[i].width in wxh_to_mode()
1000 && height >= gspca_dev->cam.cam_mode[i].height) in wxh_to_mode()
1009 static int gspca_get_mode(struct gspca_dev *gspca_dev, in gspca_get_mode() argument
1016 while ((modeU < gspca_dev->cam.nmodes) || modeD >= 0) { in gspca_get_mode()
1018 if (gspca_dev->cam.cam_mode[modeD].pixelformat in gspca_get_mode()
1022 if (++modeU < gspca_dev->cam.nmodes) { in gspca_get_mode()
1023 if (gspca_dev->cam.cam_mode[modeU].pixelformat in gspca_get_mode()
1035 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_register() local
1037 gspca_dev->usb_err = 0; in vidioc_g_register()
1038 return gspca_dev->sd_desc->get_register(gspca_dev, reg); in vidioc_g_register()
1044 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_s_register() local
1046 gspca_dev->usb_err = 0; in vidioc_s_register()
1047 return gspca_dev->sd_desc->set_register(gspca_dev, reg); in vidioc_s_register()
1054 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_chip_ident() local
1056 gspca_dev->usb_err = 0; in vidioc_g_chip_ident()
1057 return gspca_dev->sd_desc->get_chip_ident(gspca_dev, chip); in vidioc_g_chip_ident()
1063 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_enum_fmt_vid_cap() local
1070 for (i = gspca_dev->cam.nmodes; --i >= 0; ) { in vidioc_enum_fmt_vid_cap()
1071 fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixelformat; in vidioc_enum_fmt_vid_cap()
1090 if (gspca_dev->cam.cam_mode[i].sizeimage < in vidioc_enum_fmt_vid_cap()
1091 gspca_dev->cam.cam_mode[i].width * in vidioc_enum_fmt_vid_cap()
1092 gspca_dev->cam.cam_mode[i].height) in vidioc_enum_fmt_vid_cap()
1105 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
1108 mode = gspca_dev->curr_mode; in vidioc_g_fmt_vid_cap()
1109 fmt->fmt.pix = gspca_dev->cam.cam_mode[mode]; in vidioc_g_fmt_vid_cap()
1116 static int try_fmt_vid_cap(struct gspca_dev *gspca_dev, in try_fmt_vid_cap() argument
1124 PDEBUG_MODE(gspca_dev, D_CONF, "try fmt cap", in try_fmt_vid_cap()
1128 mode = wxh_to_mode(gspca_dev, w, h); in try_fmt_vid_cap()
1131 if (gspca_dev->cam.cam_mode[mode].pixelformat in try_fmt_vid_cap()
1135 mode2 = gspca_get_mode(gspca_dev, mode, in try_fmt_vid_cap()
1140 fmt->fmt.pix = gspca_dev->cam.cam_mode[mode]; in try_fmt_vid_cap()
1151 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
1154 ret = try_fmt_vid_cap(gspca_dev, fmt); in vidioc_try_fmt_vid_cap()
1163 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
1166 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_s_fmt_vid_cap()
1169 ret = try_fmt_vid_cap(gspca_dev, fmt); in vidioc_s_fmt_vid_cap()
1173 if (gspca_dev->nframes != 0 in vidioc_s_fmt_vid_cap()
1174 && fmt->fmt.pix.sizeimage > gspca_dev->frsz) { in vidioc_s_fmt_vid_cap()
1179 if (ret == gspca_dev->curr_mode) { in vidioc_s_fmt_vid_cap()
1184 if (gspca_dev->streaming) { in vidioc_s_fmt_vid_cap()
1188 gspca_dev->width = fmt->fmt.pix.width; in vidioc_s_fmt_vid_cap()
1189 gspca_dev->height = fmt->fmt.pix.height; in vidioc_s_fmt_vid_cap()
1190 gspca_dev->pixfmt = fmt->fmt.pix.pixelformat; in vidioc_s_fmt_vid_cap()
1191 gspca_dev->curr_mode = ret; in vidioc_s_fmt_vid_cap()
1195 mutex_unlock(&gspca_dev->queue_lock); in vidioc_s_fmt_vid_cap()
1202 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_enum_framesizes() local
1206 for (i = 0; i < gspca_dev->cam.nmodes; i++) { in vidioc_enum_framesizes()
1208 gspca_dev->cam.cam_mode[i].pixelformat) in vidioc_enum_framesizes()
1214 gspca_dev->cam.cam_mode[i].width; in vidioc_enum_framesizes()
1216 gspca_dev->cam.cam_mode[i].height; in vidioc_enum_framesizes()
1228 struct gspca_dev *gspca_dev = video_drvdata(filp); in vidioc_enum_frameintervals() local
1229 int mode = wxh_to_mode(gspca_dev, fival->width, fival->height); in vidioc_enum_frameintervals()
1232 if (gspca_dev->cam.mode_framerates == NULL || in vidioc_enum_frameintervals()
1233 gspca_dev->cam.mode_framerates[mode].nrates == 0) in vidioc_enum_frameintervals()
1237 gspca_dev->cam.cam_mode[mode].pixelformat) in vidioc_enum_frameintervals()
1240 for (i = 0; i < gspca_dev->cam.mode_framerates[mode].nrates; i++) { in vidioc_enum_frameintervals()
1245 gspca_dev->cam.mode_framerates[mode].rates[i]; in vidioc_enum_frameintervals()
1255 struct gspca_dev *gspca_dev = in gspca_release() local
1256 container_of(v4l2_device, struct gspca_dev, v4l2_dev); in gspca_release()
1258 v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler); in gspca_release()
1259 v4l2_device_unregister(&gspca_dev->v4l2_dev); in gspca_release()
1260 kfree(gspca_dev->usb_buf); in gspca_release()
1261 kfree(gspca_dev); in gspca_release()
1266 struct gspca_dev *gspca_dev = video_drvdata(file); in dev_open() local
1271 if (!try_module_get(gspca_dev->module)) in dev_open()
1279 struct gspca_dev *gspca_dev = video_drvdata(file); in dev_close() local
1284 if (mutex_lock_interruptible(&gspca_dev->usb_lock)) in dev_close()
1287 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) { in dev_close()
1288 mutex_unlock(&gspca_dev->usb_lock); in dev_close()
1293 if (gspca_dev->capt_file == file) { in dev_close()
1294 if (gspca_dev->streaming) in dev_close()
1295 gspca_stream_off(gspca_dev); in dev_close()
1296 frame_free(gspca_dev); in dev_close()
1298 module_put(gspca_dev->module); in dev_close()
1299 mutex_unlock(&gspca_dev->queue_lock); in dev_close()
1300 mutex_unlock(&gspca_dev->usb_lock); in dev_close()
1310 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_querycap() local
1312 strlcpy((char *) cap->driver, gspca_dev->sd_desc->name, in vidioc_querycap()
1314 if (gspca_dev->dev->product != NULL) { in vidioc_querycap()
1315 strlcpy((char *) cap->card, gspca_dev->dev->product, in vidioc_querycap()
1320 le16_to_cpu(gspca_dev->dev->descriptor.idVendor), in vidioc_querycap()
1321 le16_to_cpu(gspca_dev->dev->descriptor.idProduct)); in vidioc_querycap()
1323 usb_make_path(gspca_dev->dev, (char *) cap->bus_info, in vidioc_querycap()
1335 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_enum_input() local
1340 input->status = gspca_dev->cam.input_flags; in vidioc_enum_input()
1341 strlcpy(input->name, gspca_dev->sd_desc->name, in vidioc_enum_input()
1362 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_reqbufs() local
1374 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_reqbufs()
1377 if (gspca_dev->memory != GSPCA_MEMORY_NO in vidioc_reqbufs()
1378 && gspca_dev->memory != GSPCA_MEMORY_READ in vidioc_reqbufs()
1379 && gspca_dev->memory != rb->memory) { in vidioc_reqbufs()
1385 if (gspca_dev->capt_file != NULL in vidioc_reqbufs()
1386 && gspca_dev->capt_file != file) { in vidioc_reqbufs()
1392 for (i = 0; i < gspca_dev->nframes; i++) { in vidioc_reqbufs()
1393 if (gspca_dev->frame[i].vma_use_count) { in vidioc_reqbufs()
1400 streaming = gspca_dev->streaming; in vidioc_reqbufs()
1402 gspca_stream_off(gspca_dev); in vidioc_reqbufs()
1406 if (gspca_dev->memory == GSPCA_MEMORY_READ) in vidioc_reqbufs()
1411 if (gspca_dev->nframes != 0) in vidioc_reqbufs()
1412 frame_free(gspca_dev); in vidioc_reqbufs()
1415 ret = frame_alloc(gspca_dev, file, rb->memory, rb->count); in vidioc_reqbufs()
1417 rb->count = gspca_dev->nframes; in vidioc_reqbufs()
1419 ret = gspca_init_transfer(gspca_dev); in vidioc_reqbufs()
1422 mutex_unlock(&gspca_dev->queue_lock); in vidioc_reqbufs()
1430 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_querybuf() local
1433 if (v4l2_buf->index >= gspca_dev->nframes) in vidioc_querybuf()
1436 frame = &gspca_dev->frame[v4l2_buf->index]; in vidioc_querybuf()
1444 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_streamon() local
1449 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_streamon()
1453 if (gspca_dev->capt_file != file) { in vidioc_streamon()
1458 if (gspca_dev->nframes == 0 in vidioc_streamon()
1459 || !(gspca_dev->frame[0].v4l2_buf.flags & V4L2_BUF_FLAG_QUEUED)) { in vidioc_streamon()
1463 if (!gspca_dev->streaming) { in vidioc_streamon()
1464 ret = gspca_init_transfer(gspca_dev); in vidioc_streamon()
1468 PDEBUG_MODE(gspca_dev, D_STREAM, "stream on OK", gspca_dev->pixfmt, in vidioc_streamon()
1469 gspca_dev->width, gspca_dev->height); in vidioc_streamon()
1472 mutex_unlock(&gspca_dev->queue_lock); in vidioc_streamon()
1479 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_streamoff() local
1485 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_streamoff()
1488 if (!gspca_dev->streaming) { in vidioc_streamoff()
1494 if (gspca_dev->capt_file != file) { in vidioc_streamoff()
1500 gspca_stream_off(gspca_dev); in vidioc_streamoff()
1502 wake_up_interruptible(&gspca_dev->wq); in vidioc_streamoff()
1505 for (i = 0; i < gspca_dev->nframes; i++) in vidioc_streamoff()
1506 gspca_dev->frame[i].v4l2_buf.flags &= ~BUF_ALL_FLAGS; in vidioc_streamoff()
1507 atomic_set(&gspca_dev->fr_q, 0); in vidioc_streamoff()
1508 atomic_set(&gspca_dev->fr_i, 0); in vidioc_streamoff()
1509 gspca_dev->fr_o = 0; in vidioc_streamoff()
1512 mutex_unlock(&gspca_dev->queue_lock); in vidioc_streamoff()
1519 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_jpegcomp() local
1521 gspca_dev->usb_err = 0; in vidioc_g_jpegcomp()
1522 return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp); in vidioc_g_jpegcomp()
1528 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_s_jpegcomp() local
1530 gspca_dev->usb_err = 0; in vidioc_s_jpegcomp()
1531 return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp); in vidioc_s_jpegcomp()
1537 struct gspca_dev *gspca_dev = video_drvdata(filp); in vidioc_g_parm() local
1539 parm->parm.capture.readbuffers = gspca_dev->nbufread; in vidioc_g_parm()
1541 if (gspca_dev->sd_desc->get_streamparm) { in vidioc_g_parm()
1542 gspca_dev->usb_err = 0; in vidioc_g_parm()
1543 gspca_dev->sd_desc->get_streamparm(gspca_dev, parm); in vidioc_g_parm()
1544 return gspca_dev->usb_err; in vidioc_g_parm()
1552 struct gspca_dev *gspca_dev = video_drvdata(filp); in vidioc_s_parm() local
1557 parm->parm.capture.readbuffers = gspca_dev->nbufread; in vidioc_s_parm()
1559 gspca_dev->nbufread = n; in vidioc_s_parm()
1561 if (gspca_dev->sd_desc->set_streamparm) { in vidioc_s_parm()
1562 gspca_dev->usb_err = 0; in vidioc_s_parm()
1563 gspca_dev->sd_desc->set_streamparm(gspca_dev, parm); in vidioc_s_parm()
1564 return gspca_dev->usb_err; in vidioc_s_parm()
1572 struct gspca_dev *gspca_dev = video_drvdata(file); in dev_mmap() local
1582 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in dev_mmap()
1584 if (gspca_dev->capt_file != file) { in dev_mmap()
1590 for (i = 0; i < gspca_dev->nframes; ++i) { in dev_mmap()
1591 if (gspca_dev->frame[i].v4l2_buf.memory != V4L2_MEMORY_MMAP) { in dev_mmap()
1595 if ((gspca_dev->frame[i].v4l2_buf.m.offset >> PAGE_SHIFT) in dev_mmap()
1597 frame = &gspca_dev->frame[i]; in dev_mmap()
1634 mutex_unlock(&gspca_dev->queue_lock); in dev_mmap()
1638 static int frame_ready_nolock(struct gspca_dev *gspca_dev, struct file *file, in frame_ready_nolock() argument
1641 if (!gspca_dev->present) in frame_ready_nolock()
1643 if (gspca_dev->capt_file != file || gspca_dev->memory != memory || in frame_ready_nolock()
1644 !gspca_dev->streaming) in frame_ready_nolock()
1648 return gspca_dev->fr_o != atomic_read(&gspca_dev->fr_i); in frame_ready_nolock()
1651 static int frame_ready(struct gspca_dev *gspca_dev, struct file *file, in frame_ready() argument
1656 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in frame_ready()
1658 ret = frame_ready_nolock(gspca_dev, file, memory); in frame_ready()
1659 mutex_unlock(&gspca_dev->queue_lock); in frame_ready()
1671 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_dqbuf() local
1677 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_dqbuf()
1681 ret = frame_ready_nolock(gspca_dev, file, v4l2_buf->memory); in vidioc_dqbuf()
1687 mutex_unlock(&gspca_dev->queue_lock); in vidioc_dqbuf()
1693 ret = wait_event_interruptible_timeout(gspca_dev->wq, in vidioc_dqbuf()
1694 frame_ready(gspca_dev, file, v4l2_buf->memory), in vidioc_dqbuf()
1701 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_dqbuf()
1705 i = gspca_dev->fr_o; in vidioc_dqbuf()
1706 j = gspca_dev->fr_queue[i]; in vidioc_dqbuf()
1707 frame = &gspca_dev->frame[j]; in vidioc_dqbuf()
1709 gspca_dev->fr_o = (i + 1) % GSPCA_MAX_FRAMES; in vidioc_dqbuf()
1716 if (gspca_dev->memory == V4L2_MEMORY_USERPTR) { in vidioc_dqbuf()
1725 mutex_unlock(&gspca_dev->queue_lock); in vidioc_dqbuf()
1727 if (ret == 0 && gspca_dev->sd_desc->dq_callback) { in vidioc_dqbuf()
1728 mutex_lock(&gspca_dev->usb_lock); in vidioc_dqbuf()
1729 gspca_dev->usb_err = 0; in vidioc_dqbuf()
1730 if (gspca_dev->present) in vidioc_dqbuf()
1731 gspca_dev->sd_desc->dq_callback(gspca_dev); in vidioc_dqbuf()
1732 mutex_unlock(&gspca_dev->usb_lock); in vidioc_dqbuf()
1747 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_qbuf() local
1753 if (mutex_lock_interruptible(&gspca_dev->queue_lock)) in vidioc_qbuf()
1757 if ((unsigned) index >= gspca_dev->nframes) { in vidioc_qbuf()
1759 "qbuf idx %d >= %d", index, gspca_dev->nframes); in vidioc_qbuf()
1763 if (v4l2_buf->memory != gspca_dev->memory) { in vidioc_qbuf()
1769 frame = &gspca_dev->frame[index]; in vidioc_qbuf()
1784 i = atomic_read(&gspca_dev->fr_q); in vidioc_qbuf()
1785 gspca_dev->fr_queue[i] = index; in vidioc_qbuf()
1786 atomic_set(&gspca_dev->fr_q, (i + 1) % GSPCA_MAX_FRAMES); in vidioc_qbuf()
1792 mutex_unlock(&gspca_dev->queue_lock); in vidioc_qbuf()
1799 static int read_alloc(struct gspca_dev *gspca_dev, in read_alloc() argument
1807 if (mutex_lock_interruptible(&gspca_dev->usb_lock)) in read_alloc()
1810 if (gspca_dev->nframes == 0) { in read_alloc()
1814 rb.count = gspca_dev->nbufread; in read_alloc()
1817 ret = vidioc_reqbufs(file, gspca_dev, &rb); in read_alloc()
1825 for (i = 0; i < gspca_dev->nbufread; i++) { in read_alloc()
1827 ret = vidioc_qbuf(file, gspca_dev, &v4l2_buf); in read_alloc()
1836 ret = vidioc_streamon(file, gspca_dev, V4L2_BUF_TYPE_VIDEO_CAPTURE); in read_alloc()
1840 mutex_unlock(&gspca_dev->usb_lock); in read_alloc()
1846 struct gspca_dev *gspca_dev = video_drvdata(file); in dev_poll() local
1857 if (gspca_dev->memory == GSPCA_MEMORY_NO) { in dev_poll()
1858 if (read_alloc(gspca_dev, file) != 0) { in dev_poll()
1864 poll_wait(file, &gspca_dev->wq, wait); in dev_poll()
1867 if (mutex_lock_interruptible(&gspca_dev->queue_lock) != 0) { in dev_poll()
1871 if (gspca_dev->fr_o != atomic_read(&gspca_dev->fr_i)) in dev_poll()
1873 mutex_unlock(&gspca_dev->queue_lock); in dev_poll()
1877 if (!gspca_dev->present) in dev_poll()
1886 struct gspca_dev *gspca_dev = video_drvdata(file); in dev_read() local
1893 if (gspca_dev->memory == GSPCA_MEMORY_NO) { /* first time ? */ in dev_read()
1894 ret = read_alloc(gspca_dev, file); in dev_read()
1907 ret = vidioc_dqbuf(file, gspca_dev, &v4l2_buf); in dev_read()
1915 frame = &gspca_dev->frame[v4l2_buf.index]; in dev_read()
1920 ret = vidioc_qbuf(file, gspca_dev, &v4l2_buf); in dev_read()
1939 ret2 = vidioc_qbuf(file, gspca_dev, &v4l2_buf); in dev_read()
2004 struct gspca_dev *gspca_dev; in gspca_dev_probe2() local
2012 if (dev_size < sizeof *gspca_dev) in gspca_dev_probe2()
2013 dev_size = sizeof *gspca_dev; in gspca_dev_probe2()
2014 gspca_dev = kzalloc(dev_size, GFP_KERNEL); in gspca_dev_probe2()
2015 if (!gspca_dev) { in gspca_dev_probe2()
2019 gspca_dev->usb_buf = kmalloc(USB_BUF_SZ, GFP_KERNEL); in gspca_dev_probe2()
2020 if (!gspca_dev->usb_buf) { in gspca_dev_probe2()
2025 gspca_dev->dev = dev; in gspca_dev_probe2()
2026 gspca_dev->iface = intf->cur_altsetting->desc.bInterfaceNumber; in gspca_dev_probe2()
2039 gspca_dev->audio = 1; in gspca_dev_probe2()
2045 gspca_dev->v4l2_dev.release = gspca_release; in gspca_dev_probe2()
2046 ret = v4l2_device_register(&intf->dev, &gspca_dev->v4l2_dev); in gspca_dev_probe2()
2049 gspca_dev->sd_desc = sd_desc; in gspca_dev_probe2()
2050 gspca_dev->nbufread = 2; in gspca_dev_probe2()
2051 gspca_dev->empty_packet = -1; /* don't check the empty packets */ in gspca_dev_probe2()
2052 gspca_dev->vdev = gspca_template; in gspca_dev_probe2()
2053 gspca_dev->vdev.v4l2_dev = &gspca_dev->v4l2_dev; in gspca_dev_probe2()
2054 video_set_drvdata(&gspca_dev->vdev, gspca_dev); in gspca_dev_probe2()
2055 set_bit(V4L2_FL_USE_FH_PRIO, &gspca_dev->vdev.flags); in gspca_dev_probe2()
2056 gspca_dev->module = module; in gspca_dev_probe2()
2057 gspca_dev->present = 1; in gspca_dev_probe2()
2059 mutex_init(&gspca_dev->usb_lock); in gspca_dev_probe2()
2060 gspca_dev->vdev.lock = &gspca_dev->usb_lock; in gspca_dev_probe2()
2061 mutex_init(&gspca_dev->queue_lock); in gspca_dev_probe2()
2062 init_waitqueue_head(&gspca_dev->wq); in gspca_dev_probe2()
2065 ret = sd_desc->config(gspca_dev, id); in gspca_dev_probe2()
2068 ret = sd_desc->init(gspca_dev); in gspca_dev_probe2()
2072 ret = sd_desc->init_controls(gspca_dev); in gspca_dev_probe2()
2075 gspca_set_default_mode(gspca_dev); in gspca_dev_probe2()
2077 ret = gspca_input_connect(gspca_dev); in gspca_dev_probe2()
2086 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_DQBUF); in gspca_dev_probe2()
2087 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QBUF); in gspca_dev_probe2()
2088 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QUERYBUF); in gspca_dev_probe2()
2089 if (!gspca_dev->sd_desc->get_chip_ident) in gspca_dev_probe2()
2090 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_CHIP_IDENT); in gspca_dev_probe2()
2092 if (!gspca_dev->sd_desc->get_chip_ident || in gspca_dev_probe2()
2093 !gspca_dev->sd_desc->get_register) in gspca_dev_probe2()
2094 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_REGISTER); in gspca_dev_probe2()
2095 if (!gspca_dev->sd_desc->get_chip_ident || in gspca_dev_probe2()
2096 !gspca_dev->sd_desc->set_register) in gspca_dev_probe2()
2097 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_S_REGISTER); in gspca_dev_probe2()
2099 if (!gspca_dev->sd_desc->get_jcomp) in gspca_dev_probe2()
2100 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_G_JPEGCOMP); in gspca_dev_probe2()
2101 if (!gspca_dev->sd_desc->set_jcomp) in gspca_dev_probe2()
2102 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_S_JPEGCOMP); in gspca_dev_probe2()
2105 ret = video_register_device(&gspca_dev->vdev, in gspca_dev_probe2()
2113 usb_set_intfdata(intf, gspca_dev); in gspca_dev_probe2()
2114 PDEBUG(D_PROBE, "%s created", video_device_node_name(&gspca_dev->vdev)); in gspca_dev_probe2()
2116 gspca_input_create_urb(gspca_dev); in gspca_dev_probe2()
2121 if (gspca_dev->input_dev) in gspca_dev_probe2()
2122 input_unregister_device(gspca_dev->input_dev); in gspca_dev_probe2()
2124 v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler); in gspca_dev_probe2()
2125 kfree(gspca_dev->usb_buf); in gspca_dev_probe2()
2126 kfree(gspca_dev); in gspca_dev_probe2()
2164 struct gspca_dev *gspca_dev = usb_get_intfdata(intf); in gspca_disconnect() local
2170 video_device_node_name(&gspca_dev->vdev)); in gspca_disconnect()
2172 mutex_lock(&gspca_dev->usb_lock); in gspca_disconnect()
2174 gspca_dev->present = 0; in gspca_disconnect()
2175 destroy_urbs(gspca_dev); in gspca_disconnect()
2178 gspca_input_destroy_urb(gspca_dev); in gspca_disconnect()
2179 input_dev = gspca_dev->input_dev; in gspca_disconnect()
2181 gspca_dev->input_dev = NULL; in gspca_disconnect()
2186 if (gspca_dev->sd_desc->stop0 && gspca_dev->streaming) in gspca_disconnect()
2187 gspca_dev->sd_desc->stop0(gspca_dev); in gspca_disconnect()
2188 gspca_dev->streaming = 0; in gspca_disconnect()
2189 gspca_dev->dev = NULL; in gspca_disconnect()
2190 wake_up_interruptible(&gspca_dev->wq); in gspca_disconnect()
2192 v4l2_device_disconnect(&gspca_dev->v4l2_dev); in gspca_disconnect()
2193 video_unregister_device(&gspca_dev->vdev); in gspca_disconnect()
2195 mutex_unlock(&gspca_dev->usb_lock); in gspca_disconnect()
2198 v4l2_device_put(&gspca_dev->v4l2_dev); in gspca_disconnect()
2205 struct gspca_dev *gspca_dev = usb_get_intfdata(intf); in gspca_suspend() local
2207 gspca_input_destroy_urb(gspca_dev); in gspca_suspend()
2209 if (!gspca_dev->streaming) in gspca_suspend()
2212 mutex_lock(&gspca_dev->usb_lock); in gspca_suspend()
2213 gspca_dev->frozen = 1; /* avoid urb error messages */ in gspca_suspend()
2214 gspca_dev->usb_err = 0; in gspca_suspend()
2215 if (gspca_dev->sd_desc->stopN) in gspca_suspend()
2216 gspca_dev->sd_desc->stopN(gspca_dev); in gspca_suspend()
2217 destroy_urbs(gspca_dev); in gspca_suspend()
2218 gspca_set_alt0(gspca_dev); in gspca_suspend()
2219 if (gspca_dev->sd_desc->stop0) in gspca_suspend()
2220 gspca_dev->sd_desc->stop0(gspca_dev); in gspca_suspend()
2221 mutex_unlock(&gspca_dev->usb_lock); in gspca_suspend()
2229 struct gspca_dev *gspca_dev = usb_get_intfdata(intf); in gspca_resume() local
2232 mutex_lock(&gspca_dev->usb_lock); in gspca_resume()
2233 gspca_dev->frozen = 0; in gspca_resume()
2234 gspca_dev->usb_err = 0; in gspca_resume()
2235 gspca_dev->sd_desc->init(gspca_dev); in gspca_resume()
2241 streaming = gspca_dev->streaming; in gspca_resume()
2242 gspca_dev->streaming = 0; in gspca_resume()
2244 ret = gspca_init_transfer(gspca_dev); in gspca_resume()
2246 gspca_input_create_urb(gspca_dev); in gspca_resume()
2247 mutex_unlock(&gspca_dev->usb_lock); in gspca_resume()