34 #include <linux/module.h>
35 #include <linux/init.h>
36 #include <linux/kernel.h>
37 #include <linux/version.h>
38 #include <linux/errno.h>
39 #include <linux/slab.h>
40 #include <linux/kref.h>
43 #include <linux/usb.h>
44 #include <media/v4l2-common.h>
45 #include <media/v4l2-ioctl.h>
138 struct usb_device *udev;
143 if (dev->isoc_init_ok)
155 STK_ERROR(
"Failed to allocate URB %d\n", i);
160 dev->isobuf[i].urb = urb;
165 if (dev->isobuf[i].urb != NULL)
166 usb_free_urb(dev->isobuf[i].urb);
168 dev->isobuf[i].urb = NULL;
177 urb = dev->isobuf[i].urb;
182 urb->transfer_flags = URB_ISO_ASAP;
183 urb->transfer_buffer = dev->isobuf[i].data;
187 urb->start_frame = 0;
201 ret = usb_submit_urb(dev->isobuf[i].urb, GFP_KERNEL);
204 STK_ERROR(
"isoc_init() submit_urb %d failed with error %d\n", i, ret);
206 STK_DEBUG(
"URB 0x%p submitted.\n", dev->isobuf[i].urb);
237 dev->isoc_init_ok = 1;
262 unsigned char *fill = NULL;
263 unsigned char *iso_buf = NULL;
273 STK_ERROR(
"isoc_handler called with NULL device !\n");
277 if (urb->status == -ENOENT || urb->status == -ECONNRESET) {
278 STK_DEBUG(
"URB unlinked synchronuously !\n");
282 if (urb->status != -EINPROGRESS && urb->status != 0) {
287 switch(urb->status) {
289 errmsg =
"Buffer error (overrun)";
293 errmsg =
"Stalled (device not responding)";
297 errmsg =
"Babble (bad cable?)";
301 errmsg =
"Bit-stuff error (bad cable?)";
305 errmsg =
"CRC/Timeout (could be anything)";
309 errmsg =
"NAK (device does not respond)";
313 STK_ERROR(
"isoc_handler() called with status %d [%s].\n", urb->status, errmsg);
319 urb->dev = dev->
udev;
320 ret = usb_submit_urb(urb, GFP_ATOMIC);
323 STK_ERROR(
"Error (%d) re-submitting urb in stk11xx_isoc_handler.\n", ret);
329 framebuf = dev->fill_frame;
331 if (framebuf == NULL) {
332 STK_ERROR(
"isoc_handler without valid fill frame !\n");
336 urb->dev = dev->
udev;
337 ret = usb_submit_urb(urb, GFP_ATOMIC);
340 STK_ERROR(
"Error (%d) re-submitting urb in stk11xx_isoc_handler.\n", ret);
346 fill = framebuf->data + framebuf->filled;
353 for (i=0; i<urb->number_of_packets; i++) {
354 framestatus = urb->iso_frame_desc[i].status;
355 framelen = urb->iso_frame_desc[i].actual_length;
356 iso_buf = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
358 if (framestatus == 0) {
370 if (*iso_buf & 0x80) {
377 framebuf->odd =
true;
379 framebuf->odd =
false;
383 if (framelen - skip + framebuf->filled > dev->frame_size) {
384 STK_ERROR(
"Frame buffer overflow %d %d %d!\n",
385 framelen, framelen-skip+framebuf->filled, dev->frame_size);
390 memcpy(fill, iso_buf + skip, framelen - skip);
391 fill += framelen - skip;
395 framebuf->filled += framelen - skip;
398 STK_STREAM(
"URB : Length = %d - Skip = %d - Buffer size = %d\n",
399 framelen, skip, framebuf->filled);
403 if (framebuf->filled > 0) {
405 if (framebuf->filled < dev->frame_size)
409 if (framebuf->errors == 0) {
417 framebuf = dev->fill_frame;
418 framebuf->filled = 0;
419 framebuf->errors = 0;
420 fill = framebuf->data;
425 STK_ERROR(
"Iso frame %d of USB has error %d\n", i, framestatus);
432 urb->dev = dev->
udev;
434 ret = usb_submit_urb(urb, GFP_ATOMIC);
437 STK_ERROR(
"Error (%d) re-submitting urb in stk11xx_isoc_handler.\n", ret);
458 if (dev->isoc_init_ok == 0)
465 urb = dev->isobuf[i].urb;
468 if (dev->isoc_init_ok)
472 dev->isobuf[i].urb = NULL;
477 dev->isoc_init_ok = 0;
495 struct usb_device *udev = dev->
udev;
497 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
499 USB_TYPE_STANDARD | USB_DIR_OUT | USB_RECIP_DEVICE,
500 USB_DEVICE_REMOTE_WAKEUP,
527 struct usb_device *udev = dev->
udev;
529 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
530 USB_REQ_SET_CONFIGURATION,
531 USB_TYPE_STANDARD | USB_DIR_OUT | USB_RECIP_DEVICE,
533 udev->config[0].desc.bConfigurationValue,
541 STK_DEBUG(
"SET CONFIGURATION %d\n", udev->config[0].desc.bConfigurationValue);
561 struct usb_device *udev = dev->
udev;
563 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
565 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
573 STK_ERROR(
"Write registry fails %02X = %02X", index, value);
594 struct usb_device *udev = dev->
udev;
598 result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
600 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
608 STK_ERROR(
"Read registry fails %02X", index);
627 case SYNTEK_STK_0408:
640 case SYNTEK_STK_M811:
641 case SYNTEK_STK_A311:
652 case SYNTEK_STK_A821:
653 case SYNTEK_STK_AA11:
664 case SYNTEK_STK_6A31:
665 case SYNTEK_STK_6A33:
666 case SYNTEK_STK_0500:
677 case SYNTEK_STK_6A51:
678 case SYNTEK_STK_6D51:
679 case SYNTEK_STK_6A54:
729 struct usb_device *udev = interface_to_usbdev(interface);
730 struct usb_host_interface *iface_desc;
731 struct usb_endpoint_descriptor *endpoint;
735 vendor_id = le16_to_cpu(udev->descriptor.idVendor);
736 product_id = le16_to_cpu(udev->descriptor.idProduct);
739 STK_DEBUG(
"Probe function called with VendorID=%04X, ProductID=%04X and InterfaceNumber=%d\n",
740 vendor_id, product_id, interface->cur_altsetting->desc.bInterfaceNumber);
745 if (interface->cur_altsetting->desc.bInterfaceNumber > 0)
750 switch (product_id) {
752 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
753 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0xA311.\n");
754 webcam_model = SYNTEK_STK_A311;
759 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
760 STK_INFO(
"Syntek AVStream USB2.0 VGA WebCam - Product ID 0xA821.\n");
761 webcam_model = SYNTEK_STK_A821;
766 STK_INFO(
"Syntek AVStream USB2.0 VGA WebCam - Product ID 0xAA11.\n");
767 STK_INFO(
"Using code for Product ID AxA821\n");
768 webcam_model = SYNTEK_STK_AA11;
773 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
774 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A31.\n");
775 webcam_model = SYNTEK_STK_6A31;
780 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
781 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A33.\n");
782 webcam_model = SYNTEK_STK_6A33;
787 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
788 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A51.\n");
789 webcam_model = SYNTEK_STK_6A51;
794 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
795 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A54.\n");
796 webcam_model = SYNTEK_STK_6A54;
801 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
802 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6D51.\n");
803 webcam_model = SYNTEK_STK_6D51;
808 STK_ERROR(
"usb_stk11xx_probe failed ! Camera product 0x%04X is not supported.\n",
809 le16_to_cpu(udev->descriptor.idProduct));
814 switch (product_id) {
816 STK_INFO(
"Syntek USB2.0 - STK-1160 based device found.\n");
817 STK_INFO(
"Syntek AVStream USB2.0 Video Capture - Product ID 0x0408.\n");
818 webcam_model = SYNTEK_STK_0408;
823 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
824 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x0500.\n");
825 webcam_model = SYNTEK_STK_0500;
830 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
831 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x0501.\n");
832 webcam_model = SYNTEK_STK_M811;
837 STK_ERROR(
"usb_stk11xx_probe failed ! Camera product 0x%04X is not supported.\n",
838 le16_to_cpu(udev->descriptor.idProduct));
846 dev = kzalloc(
sizeof(
struct usb_stk11xx), GFP_KERNEL);
856 sema_init(&dev->
mutex,1);
858 init_MUTEX(&dev->
mutex);
871 dev->
release = le16_to_cpu(udev->descriptor.bcdDevice);
875 bNumInterfaces = udev->config->desc.bNumInterfaces;
876 STK_INFO(
"Number of interfaces : %d\n", bNumInterfaces);
894 iface_desc = interface->cur_altsetting;
896 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
897 endpoint = &iface_desc->endpoint[i].desc;
900 && ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
901 && ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) {
903 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
910 && ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
911 && ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC)) {
913 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
921 STK_ERROR(
"Could not find both int-in and isoc-in endpoints");
933 dev->
vdev = video_device_alloc();
955 usb_set_intfdata(interface, dev);
975 struct usb_stk11xx *dev = usb_get_intfdata(interface);
977 STK_INFO(
"Syntek USB2.0 Camera disconnected\n");
981 STK_INFO(
"Disconnected while webcam is in use !\n");
982 dev->error_status = EPIPE;
998 usb_set_intfdata(interface, NULL);
1066 .name =
"usb_stk11xx_driver",
1153 if (fps < 9 || fps > 30) {
1154 STK_ERROR(
"Framerate out of bounds [10-30] !\n");
1215 STK_ERROR(
"usb_register failed ! Error number %d\n", result);
1228 STK_INFO(
"usb_stk11xx_exit: Syntek USB2.0 webcam driver shutdown\n");