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>
129 struct usb_device *udev;
134 if (dev->isoc_init_ok)
146 STK_ERROR(
"Failed to allocate URB %d\n", i);
151 dev->isobuf[i].urb = urb;
156 if (dev->isobuf[i].urb != NULL)
157 usb_free_urb(dev->isobuf[i].urb);
159 dev->isobuf[i].urb = NULL;
168 urb = dev->isobuf[i].urb;
173 urb->transfer_flags = URB_ISO_ASAP;
174 urb->transfer_buffer = dev->isobuf[i].data;
178 urb->start_frame = 0;
192 ret = usb_submit_urb(dev->isobuf[i].urb, GFP_KERNEL);
195 STK_ERROR(
"isoc_init() submit_urb %d failed with error %d\n", i, ret);
197 STK_DEBUG(
"URB 0x%p submitted.\n", dev->isobuf[i].urb);
228 dev->isoc_init_ok = 1;
253 unsigned char *fill = NULL;
254 unsigned char *iso_buf = NULL;
264 STK_ERROR(
"isoc_handler called with NULL device !\n");
268 if (urb->status == -ENOENT || urb->status == -ECONNRESET) {
269 STK_DEBUG(
"URB unlinked synchronuously !\n");
273 if (urb->status != -EINPROGRESS && urb->status != 0) {
278 switch(urb->status) {
280 errmsg =
"Buffer error (overrun)";
284 errmsg =
"Stalled (device not responding)";
288 errmsg =
"Babble (bad cable?)";
292 errmsg =
"Bit-stuff error (bad cable?)";
296 errmsg =
"CRC/Timeout (could be anything)";
300 errmsg =
"NAK (device does not respond)";
304 STK_ERROR(
"isoc_handler() called with status %d [%s].\n", urb->status, errmsg);
310 urb->dev = dev->
udev;
311 ret = usb_submit_urb(urb, GFP_ATOMIC);
314 STK_ERROR(
"Error (%d) re-submitting urb in stk11xx_isoc_handler.\n", ret);
320 framebuf = dev->fill_frame;
322 if (framebuf == NULL) {
323 STK_ERROR(
"isoc_handler without valid fill frame !\n");
327 urb->dev = dev->
udev;
328 ret = usb_submit_urb(urb, GFP_ATOMIC);
331 STK_ERROR(
"Error (%d) re-submitting urb in stk11xx_isoc_handler.\n", ret);
337 fill = framebuf->data + framebuf->filled;
344 for (i=0; i<urb->number_of_packets; i++) {
345 framestatus = urb->iso_frame_desc[i].status;
346 framelen = urb->iso_frame_desc[i].actual_length;
347 iso_buf = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
349 if (framestatus == 0) {
361 if (*iso_buf & 0x80) {
366 if (framelen - skip + framebuf->filled > dev->frame_size) {
372 memcpy(fill, iso_buf + skip, framelen - skip);
373 fill += framelen - skip;
377 framebuf->filled += framelen - skip;
380 STK_STREAM(
"URB : Length = %d - Skip = %d - Buffer size = %d\n",
381 framelen, skip, framebuf->filled);
385 if (framebuf->filled > 0) {
387 if (framebuf->filled < dev->frame_size)
391 if (framebuf->errors == 0) {
399 framebuf = dev->fill_frame;
400 framebuf->filled = 0;
401 framebuf->errors = 0;
402 fill = framebuf->data;
407 STK_ERROR(
"Iso frame %d of USB has error %d\n", i, framestatus);
414 urb->dev = dev->
udev;
416 ret = usb_submit_urb(urb, GFP_ATOMIC);
419 STK_ERROR(
"Error (%d) re-submitting urb in stk11xx_isoc_handler.\n", ret);
440 if (dev->isoc_init_ok == 0)
447 urb = dev->isobuf[i].urb;
450 if (dev->isoc_init_ok)
454 dev->isobuf[i].urb = NULL;
459 dev->isoc_init_ok = 0;
477 struct usb_device *udev = dev->
udev;
479 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
481 USB_TYPE_STANDARD | USB_DIR_OUT | USB_RECIP_DEVICE,
482 USB_DEVICE_REMOTE_WAKEUP,
509 struct usb_device *udev = dev->
udev;
511 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
512 USB_REQ_SET_CONFIGURATION,
513 USB_TYPE_STANDARD | USB_DIR_OUT | USB_RECIP_DEVICE,
515 udev->config[0].desc.bConfigurationValue,
523 STK_DEBUG(
"SET CONFIGURATION %d\n", udev->config[0].desc.bConfigurationValue);
543 struct usb_device *udev = dev->
udev;
545 result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
547 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
555 STK_ERROR(
"Write registry fails %02X = %02X", index, value);
576 struct usb_device *udev = dev->
udev;
580 result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
582 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
590 STK_ERROR(
"Read registry fails %02X", index);
609 case SYNTEK_STK_M811:
610 case SYNTEK_STK_A311:
621 case SYNTEK_STK_A821:
632 case SYNTEK_STK_6A31:
633 case SYNTEK_STK_6A33:
644 case SYNTEK_STK_6A51:
645 case SYNTEK_STK_6D51:
646 case SYNTEK_STK_6A54:
695 struct usb_device *udev = interface_to_usbdev(interface);
696 struct usb_host_interface *iface_desc;
697 struct usb_endpoint_descriptor *endpoint;
701 vendor_id = le16_to_cpu(udev->descriptor.idVendor);
702 product_id = le16_to_cpu(udev->descriptor.idProduct);
705 STK_DEBUG(
"Probe function called with VendorID=%04X, ProductID=%04X and InterfaceNumber=%d\n",
706 vendor_id, product_id, interface->cur_altsetting->desc.bInterfaceNumber);
711 if (interface->cur_altsetting->desc.bInterfaceNumber > 0)
716 switch (product_id) {
718 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
719 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0xA311.\n");
720 webcam_model = SYNTEK_STK_A311;
725 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
726 STK_INFO(
"Syntek AVStream USB2.0 VGA WebCam - Product ID 0xA821.\n");
727 webcam_model = SYNTEK_STK_A821;
732 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
733 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A31.\n");
734 webcam_model = SYNTEK_STK_6A31;
739 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
740 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A33.\n");
741 webcam_model = SYNTEK_STK_6A33;
746 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
747 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A51.\n");
748 webcam_model = SYNTEK_STK_6A51;
753 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
754 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6A54.\n");
755 webcam_model = SYNTEK_STK_6A54;
760 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
761 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x6D51.\n");
762 webcam_model = SYNTEK_STK_6D51;
767 STK_ERROR(
"usb_stk11xx_probe failed ! Camera product 0x%04X is not supported.\n",
768 le16_to_cpu(udev->descriptor.idProduct));
773 switch (product_id) {
775 STK_INFO(
"Syntek USB2.0 - STK-1135 based webcam found.\n");
776 STK_INFO(
"Syntek AVStream USB2.0 1.3M WebCam - Product ID 0x0501.\n");
777 webcam_model = SYNTEK_STK_M811;
782 STK_ERROR(
"usb_stk11xx_probe failed ! Camera product 0x%04X is not supported.\n",
783 le16_to_cpu(udev->descriptor.idProduct));
791 dev = kzalloc(
sizeof(
struct usb_stk11xx), GFP_KERNEL);
801 sema_init(&dev->
mutex,1);
803 init_MUTEX(&dev->
mutex);
816 dev->
release = le16_to_cpu(udev->descriptor.bcdDevice);
820 bNumInterfaces = udev->config->desc.bNumInterfaces;
821 STK_INFO(
"Number of interfaces : %d\n", bNumInterfaces);
826 dev->len_per_image = PAGE_ALIGN((1280 * 1024 * 4));
836 iface_desc = interface->cur_altsetting;
838 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
839 endpoint = &iface_desc->endpoint[i].desc;
842 && ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
843 && ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) {
845 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
852 && ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
853 && ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC)) {
855 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
863 STK_ERROR(
"Could not find both int-in and isoc-in endpoints");
875 dev->
vdev = video_device_alloc();
897 usb_set_intfdata(interface, dev);
919 STK_INFO(
"Syntek USB2.0 Camera disconnected\n");
923 STK_INFO(
"Disconnected while webcam is in use !\n");
924 dev->error_status = EPIPE;
946 int usb_stk11xx_suspend(
struct usb_interface *
interface, pm_message_t message)
950 STK_INFO(
"Syntek USB2.0 Camera Suspend\n");
974 int usb_stk11xx_resume(
struct usb_interface *
interface)
978 STK_INFO(
"Syntek USB2.0 Camera Resume\n");
1020 .name =
"usb_stk11xx_driver",
1025 .suspend = usb_stk11xx_suspend,
1026 .resume = usb_stk11xx_resume,
1097 STK_INFO(
"Syntek USB2.0 webcam driver startup\n");
1101 if (fps < 9 || fps > 30) {
1102 STK_ERROR(
"Framerate out of bounds [10-30] !\n");
1156 STK_ERROR(
"usb_register failed ! Error number %d\n", result);
1171 STK_INFO(
"usb_stk11xx_exit: Syntek USB2.0 webcam driver shutdown\n");