Lines Matching refs:gspca_dev
62 static void PDEBUG_MODE(struct gspca_dev *gspca_dev, int debug, char *txt, in PDEBUG_MODE() argument
66 gspca_dbg(gspca_dev, debug, "%s %c%c%c%c %dx%d\n", in PDEBUG_MODE()
74 gspca_dbg(gspca_dev, debug, "%s 0x%08x %dx%d\n", in PDEBUG_MODE()
91 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in int_irq() local
97 if (gspca_dev->sd_desc->int_pkt_scan(gspca_dev, in int_irq()
99 gspca_err(gspca_dev, "Unknown packet received\n"); in int_irq()
113 gspca_err(gspca_dev, "URB error %i, resubmitting\n", in int_irq()
126 static int gspca_input_connect(struct gspca_dev *dev) in gspca_input_connect()
163 static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev, in alloc_and_submit_int_urb() argument
175 gspca_dbg(gspca_dev, D_CONF, "found int in endpoint: 0x%x, buffer_len=%u, interval=%u\n", in alloc_and_submit_int_urb()
178 dev = gspca_dev->dev; in alloc_and_submit_int_urb()
195 int_irq, (void *)gspca_dev, interval); in alloc_and_submit_int_urb()
199 gspca_err(gspca_dev, "submit int URB failed with error %i\n", in alloc_and_submit_int_urb()
203 gspca_dev->int_urb = urb; in alloc_and_submit_int_urb()
217 static void gspca_input_create_urb(struct gspca_dev *gspca_dev) in gspca_input_create_urb() argument
224 if (gspca_dev->sd_desc->int_pkt_scan) { in gspca_input_create_urb()
225 intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface); in gspca_input_create_urb()
232 alloc_and_submit_int_urb(gspca_dev, ep); in gspca_input_create_urb()
239 static void gspca_input_destroy_urb(struct gspca_dev *gspca_dev) in gspca_input_destroy_urb() argument
243 urb = gspca_dev->int_urb; in gspca_input_destroy_urb()
245 gspca_dev->int_urb = NULL; in gspca_input_destroy_urb()
247 usb_free_coherent(gspca_dev->dev, in gspca_input_destroy_urb()
255 static inline void gspca_input_destroy_urb(struct gspca_dev *gspca_dev) in gspca_input_destroy_urb() argument
259 static inline void gspca_input_create_urb(struct gspca_dev *gspca_dev) in gspca_input_create_urb() argument
263 static inline int gspca_input_connect(struct gspca_dev *dev) in gspca_input_connect()
272 static void fill_frame(struct gspca_dev *gspca_dev, in fill_frame() argument
283 if (gspca_dev->frozen) in fill_frame()
286 gspca_err(gspca_dev, "urb status: %d\n", urb->status); in fill_frame()
290 pkt_scan = gspca_dev->sd_desc->pkt_scan; in fill_frame()
299 gspca_dev->last_packet_type = DISCARD_PACKET; in fill_frame()
303 if (gspca_dev->empty_packet == 0) in fill_frame()
304 gspca_dev->empty_packet = 1; in fill_frame()
309 gspca_dbg(gspca_dev, D_PACK, "packet [%d] o:%d l:%d\n", in fill_frame()
313 pkt_scan(gspca_dev, data, len); in fill_frame()
330 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in isoc_irq() local
332 gspca_dbg(gspca_dev, D_PACK, "isoc irq\n"); in isoc_irq()
333 if (!vb2_start_streaming_called(&gspca_dev->queue)) in isoc_irq()
335 fill_frame(gspca_dev, urb); in isoc_irq()
343 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in bulk_irq() local
346 gspca_dbg(gspca_dev, D_PACK, "bulk irq\n"); in bulk_irq()
347 if (!vb2_start_streaming_called(&gspca_dev->queue)) in bulk_irq()
356 if (gspca_dev->frozen) in bulk_irq()
359 gspca_err(gspca_dev, "urb status: %d\n", urb->status); in bulk_irq()
364 gspca_dbg(gspca_dev, D_PACK, "packet l:%d\n", urb->actual_length); in bulk_irq()
365 gspca_dev->sd_desc->pkt_scan(gspca_dev, in bulk_irq()
371 if (gspca_dev->cam.bulk_nurbs != 0) { in bulk_irq()
389 void gspca_frame_add(struct gspca_dev *gspca_dev, in gspca_frame_add() argument
397 gspca_dbg(gspca_dev, D_PACK, "add t:%d l:%d\n", packet_type, len); in gspca_frame_add()
399 spin_lock_irqsave(&gspca_dev->qlock, flags); in gspca_frame_add()
400 buf = list_first_entry_or_null(&gspca_dev->buf_list, in gspca_frame_add()
402 spin_unlock_irqrestore(&gspca_dev->qlock, flags); in gspca_frame_add()
407 gspca_dev->last_packet_type = DISCARD_PACKET; in gspca_frame_add()
408 gspca_dev->sequence++; in gspca_frame_add()
411 gspca_dev->image = vb2_plane_vaddr(&buf->vb.vb2_buf, 0); in gspca_frame_add()
412 gspca_dev->image_len = 0; in gspca_frame_add()
414 switch (gspca_dev->last_packet_type) { in gspca_frame_add()
417 gspca_dev->last_packet_type = packet_type; in gspca_frame_add()
418 gspca_dev->image = NULL; in gspca_frame_add()
419 gspca_dev->image_len = 0; in gspca_frame_add()
429 if (gspca_dev->image_len + len > gspca_dev->pixfmt.sizeimage) { in gspca_frame_add()
430 gspca_err(gspca_dev, "frame overflow %d > %d\n", in gspca_frame_add()
431 gspca_dev->image_len + len, in gspca_frame_add()
432 gspca_dev->pixfmt.sizeimage); in gspca_frame_add()
441 memcpy(gspca_dev->image + gspca_dev->image_len, in gspca_frame_add()
443 gspca_dev->image_len += len; in gspca_frame_add()
446 gspca_dev->last_packet_type = packet_type; in gspca_frame_add()
452 spin_lock_irqsave(&gspca_dev->qlock, flags); in gspca_frame_add()
454 spin_unlock_irqrestore(&gspca_dev->qlock, flags); in gspca_frame_add()
457 gspca_dev->image_len); in gspca_frame_add()
458 buf->vb.sequence = gspca_dev->sequence++; in gspca_frame_add()
460 gspca_dbg(gspca_dev, D_FRAM, "frame complete len:%d\n", in gspca_frame_add()
461 gspca_dev->image_len); in gspca_frame_add()
463 gspca_dev->image = NULL; in gspca_frame_add()
464 gspca_dev->image_len = 0; in gspca_frame_add()
469 static void destroy_urbs(struct gspca_dev *gspca_dev) in destroy_urbs() argument
474 gspca_dbg(gspca_dev, D_STREAM, "kill transfer\n"); in destroy_urbs()
481 usb_kill_urb(gspca_dev->urb[i]); in destroy_urbs()
483 gspca_dbg(gspca_dev, D_STREAM, "releasing urbs\n"); in destroy_urbs()
485 urb = gspca_dev->urb[i]; in destroy_urbs()
488 gspca_dev->urb[i] = NULL; in destroy_urbs()
489 usb_free_coherent(gspca_dev->dev, in destroy_urbs()
497 static int gspca_set_alt0(struct gspca_dev *gspca_dev) in gspca_set_alt0() argument
501 if (gspca_dev->alt == 0) in gspca_set_alt0()
503 ret = usb_set_interface(gspca_dev->dev, gspca_dev->iface, 0); in gspca_set_alt0()
534 static u32 which_bandwidth(struct gspca_dev *gspca_dev) in which_bandwidth() argument
539 bandwidth = gspca_dev->pixfmt.sizeimage; in which_bandwidth()
542 if (!gspca_dev->cam.needs_full_bandwidth && in which_bandwidth()
543 bandwidth < gspca_dev->pixfmt.width * in which_bandwidth()
544 gspca_dev->pixfmt.height) in which_bandwidth()
548 if (gspca_dev->sd_desc->get_streamparm) { in which_bandwidth()
551 gspca_dev->sd_desc->get_streamparm(gspca_dev, &parm); in which_bandwidth()
558 if (gspca_dev->pixfmt.width >= 640 in which_bandwidth()
559 && gspca_dev->dev->speed == USB_SPEED_FULL) in which_bandwidth()
565 gspca_dbg(gspca_dev, D_STREAM, "min bandwidth: %d\n", bandwidth); in which_bandwidth()
580 static int build_isoc_ep_tb(struct gspca_dev *gspca_dev, in build_isoc_ep_tb() argument
601 gspca_dev->xfer_ep); in build_isoc_ep_tb()
611 if (gspca_dev->dev->speed == USB_SPEED_HIGH in build_isoc_ep_tb()
612 || gspca_dev->dev->speed >= USB_SPEED_SUPER) in build_isoc_ep_tb()
625 gspca_dbg(gspca_dev, D_STREAM, "alt %d bandwidth %d\n", in build_isoc_ep_tb()
640 if (gspca_dev->audio && in build_isoc_ep_tb()
641 gspca_dev->dev->speed == USB_SPEED_FULL && in build_isoc_ep_tb()
644 gspca_dbg(gspca_dev, D_STREAM, "dev has usb audio, skipping highest alt\n"); in build_isoc_ep_tb()
650 bandwidth = which_bandwidth(gspca_dev); in build_isoc_ep_tb()
664 static int create_urbs(struct gspca_dev *gspca_dev, in create_urbs() argument
673 if (!gspca_dev->cam.bulk) { /* isoc */ in create_urbs()
676 if (gspca_dev->pkt_size == 0) in create_urbs()
679 psize = gspca_dev->pkt_size; in create_urbs()
680 npkt = gspca_dev->cam.npkt; in create_urbs()
684 gspca_dbg(gspca_dev, D_STREAM, in create_urbs()
690 bsize = gspca_dev->cam.bulk_size; in create_urbs()
693 gspca_dbg(gspca_dev, D_STREAM, "bulk bsize:%d\n", bsize); in create_urbs()
694 if (gspca_dev->cam.bulk_nurbs != 0) in create_urbs()
695 nurbs = gspca_dev->cam.bulk_nurbs; in create_urbs()
704 gspca_dev->urb[n] = urb; in create_urbs()
705 urb->transfer_buffer = usb_alloc_coherent(gspca_dev->dev, in create_urbs()
714 urb->dev = gspca_dev->dev; in create_urbs()
715 urb->context = gspca_dev; in create_urbs()
718 urb->pipe = usb_rcvisocpipe(gspca_dev->dev, in create_urbs()
730 urb->pipe = usb_rcvbulkpipe(gspca_dev->dev, in create_urbs()
740 static void gspca_stream_off(struct gspca_dev *gspca_dev) in gspca_stream_off() argument
742 gspca_dev->streaming = false; in gspca_stream_off()
743 gspca_dev->usb_err = 0; in gspca_stream_off()
744 if (gspca_dev->sd_desc->stopN) in gspca_stream_off()
745 gspca_dev->sd_desc->stopN(gspca_dev); in gspca_stream_off()
746 destroy_urbs(gspca_dev); in gspca_stream_off()
747 gspca_input_destroy_urb(gspca_dev); in gspca_stream_off()
748 gspca_set_alt0(gspca_dev); in gspca_stream_off()
749 if (gspca_dev->present) in gspca_stream_off()
750 gspca_input_create_urb(gspca_dev); in gspca_stream_off()
751 if (gspca_dev->sd_desc->stop0) in gspca_stream_off()
752 gspca_dev->sd_desc->stop0(gspca_dev); in gspca_stream_off()
753 gspca_dbg(gspca_dev, D_STREAM, "stream off OK\n"); in gspca_stream_off()
759 static int gspca_init_transfer(struct gspca_dev *gspca_dev) in gspca_init_transfer() argument
768 gspca_dev->image = NULL; in gspca_init_transfer()
769 gspca_dev->image_len = 0; in gspca_init_transfer()
770 gspca_dev->last_packet_type = DISCARD_PACKET; in gspca_init_transfer()
772 gspca_dev->usb_err = 0; in gspca_init_transfer()
775 intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface); in gspca_init_transfer()
776 gspca_dev->alt = gspca_dev->cam.bulk ? intf->num_altsetting : 0; in gspca_init_transfer()
777 if (gspca_dev->sd_desc->isoc_init) { in gspca_init_transfer()
778 ret = gspca_dev->sd_desc->isoc_init(gspca_dev); in gspca_init_transfer()
782 xfer = gspca_dev->cam.bulk ? USB_ENDPOINT_XFER_BULK in gspca_init_transfer()
786 if (gspca_dev->alt != 0) { in gspca_init_transfer()
787 gspca_dev->alt--; /* (previous version compatibility) */ in gspca_init_transfer()
788 ep = alt_xfer(&intf->altsetting[gspca_dev->alt], xfer, in gspca_init_transfer()
789 gspca_dev->xfer_ep); in gspca_init_transfer()
791 pr_err("bad altsetting %d\n", gspca_dev->alt); in gspca_init_transfer()
794 ep_tb[0].alt = gspca_dev->alt; in gspca_init_transfer()
799 alt_idx = build_isoc_ep_tb(gspca_dev, intf, ep_tb); in gspca_init_transfer()
808 gspca_input_destroy_urb(gspca_dev); in gspca_init_transfer()
810 gspca_dev->alt = ep_tb[--alt_idx].alt; in gspca_init_transfer()
813 if (alt != gspca_dev->alt) { in gspca_init_transfer()
814 alt = gspca_dev->alt; in gspca_init_transfer()
816 ret = usb_set_interface(gspca_dev->dev, in gspca_init_transfer()
817 gspca_dev->iface, in gspca_init_transfer()
827 if (!gspca_dev->cam.no_urb_create) { in gspca_init_transfer()
828 gspca_dbg(gspca_dev, D_STREAM, "init transfer alt %d\n", in gspca_init_transfer()
830 ret = create_urbs(gspca_dev, in gspca_init_transfer()
832 gspca_dev->xfer_ep)); in gspca_init_transfer()
834 destroy_urbs(gspca_dev); in gspca_init_transfer()
840 if (gspca_dev->cam.bulk) in gspca_init_transfer()
841 usb_clear_halt(gspca_dev->dev, in gspca_init_transfer()
842 gspca_dev->urb[0]->pipe); in gspca_init_transfer()
845 ret = gspca_dev->sd_desc->start(gspca_dev); in gspca_init_transfer()
847 destroy_urbs(gspca_dev); in gspca_init_transfer()
850 v4l2_ctrl_handler_setup(gspca_dev->vdev.ctrl_handler); in gspca_init_transfer()
851 gspca_dev->streaming = true; in gspca_init_transfer()
854 if (gspca_dev->cam.bulk && gspca_dev->cam.bulk_nurbs == 0) in gspca_init_transfer()
859 urb = gspca_dev->urb[n]; in gspca_init_transfer()
871 gspca_stream_off(gspca_dev); in gspca_init_transfer()
874 gspca_dev->alt, ret); in gspca_init_transfer()
881 gspca_err(gspca_dev, "alt %d - bandwidth not wide enough, trying again\n", in gspca_init_transfer()
884 if (gspca_dev->sd_desc->isoc_nego) { in gspca_init_transfer()
885 ret = gspca_dev->sd_desc->isoc_nego(gspca_dev); in gspca_init_transfer()
894 gspca_dev->alt = ep_tb[--alt_idx].alt; in gspca_init_transfer()
898 gspca_input_create_urb(gspca_dev); in gspca_init_transfer()
902 static void gspca_set_default_mode(struct gspca_dev *gspca_dev) in gspca_set_default_mode() argument
906 i = gspca_dev->cam.nmodes - 1; /* take the highest mode */ in gspca_set_default_mode()
907 gspca_dev->curr_mode = i; in gspca_set_default_mode()
908 gspca_dev->pixfmt = gspca_dev->cam.cam_mode[i]; in gspca_set_default_mode()
911 v4l2_ctrl_handler_setup(gspca_dev->vdev.ctrl_handler); in gspca_set_default_mode()
914 static int wxh_to_mode(struct gspca_dev *gspca_dev, in wxh_to_mode() argument
919 for (i = 0; i < gspca_dev->cam.nmodes; i++) { in wxh_to_mode()
920 if (width == gspca_dev->cam.cam_mode[i].width in wxh_to_mode()
921 && height == gspca_dev->cam.cam_mode[i].height) in wxh_to_mode()
927 static int wxh_to_nearest_mode(struct gspca_dev *gspca_dev, in wxh_to_nearest_mode() argument
932 for (i = gspca_dev->cam.nmodes; --i > 0; ) { in wxh_to_nearest_mode()
933 if (width >= gspca_dev->cam.cam_mode[i].width in wxh_to_nearest_mode()
934 && height >= gspca_dev->cam.cam_mode[i].height) in wxh_to_nearest_mode()
943 static int gspca_get_mode(struct gspca_dev *gspca_dev, in gspca_get_mode() argument
950 while ((modeU < gspca_dev->cam.nmodes) || modeD >= 0) { in gspca_get_mode()
952 if (gspca_dev->cam.cam_mode[modeD].pixelformat in gspca_get_mode()
956 if (++modeU < gspca_dev->cam.nmodes) { in gspca_get_mode()
957 if (gspca_dev->cam.cam_mode[modeU].pixelformat in gspca_get_mode()
969 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_chip_info() local
971 gspca_dev->usb_err = 0; in vidioc_g_chip_info()
972 if (gspca_dev->sd_desc->get_chip_info) in vidioc_g_chip_info()
973 return gspca_dev->sd_desc->get_chip_info(gspca_dev, chip); in vidioc_g_chip_info()
980 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_register() local
982 gspca_dev->usb_err = 0; in vidioc_g_register()
983 return gspca_dev->sd_desc->get_register(gspca_dev, reg); in vidioc_g_register()
989 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_s_register() local
991 gspca_dev->usb_err = 0; in vidioc_s_register()
992 return gspca_dev->sd_desc->set_register(gspca_dev, reg); in vidioc_s_register()
999 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_enum_fmt_vid_cap() local
1005 for (i = gspca_dev->cam.nmodes; --i >= 0; ) { in vidioc_enum_fmt_vid_cap()
1006 fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixelformat; in vidioc_enum_fmt_vid_cap()
1025 if (gspca_dev->cam.cam_mode[i].sizeimage < in vidioc_enum_fmt_vid_cap()
1026 gspca_dev->cam.cam_mode[i].width * in vidioc_enum_fmt_vid_cap()
1027 gspca_dev->cam.cam_mode[i].height) in vidioc_enum_fmt_vid_cap()
1040 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
1042 fmt->fmt.pix = gspca_dev->pixfmt; in vidioc_g_fmt_vid_cap()
1049 static int try_fmt_vid_cap(struct gspca_dev *gspca_dev, in try_fmt_vid_cap() argument
1057 PDEBUG_MODE(gspca_dev, D_CONF, "try fmt cap", in try_fmt_vid_cap()
1061 mode = wxh_to_nearest_mode(gspca_dev, w, h); in try_fmt_vid_cap()
1064 if (gspca_dev->cam.cam_mode[mode].pixelformat in try_fmt_vid_cap()
1068 mode2 = gspca_get_mode(gspca_dev, mode, in try_fmt_vid_cap()
1073 fmt->fmt.pix = gspca_dev->cam.cam_mode[mode]; in try_fmt_vid_cap()
1074 if (gspca_dev->sd_desc->try_fmt) { in try_fmt_vid_cap()
1078 gspca_dev->sd_desc->try_fmt(gspca_dev, fmt); in try_fmt_vid_cap()
1090 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
1092 if (try_fmt_vid_cap(gspca_dev, fmt) < 0) in vidioc_try_fmt_vid_cap()
1100 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
1103 if (vb2_is_busy(&gspca_dev->queue)) in vidioc_s_fmt_vid_cap()
1106 mode = try_fmt_vid_cap(gspca_dev, fmt); in vidioc_s_fmt_vid_cap()
1110 gspca_dev->curr_mode = mode; in vidioc_s_fmt_vid_cap()
1111 if (gspca_dev->sd_desc->try_fmt) in vidioc_s_fmt_vid_cap()
1113 gspca_dev->pixfmt = fmt->fmt.pix; in vidioc_s_fmt_vid_cap()
1115 gspca_dev->pixfmt = gspca_dev->cam.cam_mode[mode]; in vidioc_s_fmt_vid_cap()
1122 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_enum_framesizes() local
1126 if (gspca_dev->sd_desc->enum_framesizes) in vidioc_enum_framesizes()
1127 return gspca_dev->sd_desc->enum_framesizes(gspca_dev, fsize); in vidioc_enum_framesizes()
1129 for (i = 0; i < gspca_dev->cam.nmodes; i++) { in vidioc_enum_framesizes()
1131 gspca_dev->cam.cam_mode[i].pixelformat) in vidioc_enum_framesizes()
1137 gspca_dev->cam.cam_mode[i].width; in vidioc_enum_framesizes()
1139 gspca_dev->cam.cam_mode[i].height; in vidioc_enum_framesizes()
1151 struct gspca_dev *gspca_dev = video_drvdata(filp); in vidioc_enum_frameintervals() local
1155 mode = wxh_to_mode(gspca_dev, fival->width, fival->height); in vidioc_enum_frameintervals()
1159 if (gspca_dev->cam.mode_framerates == NULL || in vidioc_enum_frameintervals()
1160 gspca_dev->cam.mode_framerates[mode].nrates == 0) in vidioc_enum_frameintervals()
1164 gspca_dev->cam.cam_mode[mode].pixelformat) in vidioc_enum_frameintervals()
1167 for (i = 0; i < gspca_dev->cam.mode_framerates[mode].nrates; i++) { in vidioc_enum_frameintervals()
1172 gspca_dev->cam.mode_framerates[mode].rates[i]; in vidioc_enum_frameintervals()
1182 struct gspca_dev *gspca_dev = in gspca_release() local
1183 container_of(v4l2_device, struct gspca_dev, v4l2_dev); in gspca_release()
1185 v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler); in gspca_release()
1186 v4l2_device_unregister(&gspca_dev->v4l2_dev); in gspca_release()
1187 kfree(gspca_dev->usb_buf); in gspca_release()
1188 kfree(gspca_dev); in gspca_release()
1194 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_querycap() local
1196 strlcpy((char *) cap->driver, gspca_dev->sd_desc->name, in vidioc_querycap()
1198 if (gspca_dev->dev->product != NULL) { in vidioc_querycap()
1199 strlcpy((char *) cap->card, gspca_dev->dev->product, in vidioc_querycap()
1204 le16_to_cpu(gspca_dev->dev->descriptor.idVendor), in vidioc_querycap()
1205 le16_to_cpu(gspca_dev->dev->descriptor.idProduct)); in vidioc_querycap()
1207 usb_make_path(gspca_dev->dev, (char *) cap->bus_info, in vidioc_querycap()
1219 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_enum_input() local
1224 input->status = gspca_dev->cam.input_flags; in vidioc_enum_input()
1225 strlcpy(input->name, gspca_dev->sd_desc->name, in vidioc_enum_input()
1246 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_g_jpegcomp() local
1248 gspca_dev->usb_err = 0; in vidioc_g_jpegcomp()
1249 return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp); in vidioc_g_jpegcomp()
1255 struct gspca_dev *gspca_dev = video_drvdata(file); in vidioc_s_jpegcomp() local
1257 gspca_dev->usb_err = 0; in vidioc_s_jpegcomp()
1258 return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp); in vidioc_s_jpegcomp()
1264 struct gspca_dev *gspca_dev = video_drvdata(filp); in vidioc_g_parm() local
1266 parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed; in vidioc_g_parm()
1268 if (!gspca_dev->sd_desc->get_streamparm) in vidioc_g_parm()
1272 gspca_dev->usb_err = 0; in vidioc_g_parm()
1273 gspca_dev->sd_desc->get_streamparm(gspca_dev, parm); in vidioc_g_parm()
1274 return gspca_dev->usb_err; in vidioc_g_parm()
1280 struct gspca_dev *gspca_dev = video_drvdata(filp); in vidioc_s_parm() local
1282 parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed; in vidioc_s_parm()
1284 if (!gspca_dev->sd_desc->set_streamparm) { in vidioc_s_parm()
1290 gspca_dev->usb_err = 0; in vidioc_s_parm()
1291 gspca_dev->sd_desc->set_streamparm(gspca_dev, parm); in vidioc_s_parm()
1292 return gspca_dev->usb_err; in vidioc_s_parm()
1299 struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq); in gspca_queue_setup() local
1302 return sizes[0] < gspca_dev->pixfmt.sizeimage ? -EINVAL : 0; in gspca_queue_setup()
1304 sizes[0] = gspca_dev->pixfmt.sizeimage; in gspca_queue_setup()
1310 struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue); in gspca_buffer_prepare() local
1311 unsigned long size = gspca_dev->pixfmt.sizeimage; in gspca_buffer_prepare()
1314 gspca_err(gspca_dev, "buffer too small (%lu < %lu)\n", in gspca_buffer_prepare()
1323 struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue); in gspca_buffer_finish() local
1325 if (!gspca_dev->sd_desc->dq_callback) in gspca_buffer_finish()
1328 gspca_dev->usb_err = 0; in gspca_buffer_finish()
1329 if (gspca_dev->present) in gspca_buffer_finish()
1330 gspca_dev->sd_desc->dq_callback(gspca_dev); in gspca_buffer_finish()
1335 struct gspca_dev *gspca_dev = vb2_get_drv_priv(vb->vb2_queue); in gspca_buffer_queue() local
1339 spin_lock_irqsave(&gspca_dev->qlock, flags); in gspca_buffer_queue()
1340 list_add_tail(&buf->list, &gspca_dev->buf_list); in gspca_buffer_queue()
1341 spin_unlock_irqrestore(&gspca_dev->qlock, flags); in gspca_buffer_queue()
1344 static void gspca_return_all_buffers(struct gspca_dev *gspca_dev, in gspca_return_all_buffers() argument
1350 spin_lock_irqsave(&gspca_dev->qlock, flags); in gspca_return_all_buffers()
1351 list_for_each_entry_safe(buf, node, &gspca_dev->buf_list, list) { in gspca_return_all_buffers()
1355 spin_unlock_irqrestore(&gspca_dev->qlock, flags); in gspca_return_all_buffers()
1360 struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq); in gspca_start_streaming() local
1363 gspca_dev->sequence = 0; in gspca_start_streaming()
1365 ret = gspca_init_transfer(gspca_dev); in gspca_start_streaming()
1367 gspca_return_all_buffers(gspca_dev, VB2_BUF_STATE_QUEUED); in gspca_start_streaming()
1373 struct gspca_dev *gspca_dev = vb2_get_drv_priv(vq); in gspca_stop_streaming() local
1375 gspca_stream_off(gspca_dev); in gspca_stop_streaming()
1378 gspca_return_all_buffers(gspca_dev, VB2_BUF_STATE_ERROR); in gspca_stop_streaming()
1455 struct gspca_dev *gspca_dev; in gspca_dev_probe2() local
1464 if (dev_size < sizeof *gspca_dev) in gspca_dev_probe2()
1465 dev_size = sizeof *gspca_dev; in gspca_dev_probe2()
1466 gspca_dev = kzalloc(dev_size, GFP_KERNEL); in gspca_dev_probe2()
1467 if (!gspca_dev) { in gspca_dev_probe2()
1471 gspca_dev->usb_buf = kmalloc(USB_BUF_SZ, GFP_KERNEL); in gspca_dev_probe2()
1472 if (!gspca_dev->usb_buf) { in gspca_dev_probe2()
1477 gspca_dev->dev = dev; in gspca_dev_probe2()
1478 gspca_dev->iface = intf->cur_altsetting->desc.bInterfaceNumber; in gspca_dev_probe2()
1479 gspca_dev->xfer_ep = -1; in gspca_dev_probe2()
1492 gspca_dev->audio = 1; in gspca_dev_probe2()
1498 gspca_dev->v4l2_dev.release = gspca_release; in gspca_dev_probe2()
1499 ret = v4l2_device_register(&intf->dev, &gspca_dev->v4l2_dev); in gspca_dev_probe2()
1502 gspca_dev->present = true; in gspca_dev_probe2()
1503 gspca_dev->sd_desc = sd_desc; in gspca_dev_probe2()
1504 gspca_dev->empty_packet = -1; /* don't check the empty packets */ in gspca_dev_probe2()
1505 gspca_dev->vdev = gspca_template; in gspca_dev_probe2()
1506 gspca_dev->vdev.v4l2_dev = &gspca_dev->v4l2_dev; in gspca_dev_probe2()
1507 video_set_drvdata(&gspca_dev->vdev, gspca_dev); in gspca_dev_probe2()
1508 gspca_dev->module = module; in gspca_dev_probe2()
1510 mutex_init(&gspca_dev->usb_lock); in gspca_dev_probe2()
1511 gspca_dev->vdev.lock = &gspca_dev->usb_lock; in gspca_dev_probe2()
1512 init_waitqueue_head(&gspca_dev->wq); in gspca_dev_probe2()
1515 q = &gspca_dev->queue; in gspca_dev_probe2()
1518 q->drv_priv = gspca_dev; in gspca_dev_probe2()
1524 q->lock = &gspca_dev->usb_lock; in gspca_dev_probe2()
1528 gspca_dev->vdev.queue = q; in gspca_dev_probe2()
1530 INIT_LIST_HEAD(&gspca_dev->buf_list); in gspca_dev_probe2()
1531 spin_lock_init(&gspca_dev->qlock); in gspca_dev_probe2()
1534 ret = sd_desc->config(gspca_dev, id); in gspca_dev_probe2()
1537 ret = sd_desc->init(gspca_dev); in gspca_dev_probe2()
1541 ret = sd_desc->init_controls(gspca_dev); in gspca_dev_probe2()
1544 gspca_set_default_mode(gspca_dev); in gspca_dev_probe2()
1546 ret = gspca_input_connect(gspca_dev); in gspca_dev_probe2()
1551 if (!gspca_dev->sd_desc->get_register) in gspca_dev_probe2()
1552 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_REGISTER); in gspca_dev_probe2()
1553 if (!gspca_dev->sd_desc->set_register) in gspca_dev_probe2()
1554 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_S_REGISTER); in gspca_dev_probe2()
1556 if (!gspca_dev->sd_desc->get_jcomp) in gspca_dev_probe2()
1557 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_G_JPEGCOMP); in gspca_dev_probe2()
1558 if (!gspca_dev->sd_desc->set_jcomp) in gspca_dev_probe2()
1559 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_S_JPEGCOMP); in gspca_dev_probe2()
1562 ret = video_register_device(&gspca_dev->vdev, in gspca_dev_probe2()
1570 usb_set_intfdata(intf, gspca_dev); in gspca_dev_probe2()
1571 gspca_dbg(gspca_dev, D_PROBE, "%s created\n", in gspca_dev_probe2()
1572 video_device_node_name(&gspca_dev->vdev)); in gspca_dev_probe2()
1574 gspca_input_create_urb(gspca_dev); in gspca_dev_probe2()
1579 if (gspca_dev->input_dev) in gspca_dev_probe2()
1580 input_unregister_device(gspca_dev->input_dev); in gspca_dev_probe2()
1582 v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler); in gspca_dev_probe2()
1583 kfree(gspca_dev->usb_buf); in gspca_dev_probe2()
1584 kfree(gspca_dev); in gspca_dev_probe2()
1622 struct gspca_dev *gspca_dev = usb_get_intfdata(intf); in gspca_disconnect() local
1627 gspca_dbg(gspca_dev, D_PROBE, "%s disconnect\n", in gspca_disconnect()
1628 video_device_node_name(&gspca_dev->vdev)); in gspca_disconnect()
1630 mutex_lock(&gspca_dev->usb_lock); in gspca_disconnect()
1631 gspca_dev->present = false; in gspca_disconnect()
1633 vb2_queue_error(&gspca_dev->queue); in gspca_disconnect()
1636 input_dev = gspca_dev->input_dev; in gspca_disconnect()
1638 gspca_dev->input_dev = NULL; in gspca_disconnect()
1643 v4l2_device_disconnect(&gspca_dev->v4l2_dev); in gspca_disconnect()
1644 video_unregister_device(&gspca_dev->vdev); in gspca_disconnect()
1646 mutex_unlock(&gspca_dev->usb_lock); in gspca_disconnect()
1649 v4l2_device_put(&gspca_dev->v4l2_dev); in gspca_disconnect()
1656 struct gspca_dev *gspca_dev = usb_get_intfdata(intf); in gspca_suspend() local
1658 gspca_input_destroy_urb(gspca_dev); in gspca_suspend()
1660 if (!vb2_start_streaming_called(&gspca_dev->queue)) in gspca_suspend()
1663 mutex_lock(&gspca_dev->usb_lock); in gspca_suspend()
1664 gspca_dev->frozen = 1; /* avoid urb error messages */ in gspca_suspend()
1665 gspca_dev->usb_err = 0; in gspca_suspend()
1666 if (gspca_dev->sd_desc->stopN) in gspca_suspend()
1667 gspca_dev->sd_desc->stopN(gspca_dev); in gspca_suspend()
1668 destroy_urbs(gspca_dev); in gspca_suspend()
1669 gspca_set_alt0(gspca_dev); in gspca_suspend()
1670 if (gspca_dev->sd_desc->stop0) in gspca_suspend()
1671 gspca_dev->sd_desc->stop0(gspca_dev); in gspca_suspend()
1672 mutex_unlock(&gspca_dev->usb_lock); in gspca_suspend()
1680 struct gspca_dev *gspca_dev = usb_get_intfdata(intf); in gspca_resume() local
1683 mutex_lock(&gspca_dev->usb_lock); in gspca_resume()
1684 gspca_dev->frozen = 0; in gspca_resume()
1685 gspca_dev->usb_err = 0; in gspca_resume()
1686 gspca_dev->sd_desc->init(gspca_dev); in gspca_resume()
1692 streaming = vb2_start_streaming_called(&gspca_dev->queue); in gspca_resume()
1694 ret = gspca_init_transfer(gspca_dev); in gspca_resume()
1696 gspca_input_create_urb(gspca_dev); in gspca_resume()
1697 mutex_unlock(&gspca_dev->usb_lock); in gspca_resume()