Lines Matching +full:isoc +full:- +full:in

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (C) 2009 Jean-Francois Moine (http://moinejf.free.fr)
14 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>");
32 /* -- write a register -- */
36 struct usb_device *dev = gspca_dev->dev; in reg_w()
39 if (gspca_dev->usb_err < 0) in reg_w()
51 gspca_dev->usb_err = ret; in reg_w()
59 gspca_dev->cam.cam_mode = vga_mode; in sd_config()
60 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode); in sd_config()
61 gspca_dev->cam.no_urb_create = 1; in sd_config()
71 /* -- start the camera -- */
77 /* create 4 URBs - 2 on endpoint 0x83 and 2 on 0x082 */ in sd_start()
79 #error "Not enough URBs in the gspca table" in sd_start()
86 return -ENOMEM; in sd_start()
87 gspca_dev->urb[n] = urb; in sd_start()
88 urb->transfer_buffer = usb_alloc_coherent(gspca_dev->dev, in sd_start()
91 &urb->transfer_dma); in sd_start()
93 if (urb->transfer_buffer == NULL) { in sd_start()
95 return -ENOMEM; in sd_start()
97 urb->dev = gspca_dev->dev; in sd_start()
98 urb->context = gspca_dev; in sd_start()
99 urb->transfer_buffer_length = SD_PKT_SZ * SD_NPKT; in sd_start()
100 urb->pipe = usb_rcvisocpipe(gspca_dev->dev, in sd_start()
102 urb->transfer_flags = URB_ISO_ASAP in sd_start()
104 urb->interval = 1; in sd_start()
105 urb->complete = sd_isoc_irq; in sd_start()
106 urb->number_of_packets = SD_NPKT; in sd_start()
108 urb->iso_frame_desc[i].length = SD_PKT_SZ; in sd_start()
109 urb->iso_frame_desc[i].offset = SD_PKT_SZ * i; in sd_start()
113 return gspca_dev->usb_err; in sd_start()
126 intf = usb_ifnum_to_if(gspca_dev->dev, gspca_dev->iface); in sd_stopN()
127 usb_set_interface(gspca_dev->dev, gspca_dev->iface, in sd_stopN()
128 intf->num_altsetting - 1); in sd_stopN()
132 u8 *data, /* isoc packet */ in sd_pkt_scan()
141 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in sd_isoc_irq()
146 gspca_dbg(gspca_dev, D_PACK, "sd isoc irq\n"); in sd_isoc_irq()
147 if (!gspca_dev->streaming) in sd_isoc_irq()
149 if (urb->status != 0) { in sd_isoc_irq()
150 if (urb->status == -ESHUTDOWN) in sd_isoc_irq()
153 if (gspca_dev->frozen) in sd_isoc_irq()
156 pr_err("urb status: %d\n", urb->status); in sd_isoc_irq()
161 if (urb == gspca_dev->urb[0] || urb == gspca_dev->urb[2]) in sd_isoc_irq()
165 if (urb == gspca_dev->urb[1]) in sd_isoc_irq()
166 urb0 = gspca_dev->urb[0]; in sd_isoc_irq()
168 urb0 = gspca_dev->urb[2]; in sd_isoc_irq()
169 for (i = 0; i < urb->number_of_packets; i++) { in sd_isoc_irq()
172 if (urb0->iso_frame_desc[i].actual_length != SD_PKT_SZ in sd_isoc_irq()
173 || urb->iso_frame_desc[i].actual_length != SD_PKT_SZ) { in sd_isoc_irq()
174 gspca_err(gspca_dev, "ISOC bad lengths %d / %d\n", in sd_isoc_irq()
175 urb0->iso_frame_desc[i].actual_length, in sd_isoc_irq()
176 urb->iso_frame_desc[i].actual_length); in sd_isoc_irq()
177 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_isoc_irq()
180 st = urb0->iso_frame_desc[i].status; in sd_isoc_irq()
182 st = urb->iso_frame_desc[i].status; in sd_isoc_irq()
184 pr_err("ISOC data error: [%d] status=%d\n", in sd_isoc_irq()
186 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_isoc_irq()
191 * The images are received in URBs of different endpoints in sd_isoc_irq()
193 * Image pieces in URBs of ep 0x83 are continuated in URBs of in sd_isoc_irq()
195 * The packets in the URBs of endpoint 0x83 start with: in sd_isoc_irq()
196 * - 80 ba/bb 00 00 = start of image followed by 'ff d8' in sd_isoc_irq()
197 * - 04 ba/bb oo oo = image piece in sd_isoc_irq()
200 * - (other -> bad frame) in sd_isoc_irq()
203 * The end of image ('ff d9') may occur in any URB. in sd_isoc_irq()
206 data = (u8 *) urb0->transfer_buffer in sd_isoc_irq()
207 + urb0->iso_frame_desc[i].offset; in sd_isoc_irq()
214 data + 4, SD_PKT_SZ - 4); in sd_isoc_irq()
217 data + 4, SD_PKT_SZ - 4); in sd_isoc_irq()
219 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_isoc_irq()
222 data = (u8 *) urb->transfer_buffer in sd_isoc_irq()
223 + urb->iso_frame_desc[i].offset; in sd_isoc_irq()
237 /* sub-driver description */
247 /* -- module initialisation -- */
254 /* -- device connect -- */