Lines Matching refs:usbvision
106 static int usbvision_request_intra(struct usb_usbvision *usbvision);
107 static int usbvision_unrequest_intra(struct usb_usbvision *usbvision);
108 static int usbvision_adjust_compression(struct usb_usbvision *usbvision);
109 static int usbvision_measure_bandwidth(struct usb_usbvision *usbvision);
182 static int scratch_len(struct usb_usbvision *usbvision) /* This returns the amount of data actua… in scratch_len() argument
184 int len = usbvision->scratch_write_ptr - usbvision->scratch_read_ptr; in scratch_len()
195 static int scratch_free(struct usb_usbvision *usbvision) in scratch_free() argument
197 int free = usbvision->scratch_read_ptr - usbvision->scratch_write_ptr; in scratch_free()
211 static int scratch_put(struct usb_usbvision *usbvision, unsigned char *data, in scratch_put() argument
216 if (usbvision->scratch_write_ptr + len < scratch_buf_size) { in scratch_put()
217 memcpy(usbvision->scratch + usbvision->scratch_write_ptr, data, len); in scratch_put()
218 usbvision->scratch_write_ptr += len; in scratch_put()
220 len_part = scratch_buf_size - usbvision->scratch_write_ptr; in scratch_put()
221 memcpy(usbvision->scratch + usbvision->scratch_write_ptr, data, len_part); in scratch_put()
223 usbvision->scratch_write_ptr = 0; /* just set write_ptr to zero */ in scratch_put()
225 memcpy(usbvision->scratch, data + len_part, len - len_part); in scratch_put()
226 usbvision->scratch_write_ptr = len - len_part; in scratch_put()
230 PDEBUG(DBG_SCRATCH, "len=%d, new write_ptr=%d\n", len, usbvision->scratch_write_ptr); in scratch_put()
236 static void scratch_mark_header(struct usb_usbvision *usbvision) in scratch_mark_header() argument
238 PDEBUG(DBG_SCRATCH, "header at write_ptr=%d\n", usbvision->scratch_headermarker_write_ptr); in scratch_mark_header()
240 usbvision->scratch_headermarker[usbvision->scratch_headermarker_write_ptr] = in scratch_mark_header()
241 usbvision->scratch_write_ptr; in scratch_mark_header()
242 usbvision->scratch_headermarker_write_ptr += 1; in scratch_mark_header()
243 usbvision->scratch_headermarker_write_ptr %= USBVISION_NUM_HEADERMARKER; in scratch_mark_header()
247 static int scratch_get_extra(struct usb_usbvision *usbvision, in scratch_get_extra() argument
253 memcpy(data, usbvision->scratch + *ptr, len); in scratch_get_extra()
257 memcpy(data, usbvision->scratch + *ptr, len_part); in scratch_get_extra()
261 memcpy(data + len_part, usbvision->scratch, len - len_part); in scratch_get_extra()
273 static void scratch_set_extra_ptr(struct usb_usbvision *usbvision, int *ptr, in scratch_set_extra_ptr() argument
276 *ptr = (usbvision->scratch_read_ptr + len) % scratch_buf_size; in scratch_set_extra_ptr()
292 static int scratch_get(struct usb_usbvision *usbvision, unsigned char *data, in scratch_get() argument
297 if (usbvision->scratch_read_ptr + len < scratch_buf_size) { in scratch_get()
298 memcpy(data, usbvision->scratch + usbvision->scratch_read_ptr, len); in scratch_get()
299 usbvision->scratch_read_ptr += len; in scratch_get()
301 len_part = scratch_buf_size - usbvision->scratch_read_ptr; in scratch_get()
302 memcpy(data, usbvision->scratch + usbvision->scratch_read_ptr, len_part); in scratch_get()
304 usbvision->scratch_read_ptr = 0; /* just set the read_ptr to zero */ in scratch_get()
306 memcpy(data + len_part, usbvision->scratch, len - len_part); in scratch_get()
307 usbvision->scratch_read_ptr = len - len_part; in scratch_get()
311 PDEBUG(DBG_SCRATCH, "len=%d, new read_ptr=%d\n", len, usbvision->scratch_read_ptr); in scratch_get()
318 static int scratch_get_header(struct usb_usbvision *usbvision, in scratch_get_header() argument
323 PDEBUG(DBG_SCRATCH, "from read_ptr=%d", usbvision->scratch_headermarker_read_ptr); in scratch_get_header()
325 while (usbvision->scratch_headermarker_write_ptr - in scratch_get_header()
326 usbvision->scratch_headermarker_read_ptr != 0) { in scratch_get_header()
327 usbvision->scratch_read_ptr = in scratch_get_header()
328 usbvision->scratch_headermarker[usbvision->scratch_headermarker_read_ptr]; in scratch_get_header()
329 usbvision->scratch_headermarker_read_ptr += 1; in scratch_get_header()
330 usbvision->scratch_headermarker_read_ptr %= USBVISION_NUM_HEADERMARKER; in scratch_get_header()
331 scratch_get(usbvision, (unsigned char *)header, USBVISION_HEADER_LENGTH); in scratch_get_header()
347 static void scratch_rm_old(struct usb_usbvision *usbvision, int len) in scratch_rm_old() argument
349 usbvision->scratch_read_ptr += len; in scratch_rm_old()
350 usbvision->scratch_read_ptr %= scratch_buf_size; in scratch_rm_old()
351 PDEBUG(DBG_SCRATCH, "read_ptr is now %d\n", usbvision->scratch_read_ptr); in scratch_rm_old()
356 static void scratch_reset(struct usb_usbvision *usbvision) in scratch_reset() argument
360 usbvision->scratch_read_ptr = 0; in scratch_reset()
361 usbvision->scratch_write_ptr = 0; in scratch_reset()
362 usbvision->scratch_headermarker_read_ptr = 0; in scratch_reset()
363 usbvision->scratch_headermarker_write_ptr = 0; in scratch_reset()
364 usbvision->isocstate = isoc_state_no_frame; in scratch_reset()
367 int usbvision_scratch_alloc(struct usb_usbvision *usbvision) in usbvision_scratch_alloc() argument
369 usbvision->scratch = vmalloc_32(scratch_buf_size); in usbvision_scratch_alloc()
370 scratch_reset(usbvision); in usbvision_scratch_alloc()
371 if (usbvision->scratch == NULL) { in usbvision_scratch_alloc()
372 dev_err(&usbvision->dev->dev, in usbvision_scratch_alloc()
380 void usbvision_scratch_free(struct usb_usbvision *usbvision) in usbvision_scratch_free() argument
382 vfree(usbvision->scratch); in usbvision_scratch_free()
383 usbvision->scratch = NULL; in usbvision_scratch_free()
391 int usbvision_decompress_alloc(struct usb_usbvision *usbvision) in usbvision_decompress_alloc() argument
395 usbvision->intra_frame_buffer = vmalloc_32(IFB_size); in usbvision_decompress_alloc()
396 if (usbvision->intra_frame_buffer == NULL) { in usbvision_decompress_alloc()
397 dev_err(&usbvision->dev->dev, in usbvision_decompress_alloc()
410 void usbvision_decompress_free(struct usb_usbvision *usbvision) in usbvision_decompress_free() argument
412 vfree(usbvision->intra_frame_buffer); in usbvision_decompress_free()
413 usbvision->intra_frame_buffer = NULL; in usbvision_decompress_free()
425 static enum parse_state usbvision_find_header(struct usb_usbvision *usbvision) in usbvision_find_header() argument
430 frame = usbvision->cur_frame; in usbvision_find_header()
432 while (scratch_get_header(usbvision, &frame->isoc_header) == USBVISION_HEADER_LENGTH) { in usbvision_find_header()
446 if (usbvision->request_intra) { in usbvision_find_header()
449 usbvision->last_isoc_frame_num = -1; /* do not check for lost frames this time */ in usbvision_find_header()
450 usbvision_unrequest_intra(usbvision); in usbvision_find_header()
460 frame->frmwidth = frame->isoc_header.frame_width * usbvision->stretch_width; in usbvision_find_header()
461 frame->frmheight = frame->isoc_header.frame_height * usbvision->stretch_height; in usbvision_find_header()
465 scratch_reset(usbvision); in usbvision_find_header()
472 if (usbvision->last_isoc_frame_num >= 0) { in usbvision_find_header()
473 if (((usbvision->last_isoc_frame_num + 1) % 32) != frame->isoc_header.frame_num) { in usbvision_find_header()
476 usbvision_request_intra(usbvision); in usbvision_find_header()
480 usbvision->last_isoc_frame_num = frame->isoc_header.frame_num; in usbvision_find_header()
482 usbvision->header_count++; in usbvision_find_header()
489 static enum parse_state usbvision_parse_lines_422(struct usb_usbvision *usbvision, in usbvision_parse_lines_422() argument
501 frame = usbvision->cur_frame; in usbvision_parse_lines_422()
506 if (scratch_len(usbvision) < len) { in usbvision_parse_lines_422()
515 stretch_bytes = (usbvision->stretch_width - 1) * bytes_per_pixel; in usbvision_parse_lines_422()
517 clipmask_add = usbvision->stretch_width; in usbvision_parse_lines_422()
519 for (i = 0; i < frame->frmwidth; i += (2 * usbvision->stretch_width)) { in usbvision_parse_lines_422()
520 scratch_get(usbvision, &yuyv[0], 4); in usbvision_parse_lines_422()
591 frame->curline += usbvision->stretch_height; in usbvision_parse_lines_422()
592 *pcopylen += frame->v4l2_linesize * usbvision->stretch_height; in usbvision_parse_lines_422()
600 static int usbvision_decompress(struct usb_usbvision *usbvision, unsigned char *compressed, in usbvision_decompress() argument
629 usbvision->compr_block_types[block_type]++; in usbvision_decompress()
692 static enum parse_state usbvision_parse_compress(struct usb_usbvision *usbvision, in usbvision_parse_compress() argument
709 frame = usbvision->cur_frame; in usbvision_parse_compress()
730 usbvision_adjust_compression(usbvision); in usbvision_parse_compress()
732 if (scratch_len(usbvision) < USBVISION_STRIP_HEADER_LEN) in usbvision_parse_compress()
736 scratch_set_extra_ptr(usbvision, &strip_ptr, 0); in usbvision_parse_compress()
737 scratch_get_extra(usbvision, &strip_header[0], &strip_ptr, in usbvision_parse_compress()
742 usbvision->strip_magic_errors++; in usbvision_parse_compress()
748 usbvision->strip_line_number_errors++; in usbvision_parse_compress()
755 usbvision_request_intra(usbvision); in usbvision_parse_compress()
758 if (scratch_len(usbvision) < strip_len) { in usbvision_parse_compress()
763 if (usbvision->intra_frame_buffer) { in usbvision_parse_compress()
764 Y = usbvision->intra_frame_buffer + frame->frmwidth * frame->curline; in usbvision_parse_compress()
765 U = usbvision->intra_frame_buffer + image_size + (frame->frmwidth / 2) * (frame->curline / 2); in usbvision_parse_compress()
766 …V = usbvision->intra_frame_buffer + image_size / 4 * 5 + (frame->frmwidth / 2) * (frame->curline /… in usbvision_parse_compress()
773 scratch_get(usbvision, strip_data, strip_len); in usbvision_parse_compress()
780 usbvision->block_pos = block_pos; in usbvision_parse_compress()
782 usbvision_decompress(usbvision, strip_data, Y, &block_pos, &block_type_pos, idx_end); in usbvision_parse_compress()
783 if (strip_len > usbvision->max_strip_len) in usbvision_parse_compress()
784 usbvision->max_strip_len = strip_len; in usbvision_parse_compress()
787 usbvision_decompress(usbvision, strip_data, V, &block_pos, &block_type_pos, idx_end / 2); in usbvision_parse_compress()
789 usbvision_decompress(usbvision, strip_data, U, &block_pos, &block_type_pos, idx_end / 2); in usbvision_parse_compress()
791 if (block_pos > usbvision->comprblock_pos) in usbvision_parse_compress()
792 usbvision->comprblock_pos = block_pos; in usbvision_parse_compress()
794 usbvision->strip_len_errors++; in usbvision_parse_compress()
870 static enum parse_state usbvision_parse_lines_420(struct usb_usbvision *usbvision, in usbvision_parse_lines_420() argument
890 frame = usbvision->cur_frame; in usbvision_parse_lines_420()
892 f_odd = f_even + frame->v4l2_linesize * usbvision->stretch_height; in usbvision_parse_lines_420()
898 stretch_bytes = (usbvision->stretch_width - 1) * bytes_per_pixel; in usbvision_parse_lines_420()
901 clipmask_add = usbvision->stretch_width; in usbvision_parse_lines_420()
904 if (scratch_len(usbvision) < (int)pixel_per_line * 3) { in usbvision_parse_lines_420()
917 scratch_set_extra_ptr(usbvision, &y_ptr, y_odd_offset); in usbvision_parse_lines_420()
918 scratch_set_extra_ptr(usbvision, &u_ptr, y_block_size); in usbvision_parse_lines_420()
919 scratch_set_extra_ptr(usbvision, &v_ptr, y_odd_offset in usbvision_parse_lines_420()
924 scratch_get(usbvision, &y[0], 2); in usbvision_parse_lines_420()
925 scratch_get_extra(usbvision, &u, &u_ptr, 1); in usbvision_parse_lines_420()
926 scratch_get_extra(usbvision, &v, &v_ptr, 1); in usbvision_parse_lines_420()
1021 scratch_get_extra(usbvision, &y[0], &y_ptr, 2); in usbvision_parse_lines_420()
1110 scratch_rm_old(usbvision, y_step[block % y_step_size] * sub_block_size); in usbvision_parse_lines_420()
1119 scratch_rm_old(usbvision, pixel_per_line * 3 / 2 in usbvision_parse_lines_420()
1122 frame->curline += 2 * usbvision->stretch_height; in usbvision_parse_lines_420()
1123 *pcopylen += frame->v4l2_linesize * 2 * usbvision->stretch_height; in usbvision_parse_lines_420()
1138 static void usbvision_parse_data(struct usb_usbvision *usbvision) in usbvision_parse_data() argument
1145 frame = usbvision->cur_frame; in usbvision_parse_data()
1147 PDEBUG(DBG_PARSE, "parsing len=%d\n", scratch_len(usbvision)); in usbvision_parse_data()
1151 if (scratch_len(usbvision)) { in usbvision_parse_data()
1153 newstate = usbvision_find_header(usbvision); in usbvision_parse_data()
1155 if (usbvision->isoc_mode == ISOC_MODE_YUV420) in usbvision_parse_data()
1156 newstate = usbvision_parse_lines_420(usbvision, ©len); in usbvision_parse_data()
1157 else if (usbvision->isoc_mode == ISOC_MODE_YUV422) in usbvision_parse_data()
1158 newstate = usbvision_parse_lines_422(usbvision, ©len); in usbvision_parse_data()
1159 else if (usbvision->isoc_mode == ISOC_MODE_COMPRESS) in usbvision_parse_data()
1160 newstate = usbvision_parse_compress(usbvision, ©len); in usbvision_parse_data()
1173 frame->sequence = usbvision->frame_num; in usbvision_parse_data()
1175 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); in usbvision_parse_data()
1176 list_move_tail(&(frame->frame), &usbvision->outqueue); in usbvision_parse_data()
1177 usbvision->cur_frame = NULL; in usbvision_parse_data()
1178 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); in usbvision_parse_data()
1180 usbvision->frame_num++; in usbvision_parse_data()
1183 if (waitqueue_active(&usbvision->wait_frame)) { in usbvision_parse_data()
1185 wake_up_interruptible(&usbvision->wait_frame); in usbvision_parse_data()
1199 static int usbvision_compress_isochronous(struct usb_usbvision *usbvision, in usbvision_compress_isochronous() argument
1214 usbvision->isoc_err_count++; in usbvision_compress_isochronous()
1221 usbvision->isoc_skip_count++; in usbvision_compress_isochronous()
1225 usbvision->isocstate = isoc_state_no_frame; in usbvision_compress_isochronous()
1226 usbvision->isoc_skip_count++; in usbvision_compress_isochronous()
1228 } else if (packet_len > usbvision->isoc_packet_size) { in usbvision_compress_isochronous()
1230 usbvision->isoc_skip_count++; in usbvision_compress_isochronous()
1236 if (usbvision->isocstate == isoc_state_no_frame) { /* new frame begins */ in usbvision_compress_isochronous()
1237 usbvision->isocstate = isoc_state_in_frame; in usbvision_compress_isochronous()
1238 scratch_mark_header(usbvision); in usbvision_compress_isochronous()
1239 usbvision_measure_bandwidth(usbvision); in usbvision_compress_isochronous()
1251 if (scratch_free(usbvision) < packet_len) { in usbvision_compress_isochronous()
1252 usbvision->scratch_ovf_count++; in usbvision_compress_isochronous()
1254 scratch_len(usbvision), packet_len); in usbvision_compress_isochronous()
1255 scratch_rm_old(usbvision, packet_len - scratch_free(usbvision)); in usbvision_compress_isochronous()
1259 scratch_put(usbvision, packet_data, packet_len); in usbvision_compress_isochronous()
1261 usbvision->isoc_data_count += packet_len; in usbvision_compress_isochronous()
1262 usbvision->isoc_packet_count++; in usbvision_compress_isochronous()
1269 printk(KERN_DEBUG "+%d.\n", usbvision->scratchlen); in usbvision_compress_isochronous()
1282 struct usb_usbvision *usbvision = urb->context; in usbvision_isoc_irq() local
1288 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_isoc_irq()
1295 f = &usbvision->cur_frame; in usbvision_isoc_irq()
1298 if (usbvision->streaming == stream_interrupt) { in usbvision_isoc_irq()
1299 usbvision->streaming = stream_idle; in usbvision_isoc_irq()
1305 wake_up_interruptible(&usbvision->wait_stream); in usbvision_isoc_irq()
1309 len = usbvision_compress_isochronous(usbvision, urb); in usbvision_isoc_irq()
1311 usbvision->isoc_urb_count++; in usbvision_isoc_irq()
1312 usbvision->urb_length = len; in usbvision_isoc_irq()
1314 if (usbvision->streaming == stream_on) { in usbvision_isoc_irq()
1316 if (scratch_len(usbvision) > USBVISION_HEADER_LENGTH && in usbvision_isoc_irq()
1317 !list_empty(&(usbvision->inqueue))) { in usbvision_isoc_irq()
1319 (*f) = list_entry(usbvision->inqueue.next, in usbvision_isoc_irq()
1323 usbvision_parse_data(usbvision); in usbvision_isoc_irq()
1329 scratch_reset(usbvision); in usbvision_isoc_irq()
1333 scratch_reset(usbvision); in usbvision_isoc_irq()
1336 usbvision->time_in_irq += jiffies - start_time; in usbvision_isoc_irq()
1344 urb->dev = usbvision->dev; in usbvision_isoc_irq()
1348 dev_err(&usbvision->dev->dev, in usbvision_isoc_irq()
1367 int usbvision_read_reg(struct usb_usbvision *usbvision, unsigned char reg) in usbvision_read_reg() argument
1372 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_read_reg()
1375 err_code = usb_control_msg(usbvision->dev, usb_rcvctrlpipe(usbvision->dev, 1), in usbvision_read_reg()
1381 dev_err(&usbvision->dev->dev, in usbvision_read_reg()
1396 int usbvision_write_reg(struct usb_usbvision *usbvision, unsigned char reg, in usbvision_write_reg() argument
1401 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_write_reg()
1404 err_code = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_write_reg()
1410 dev_err(&usbvision->dev->dev, in usbvision_write_reg()
1419 struct usb_usbvision *usbvision = (struct usb_usbvision *)urb->context; in usbvision_ctrl_urb_complete() local
1422 usbvision->ctrl_urb_busy = 0; in usbvision_ctrl_urb_complete()
1423 if (waitqueue_active(&usbvision->ctrl_urb_wq)) in usbvision_ctrl_urb_complete()
1424 wake_up_interruptible(&usbvision->ctrl_urb_wq); in usbvision_ctrl_urb_complete()
1428 static int usbvision_write_reg_irq(struct usb_usbvision *usbvision, int address, in usbvision_write_reg_irq() argument
1436 if (usbvision->ctrl_urb_busy) in usbvision_write_reg_irq()
1438 usbvision->ctrl_urb_busy = 1; in usbvision_write_reg_irq()
1440 usbvision->ctrl_urb_setup.bRequestType = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_ENDPOINT; in usbvision_write_reg_irq()
1441 usbvision->ctrl_urb_setup.bRequest = USBVISION_OP_CODE; in usbvision_write_reg_irq()
1442 usbvision->ctrl_urb_setup.wValue = 0; in usbvision_write_reg_irq()
1443 usbvision->ctrl_urb_setup.wIndex = cpu_to_le16(address); in usbvision_write_reg_irq()
1444 usbvision->ctrl_urb_setup.wLength = cpu_to_le16(len); in usbvision_write_reg_irq()
1445 usb_fill_control_urb(usbvision->ctrl_urb, usbvision->dev, in usbvision_write_reg_irq()
1446 usb_sndctrlpipe(usbvision->dev, 1), in usbvision_write_reg_irq()
1447 (unsigned char *)&usbvision->ctrl_urb_setup, in usbvision_write_reg_irq()
1448 (void *)usbvision->ctrl_urb_buffer, len, in usbvision_write_reg_irq()
1450 (void *)usbvision); in usbvision_write_reg_irq()
1452 memcpy(usbvision->ctrl_urb_buffer, data, len); in usbvision_write_reg_irq()
1454 err_code = usb_submit_urb(usbvision->ctrl_urb, GFP_ATOMIC); in usbvision_write_reg_irq()
1457 usbvision->ctrl_urb_busy = 0; in usbvision_write_reg_irq()
1464 static int usbvision_init_compression(struct usb_usbvision *usbvision) in usbvision_init_compression() argument
1466 usbvision->last_isoc_frame_num = -1; in usbvision_init_compression()
1467 usbvision->isoc_data_count = 0; in usbvision_init_compression()
1468 usbvision->isoc_packet_count = 0; in usbvision_init_compression()
1469 usbvision->isoc_skip_count = 0; in usbvision_init_compression()
1470 usbvision->compr_level = 50; in usbvision_init_compression()
1471 usbvision->last_compr_level = -1; in usbvision_init_compression()
1472 usbvision->isoc_urb_count = 0; in usbvision_init_compression()
1473 usbvision->request_intra = 1; in usbvision_init_compression()
1474 usbvision->isoc_measure_bandwidth_count = 0; in usbvision_init_compression()
1483 static int usbvision_measure_bandwidth(struct usb_usbvision *usbvision) in usbvision_measure_bandwidth() argument
1485 …if (usbvision->isoc_measure_bandwidth_count < 2) { /* this gives an average bandwidth of 3 frames … in usbvision_measure_bandwidth()
1486 usbvision->isoc_measure_bandwidth_count++; in usbvision_measure_bandwidth()
1489 if ((usbvision->isoc_packet_size > 0) && (usbvision->isoc_packet_count > 0)) { in usbvision_measure_bandwidth()
1490 usbvision->used_bandwidth = usbvision->isoc_data_count / in usbvision_measure_bandwidth()
1491 (usbvision->isoc_packet_count + usbvision->isoc_skip_count) * in usbvision_measure_bandwidth()
1492 100 / usbvision->isoc_packet_size; in usbvision_measure_bandwidth()
1494 usbvision->isoc_measure_bandwidth_count = 0; in usbvision_measure_bandwidth()
1495 usbvision->isoc_data_count = 0; in usbvision_measure_bandwidth()
1496 usbvision->isoc_packet_count = 0; in usbvision_measure_bandwidth()
1497 usbvision->isoc_skip_count = 0; in usbvision_measure_bandwidth()
1501 static int usbvision_adjust_compression(struct usb_usbvision *usbvision) in usbvision_adjust_compression() argument
1507 if ((adjust_compression) && (usbvision->used_bandwidth > 0)) { in usbvision_adjust_compression()
1508 usbvision->compr_level += (usbvision->used_bandwidth - 90) / 2; in usbvision_adjust_compression()
1509 RESTRICT_TO_RANGE(usbvision->compr_level, 0, 100); in usbvision_adjust_compression()
1510 if (usbvision->compr_level != usbvision->last_compr_level) { in usbvision_adjust_compression()
1513 if (usbvision->bridge_type == BRIDGE_NT1004 || usbvision->bridge_type == BRIDGE_NT1005) { in usbvision_adjust_compression()
1514 buffer[0] = (unsigned char)(4 + 16 * usbvision->compr_level / 100); /* PCM Threshold 1 */ in usbvision_adjust_compression()
1515 buffer[1] = (unsigned char)(4 + 8 * usbvision->compr_level / 100); /* PCM Threshold 2 */ in usbvision_adjust_compression()
1516 distortion = 7 + 248 * usbvision->compr_level / 100; in usbvision_adjust_compression()
1519 distortion = 1 + 42 * usbvision->compr_level / 100; in usbvision_adjust_compression()
1523 buffer[0] = (unsigned char)(4 + 16 * usbvision->compr_level / 100); /* PCM threshold 1 */ in usbvision_adjust_compression()
1524 buffer[1] = (unsigned char)(4 + 8 * usbvision->compr_level / 100); /* PCM threshold 2 */ in usbvision_adjust_compression()
1525 distortion = 2 + 253 * usbvision->compr_level / 100; in usbvision_adjust_compression()
1528 distortion = 0 + 43 * usbvision->compr_level / 100; in usbvision_adjust_compression()
1532 err_code = usbvision_write_reg_irq(usbvision, USBVISION_PCM_THR1, buffer, 6); in usbvision_adjust_compression()
1536 usbvision->last_compr_level = usbvision->compr_level; in usbvision_adjust_compression()
1543 static int usbvision_request_intra(struct usb_usbvision *usbvision) in usbvision_request_intra() argument
1548 usbvision->request_intra = 1; in usbvision_request_intra()
1550 usbvision_write_reg_irq(usbvision, USBVISION_FORCE_INTRA, buffer, 1); in usbvision_request_intra()
1554 static int usbvision_unrequest_intra(struct usb_usbvision *usbvision) in usbvision_unrequest_intra() argument
1559 usbvision->request_intra = 0; in usbvision_unrequest_intra()
1561 usbvision_write_reg_irq(usbvision, USBVISION_FORCE_INTRA, buffer, 1); in usbvision_unrequest_intra()
1569 int usbvision_power_off(struct usb_usbvision *usbvision) in usbvision_power_off() argument
1575 err_code = usbvision_write_reg(usbvision, USBVISION_PWR_REG, USBVISION_SSPND_EN); in usbvision_power_off()
1577 usbvision->power = 0; in usbvision_power_off()
1583 static int usbvision_init_webcam(struct usb_usbvision *usbvision) in usbvision_init_webcam() argument
1602 if (usbvision_device_data[usbvision->dev_model].video_norm == V4L2_STD_NTSC) in usbvision_init_webcam()
1606 usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_SER_MODE_SOFT); in usbvision_init_webcam()
1608 rc = usb_control_msg(usbvision->dev, in usbvision_init_webcam()
1609 usb_sndctrlpipe(usbvision->dev, 1), in usbvision_init_webcam()
1617 usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_SER_MODE_SIO); in usbvision_init_webcam()
1619 usbvision_write_reg(usbvision, USBVISION_SER_CONT, 3 | 0x10); in usbvision_init_webcam()
1620 usbvision_write_reg(usbvision, USBVISION_IOPIN_REG, 0); in usbvision_init_webcam()
1621 usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_SER_MODE_SOFT); in usbvision_init_webcam()
1622 usbvision_write_reg(usbvision, USBVISION_IOPIN_REG, USBVISION_IO_2); in usbvision_init_webcam()
1623 usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_SER_MODE_SOFT | USBVISION_CLK_OUT); in usbvision_init_webcam()
1624 usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_SER_MODE_SOFT | USBVISION_DAT_IO); in usbvision_init_webcam()
1625 …usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_SER_MODE_SOFT | USBVISION_CLK_OUT | U… in usbvision_init_webcam()
1635 static int usbvision_set_video_format(struct usb_usbvision *usbvision, int format) in usbvision_set_video_format() argument
1641 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_set_video_format()
1655 rc = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_set_video_format()
1665 usbvision->isoc_mode = format; in usbvision_set_video_format()
1674 int usbvision_set_output(struct usb_usbvision *usbvision, int width, in usbvision_set_output() argument
1682 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_set_output()
1687 usbvision->stretch_width = 2; in usbvision_set_output()
1690 usbvision->stretch_width = 1; in usbvision_set_output()
1695 usbvision->stretch_height = 2; in usbvision_set_output()
1698 usbvision->stretch_height = 1; in usbvision_set_output()
1708 usbvision->stretch_width, usbvision->stretch_height); in usbvision_set_output()
1711 if ((usb_width != usbvision->curwidth) || (usb_height != usbvision->curheight)) { in usbvision_set_output()
1717 err_code = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_set_output()
1723 dev_err(&usbvision->dev->dev, in usbvision_set_output()
1727 usbvision->curwidth = usbvision->stretch_width * usb_width; in usbvision_set_output()
1728 usbvision->curheight = usbvision->stretch_height * usb_height; in usbvision_set_output()
1731 if (usbvision->isoc_mode == ISOC_MODE_YUV422) in usbvision_set_output()
1732 frame_rate = (usbvision->isoc_packet_size * 1000) / (usb_width * usb_height * 2); in usbvision_set_output()
1733 else if (usbvision->isoc_mode == ISOC_MODE_YUV420) in usbvision_set_output()
1734 frame_rate = (usbvision->isoc_packet_size * 1000) / ((usb_width * usb_height * 12) / 8); in usbvision_set_output()
1738 if (usbvision->tvnorm_id & V4L2_STD_625_50) in usbvision_set_output()
1740 else if (usbvision->tvnorm_id & V4L2_STD_525_60) in usbvision_set_output()
1749 if (usbvision_device_data[usbvision->dev_model].codec == CODEC_WEBCAM) { in usbvision_set_output()
1750 if (usbvision_device_data[usbvision->dev_model].video_norm == V4L2_STD_PAL) in usbvision_set_output()
1764 err_code = usbvision_write_reg(usbvision, USBVISION_FRM_RATE, frame_drop); in usbvision_set_output()
1773 int usbvision_frames_alloc(struct usb_usbvision *usbvision, int number_of_frames) in usbvision_frames_alloc() argument
1778 usbvision->max_frame_size = PAGE_ALIGN(usbvision->curwidth * in usbvision_frames_alloc()
1779 usbvision->curheight * in usbvision_frames_alloc()
1780 usbvision->palette.bytes_per_pixel); in usbvision_frames_alloc()
1783 usbvision->num_frames = number_of_frames; in usbvision_frames_alloc()
1784 while (usbvision->num_frames > 0) { in usbvision_frames_alloc()
1785 usbvision->fbuf_size = usbvision->num_frames * usbvision->max_frame_size; in usbvision_frames_alloc()
1786 usbvision->fbuf = usbvision_rvmalloc(usbvision->fbuf_size); in usbvision_frames_alloc()
1787 if (usbvision->fbuf) in usbvision_frames_alloc()
1789 usbvision->num_frames--; in usbvision_frames_alloc()
1792 spin_lock_init(&usbvision->queue_lock); in usbvision_frames_alloc()
1793 init_waitqueue_head(&usbvision->wait_frame); in usbvision_frames_alloc()
1794 init_waitqueue_head(&usbvision->wait_stream); in usbvision_frames_alloc()
1797 for (i = 0; i < usbvision->num_frames; i++) { in usbvision_frames_alloc()
1798 usbvision->frame[i].index = i; in usbvision_frames_alloc()
1799 usbvision->frame[i].grabstate = frame_state_unused; in usbvision_frames_alloc()
1800 usbvision->frame[i].data = usbvision->fbuf + in usbvision_frames_alloc()
1801 i * usbvision->max_frame_size; in usbvision_frames_alloc()
1805 usbvision->stretch_width = 1; in usbvision_frames_alloc()
1806 usbvision->stretch_height = 1; in usbvision_frames_alloc()
1807 usbvision->frame[i].width = usbvision->curwidth; in usbvision_frames_alloc()
1808 usbvision->frame[i].height = usbvision->curheight; in usbvision_frames_alloc()
1809 usbvision->frame[i].bytes_read = 0; in usbvision_frames_alloc()
1812 usbvision->num_frames, usbvision->max_frame_size); in usbvision_frames_alloc()
1813 return usbvision->num_frames; in usbvision_frames_alloc()
1820 void usbvision_frames_free(struct usb_usbvision *usbvision) in usbvision_frames_free() argument
1823 PDEBUG(DBG_FUNC, "free %d frames", usbvision->num_frames); in usbvision_frames_free()
1825 if (usbvision->fbuf != NULL) { in usbvision_frames_free()
1826 usbvision_rvfree(usbvision->fbuf, usbvision->fbuf_size); in usbvision_frames_free()
1827 usbvision->fbuf = NULL; in usbvision_frames_free()
1829 usbvision->num_frames = 0; in usbvision_frames_free()
1836 void usbvision_empty_framequeues(struct usb_usbvision *usbvision) in usbvision_empty_framequeues() argument
1840 INIT_LIST_HEAD(&(usbvision->inqueue)); in usbvision_empty_framequeues()
1841 INIT_LIST_HEAD(&(usbvision->outqueue)); in usbvision_empty_framequeues()
1844 usbvision->frame[i].grabstate = frame_state_unused; in usbvision_empty_framequeues()
1845 usbvision->frame[i].bytes_read = 0; in usbvision_empty_framequeues()
1853 int usbvision_stream_interrupt(struct usb_usbvision *usbvision) in usbvision_stream_interrupt() argument
1859 usbvision->streaming = stream_interrupt; in usbvision_stream_interrupt()
1860 ret = wait_event_timeout(usbvision->wait_stream, in usbvision_stream_interrupt()
1861 (usbvision->streaming == stream_idle), in usbvision_stream_interrupt()
1871 static int usbvision_set_compress_params(struct usb_usbvision *usbvision) in usbvision_set_compress_params() argument
1890 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_set_compress_params()
1893 rc = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_set_compress_params()
1905 if (usbvision->bridge_type == BRIDGE_NT1004) { in usbvision_set_compress_params()
1921 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_set_compress_params()
1924 rc = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_set_compress_params()
1945 int usbvision_set_input(struct usb_usbvision *usbvision) in usbvision_set_input() argument
1952 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_set_input()
1956 if (usbvision_device_data[usbvision->dev_model].vin_reg1_override) { in usbvision_set_input()
1957 value[0] = usbvision_device_data[usbvision->dev_model].vin_reg1; in usbvision_set_input()
1958 } else if (usbvision_device_data[usbvision->dev_model].codec == CODEC_SAA7113) { in usbvision_set_input()
1968 rc = usbvision_write_reg(usbvision, USBVISION_VIN_REG1, value[0]); in usbvision_set_input()
1976 if (usbvision->tvnorm_id & V4L2_STD_PAL) { in usbvision_set_input()
1985 } else if (usbvision->tvnorm_id & V4L2_STD_SECAM) { in usbvision_set_input()
2006 if (usbvision_device_data[usbvision->dev_model].codec == CODEC_WEBCAM) { in usbvision_set_input()
2011 if (usbvision_device_data[usbvision->dev_model].x_offset >= 0) { in usbvision_set_input()
2012 value[4] = usbvision_device_data[usbvision->dev_model].x_offset & 0xff; in usbvision_set_input()
2013 value[5] = (usbvision_device_data[usbvision->dev_model].x_offset & 0x0300) >> 8; in usbvision_set_input()
2021 if (usbvision_device_data[usbvision->dev_model].y_offset >= 0) { in usbvision_set_input()
2022 value[6] = usbvision_device_data[usbvision->dev_model].y_offset & 0xff; in usbvision_set_input()
2023 value[7] = (usbvision_device_data[usbvision->dev_model].y_offset & 0x0300) >> 8; in usbvision_set_input()
2031 rc = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_set_input()
2044 if (usbvision_device_data[usbvision->dev_model].dvi_yuv_override) { in usbvision_set_input()
2045 dvi_yuv_value = usbvision_device_data[usbvision->dev_model].dvi_yuv; in usbvision_set_input()
2046 } else if (usbvision_device_data[usbvision->dev_model].codec == CODEC_SAA7113) { in usbvision_set_input()
2051 return usbvision_write_reg(usbvision, USBVISION_DVI_YUV, dvi_yuv_value); in usbvision_set_input()
2063 static int usbvision_set_dram_settings(struct usb_usbvision *usbvision) in usbvision_set_dram_settings() argument
2068 if (usbvision->isoc_mode == ISOC_MODE_COMPRESS) { in usbvision_set_dram_settings()
2103 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_set_dram_settings()
2106 rc = usb_control_msg(usbvision->dev, usb_sndctrlpipe(usbvision->dev, 1), in usbvision_set_dram_settings()
2113 dev_err(&usbvision->dev->dev, "%s: ERROR=%d\n", __func__, rc); in usbvision_set_dram_settings()
2118 rc = usbvision_write_reg(usbvision, USBVISION_DRM_CONT, USBVISION_RES_UR | in usbvision_set_dram_settings()
2122 rc = usbvision_write_reg(usbvision, USBVISION_DRM_CONT, 0x00); in usbvision_set_dram_settings()
2135 int usbvision_power_on(struct usb_usbvision *usbvision) in usbvision_power_on() argument
2141 usbvision_write_reg(usbvision, USBVISION_PWR_REG, USBVISION_SSPND_EN); in usbvision_power_on()
2142 usbvision_write_reg(usbvision, USBVISION_PWR_REG, in usbvision_power_on()
2145 if (usbvision_device_data[usbvision->dev_model].codec == CODEC_WEBCAM) { in usbvision_power_on()
2146 usbvision_write_reg(usbvision, USBVISION_VIN_REG1, in usbvision_power_on()
2148 usbvision_write_reg(usbvision, USBVISION_VIN_REG2, in usbvision_power_on()
2151 usbvision_write_reg(usbvision, USBVISION_PWR_REG, in usbvision_power_on()
2154 err_code = usbvision_write_reg(usbvision, USBVISION_PWR_REG, in usbvision_power_on()
2157 usbvision->power = 1; in usbvision_power_on()
2170 struct usb_usbvision *usbvision = container_of(work, struct usb_usbvision, power_off_work); in call_usbvision_power_off() local
2173 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) in call_usbvision_power_off()
2176 if (usbvision->user == 0) { in call_usbvision_power_off()
2177 usbvision_i2c_unregister(usbvision); in call_usbvision_power_off()
2179 usbvision_power_off(usbvision); in call_usbvision_power_off()
2180 usbvision->initialized = 0; in call_usbvision_power_off()
2182 mutex_unlock(&usbvision->v4l2_lock); in call_usbvision_power_off()
2187 struct usb_usbvision *usbvision = (void *)data; in usbvision_power_off_timer() local
2190 del_timer(&usbvision->power_off_timer); in usbvision_power_off_timer()
2191 INIT_WORK(&usbvision->power_off_work, call_usbvision_power_off); in usbvision_power_off_timer()
2192 (void) schedule_work(&usbvision->power_off_work); in usbvision_power_off_timer()
2195 void usbvision_init_power_off_timer(struct usb_usbvision *usbvision) in usbvision_init_power_off_timer() argument
2197 setup_timer(&usbvision->power_off_timer, usbvision_power_off_timer, in usbvision_init_power_off_timer()
2198 (unsigned long)usbvision); in usbvision_init_power_off_timer()
2201 void usbvision_set_power_off_timer(struct usb_usbvision *usbvision) in usbvision_set_power_off_timer() argument
2203 mod_timer(&usbvision->power_off_timer, jiffies + USBVISION_POWEROFF_TIME); in usbvision_set_power_off_timer()
2206 void usbvision_reset_power_off_timer(struct usb_usbvision *usbvision) in usbvision_reset_power_off_timer() argument
2208 if (timer_pending(&usbvision->power_off_timer)) in usbvision_reset_power_off_timer()
2209 del_timer(&usbvision->power_off_timer); in usbvision_reset_power_off_timer()
2217 int usbvision_begin_streaming(struct usb_usbvision *usbvision) in usbvision_begin_streaming() argument
2219 if (usbvision->isoc_mode == ISOC_MODE_COMPRESS) in usbvision_begin_streaming()
2220 usbvision_init_compression(usbvision); in usbvision_begin_streaming()
2221 return usbvision_write_reg(usbvision, USBVISION_VIN_REG2, in usbvision_begin_streaming()
2222 USBVISION_NOHVALID | usbvision->vin_reg2_preset); in usbvision_begin_streaming()
2230 int usbvision_restart_isoc(struct usb_usbvision *usbvision) in usbvision_restart_isoc() argument
2234 ret = usbvision_write_reg(usbvision, USBVISION_PWR_REG, in usbvision_restart_isoc()
2238 ret = usbvision_write_reg(usbvision, USBVISION_PWR_REG, in usbvision_restart_isoc()
2243 ret = usbvision_write_reg(usbvision, USBVISION_VIN_REG2, in usbvision_restart_isoc()
2245 usbvision->vin_reg2_preset); in usbvision_restart_isoc()
2250 while ((usbvision_read_reg(usbvision, USBVISION_STATUS_REG) & 0x01) != 1) in usbvision_restart_isoc()
2256 int usbvision_audio_off(struct usb_usbvision *usbvision) in usbvision_audio_off() argument
2258 if (usbvision_write_reg(usbvision, USBVISION_IOPIN_REG, USBVISION_AUDIO_MUTE) < 0) { in usbvision_audio_off()
2262 usbvision->audio_mute = 0; in usbvision_audio_off()
2263 usbvision->audio_channel = USBVISION_AUDIO_MUTE; in usbvision_audio_off()
2267 int usbvision_set_audio(struct usb_usbvision *usbvision, int audio_channel) in usbvision_set_audio() argument
2269 if (!usbvision->audio_mute) { in usbvision_set_audio()
2270 if (usbvision_write_reg(usbvision, USBVISION_IOPIN_REG, audio_channel) < 0) { in usbvision_set_audio()
2275 usbvision->audio_channel = audio_channel; in usbvision_set_audio()
2279 int usbvision_setup(struct usb_usbvision *usbvision, int format) in usbvision_setup() argument
2281 if (usbvision_device_data[usbvision->dev_model].codec == CODEC_WEBCAM) in usbvision_setup()
2282 usbvision_init_webcam(usbvision); in usbvision_setup()
2283 usbvision_set_video_format(usbvision, format); in usbvision_setup()
2284 usbvision_set_dram_settings(usbvision); in usbvision_setup()
2285 usbvision_set_compress_params(usbvision); in usbvision_setup()
2286 usbvision_set_input(usbvision); in usbvision_setup()
2287 usbvision_set_output(usbvision, MAX_USB_WIDTH, MAX_USB_HEIGHT); in usbvision_setup()
2288 usbvision_restart_isoc(usbvision); in usbvision_setup()
2291 return USBVISION_IS_OPERATIONAL(usbvision); in usbvision_setup()
2326 int usbvision_init_isoc(struct usb_usbvision *usbvision) in usbvision_init_isoc() argument
2328 struct usb_device *dev = usbvision->dev; in usbvision_init_isoc()
2332 if (!USBVISION_IS_OPERATIONAL(usbvision)) in usbvision_init_isoc()
2335 usbvision->cur_frame = NULL; in usbvision_init_isoc()
2336 scratch_reset(usbvision); in usbvision_init_isoc()
2339 err_code = usbvision_set_alternate(usbvision); in usbvision_init_isoc()
2341 usbvision->last_error = err_code; in usbvision_init_isoc()
2344 sb_size = USBVISION_URB_FRAMES * usbvision->isoc_packet_size; in usbvision_init_isoc()
2346 reg_value = (16 - usbvision_read_reg(usbvision, in usbvision_init_isoc()
2349 usbvision->usb_bandwidth = reg_value >> 1; in usbvision_init_isoc()
2351 usbvision->usb_bandwidth); in usbvision_init_isoc()
2363 dev_err(&usbvision->dev->dev, in usbvision_init_isoc()
2367 usbvision->sbuf[buf_idx].urb = urb; in usbvision_init_isoc()
2368 usbvision->sbuf[buf_idx].data = in usbvision_init_isoc()
2369 usb_alloc_coherent(usbvision->dev, in usbvision_init_isoc()
2374 urb->context = usbvision; in usbvision_init_isoc()
2375 urb->pipe = usb_rcvisocpipe(dev, usbvision->video_endp); in usbvision_init_isoc()
2378 urb->transfer_buffer = usbvision->sbuf[buf_idx].data; in usbvision_init_isoc()
2382 usbvision->isoc_packet_size * USBVISION_URB_FRAMES; in usbvision_init_isoc()
2384 k += usbvision->isoc_packet_size) { in usbvision_init_isoc()
2387 usbvision->isoc_packet_size; in usbvision_init_isoc()
2393 err_code = usb_submit_urb(usbvision->sbuf[buf_idx].urb, in usbvision_init_isoc()
2396 dev_err(&usbvision->dev->dev, in usbvision_init_isoc()
2402 usbvision->streaming = stream_idle; in usbvision_init_isoc()
2405 usbvision->video_endp); in usbvision_init_isoc()
2416 void usbvision_stop_isoc(struct usb_usbvision *usbvision) in usbvision_stop_isoc() argument
2419 int sb_size = USBVISION_URB_FRAMES * usbvision->isoc_packet_size; in usbvision_stop_isoc()
2421 if ((usbvision->streaming == stream_off) || (usbvision->dev == NULL)) in usbvision_stop_isoc()
2426 usb_kill_urb(usbvision->sbuf[buf_idx].urb); in usbvision_stop_isoc()
2427 if (usbvision->sbuf[buf_idx].data) { in usbvision_stop_isoc()
2428 usb_free_coherent(usbvision->dev, in usbvision_stop_isoc()
2430 usbvision->sbuf[buf_idx].data, in usbvision_stop_isoc()
2431 usbvision->sbuf[buf_idx].urb->transfer_dma); in usbvision_stop_isoc()
2433 usb_free_urb(usbvision->sbuf[buf_idx].urb); in usbvision_stop_isoc()
2434 usbvision->sbuf[buf_idx].urb = NULL; in usbvision_stop_isoc()
2438 usbvision->streaming = stream_off; in usbvision_stop_isoc()
2440 if (!usbvision->remove_pending) { in usbvision_stop_isoc()
2442 usbvision->iface_alt = 0; in usbvision_stop_isoc()
2443 err_code = usb_set_interface(usbvision->dev, usbvision->iface, in usbvision_stop_isoc()
2444 usbvision->iface_alt); in usbvision_stop_isoc()
2446 dev_err(&usbvision->dev->dev, in usbvision_stop_isoc()
2449 usbvision->last_error = err_code; in usbvision_stop_isoc()
2451 reg_value = (16-usbvision_read_reg(usbvision, USBVISION_ALTER_REG)) & 0x0F; in usbvision_stop_isoc()
2452 usbvision->isoc_packet_size = in usbvision_stop_isoc()
2455 usbvision->isoc_packet_size); in usbvision_stop_isoc()
2457 usbvision->usb_bandwidth = reg_value >> 1; in usbvision_stop_isoc()
2459 usbvision->usb_bandwidth); in usbvision_stop_isoc()
2463 int usbvision_muxsel(struct usb_usbvision *usbvision, int channel) in usbvision_muxsel() argument
2474 RESTRICT_TO_RANGE(channel, 0, usbvision->video_inputs); in usbvision_muxsel()
2475 usbvision->ctl_input = channel; in usbvision_muxsel()
2481 switch (usbvision_device_data[usbvision->dev_model].codec) { in usbvision_muxsel()
2500 call_all(usbvision, video, s_routing, mode[channel], 0, 0); in usbvision_muxsel()
2501 usbvision_set_audio(usbvision, audio[channel]); in usbvision_muxsel()