Lines Matching defs:sc
96 utvfu_set_regs(struct utvfu_softc *sc, const uint16_t regs[][2], int size)
110 error = usbd_do_request(sc->sc_udev, &req, NULL);
113 DEVNAME(sc), __func__);
135 utvfu_configure_for_norm(struct utvfu_softc *sc, v4l2_std_id norm)
148 sc->sc_normi = i;
149 sc->sc_nchunks = params->cap_width * params->cap_height
158 utvfu_select_input(struct utvfu_softc *sc, int input)
180 ret = utvfu_set_regs(sc, composite, nitems(composite));
183 ret = utvfu_set_regs(sc, svideo, nitems(svideo));
190 sc->sc_input = input;
196 utvfu_select_norm(struct utvfu_softc *sc, v4l2_std_id norm)
235 ret = utvfu_configure_for_norm(sc, norm);
239 ret = utvfu_set_regs(sc, ntsc, nitems(ntsc));
241 ret = utvfu_set_regs(sc, pal, nitems(pal));
248 utvfu_setup_capture(struct utvfu_softc *sc)
325 ret = utvfu_set_regs(sc, setup, nitems(setup));
329 ret = utvfu_select_norm(sc, utvfu_norm_params[sc->sc_normi].norm);
333 ret = utvfu_select_input(sc, sc->sc_input);
387 utvfu_image_chunk(struct utvfu_softc *sc, u_char *chunk)
399 DEVNAME(sc), UTVFU_MAGIC(hdr));
406 if (chunk_no >= sc->sc_nchunks) {
408 DEVNAME(sc), chunk_no, sc->sc_nchunks);
414 sc->sc_fb.fid = frame_id;
415 sc->sc_fb.chunks_done = 0;
417 else if (sc->sc_fb.fid != frame_id) {
419 DEVNAME(sc), sc->sc_fb.fid, frame_id);
423 frame_len = utvfu_norm_params[sc->sc_normi].frame_len;
426 utvfu_chunk_to_vbuf(sc->sc_fb.buf, chunk, chunk_no, odd);
427 sc->sc_fb.chunks_done++;
430 if (chunk_no == sc->sc_nchunks-1) {
432 if (odd && !sc->sc_fb.last_odd) {
433 if (sc->sc_fb.chunks_done != sc->sc_nchunks) {
435 DEVNAME(sc),
436 sc->sc_fb.chunks_done, sc->sc_nchunks);
439 if (sc->sc_flags & UTVFU_FLAG_MMAP) {
440 utvfu_mmap_queue(sc, sc->sc_fb.buf, frame_len);
443 utvfu_read(sc, sc->sc_fb.buf, frame_len);
446 sc->sc_fb.last_odd = odd;
451 utvfu_start_capture(struct utvfu_softc *sc)
456 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
458 restart_au = ISSET(sc->sc_flags, UTVFU_FLAG_AS_RUNNING);
459 utvfu_audio_stop(sc);
462 error = usbd_set_interface(sc->sc_uifaceh, UTVFU_DFLT_IFACE_IDX);
466 if (utvfu_setup_capture(sc) != 0)
470 error = usbd_set_interface(sc->sc_uifaceh, UTVFU_ALT_IFACE_IDX);
475 utvfu_audio_start(sc);
483 struct utvfu_softc *sc = v;
486 strlcpy(cap->driver, DEVNAME(sc), sizeof(cap->driver));
499 struct utvfu_softc *sc = v;
513 i->std = utvfu_norm_params[sc->sc_normi].norm;
534 struct utvfu_softc *sc = v;
544 fsizes->discrete.width = utvfu_norm_params[sc->sc_normi].cap_width;
545 fsizes->discrete.height = utvfu_norm_params[sc->sc_normi].cap_height;
553 struct utvfu_softc *sc = v;
555 f->fmt.pix.width = utvfu_norm_params[sc->sc_normi].cap_width;
556 f->fmt.pix.height = utvfu_norm_params[sc->sc_normi].cap_height;
578 struct utvfu_softc *sc = v;
580 *norm = utvfu_norm_params[sc->sc_normi].norm;
589 struct utvfu_softc *sc = v;
592 ret = utvfu_select_norm(sc, norm);
600 struct utvfu_softc *sc = v;
602 *i = sc->sc_input;
616 utvfu_audio_decode(struct utvfu_softc *sc, int len)
621 if (sc->sc_audio.blksize == 0)
624 src = KERNADDR(&sc->sc_audio.iface.xfer->dmabuf, 0);
625 dst = sc->sc_audio.cur;
626 ncopied = sc->sc_audio.cur - sc->sc_audio.start;
628 ncopied %= sc->sc_audio.blksize;
639 n = min(chunk, sc->sc_audio.blksize - ncopied);
645 if (ncopied >= sc->sc_audio.blksize) {
647 (*sc->sc_audio.intr)(sc->sc_audio.intr_arg);
649 ncopied -= sc->sc_audio.blksize;
651 if (dst > sc->sc_audio.end)
652 dst = sc->sc_audio.start;
656 sc->sc_audio.cur = dst;
660 utvfu_audio_start_chip(struct utvfu_softc *sc)
688 utvfu_set_regs(sc, setup, nitems(setup));
694 utvfu_audio_stop_chip(struct utvfu_softc *sc)
708 utvfu_set_regs(sc, setup, nitems(setup));
918 struct utvfu_softc *sc = (struct utvfu_softc *)self;
921 sc->sc_udev = uaa->device;
923 if (usbd_iface_claimed(sc->sc_udev, i))
925 usbd_claim_iface(sc->sc_udev, i);
928 utvfu_parse_desc(sc);
931 SIMPLEQ_INIT(&sc->sc_mmap_q);
932 sc->sc_mmap_count = 0;
934 sc->sc_max_frame_sz = utvfu_max_frame_size();
937 sc->sc_nframes = (sc->sc_max_frame_sz + sc->sc_iface.psize - 1)
938 / sc->sc_iface.psize;
939 if (sc->sc_nframes > UTVFU_NFRAMES_MAX)
940 sc->sc_nframes = UTVFU_NFRAMES_MAX;
941 DPRINTF(1, "%s: nframes=%d\n", DEVNAME(sc), sc->sc_nframes);
943 rw_init(&sc->sc_audio.rwlock, "audiorwl");
945 sc->sc_audiodev = audio_attach_mi(&utvfu_au_hw_if, sc, NULL, &sc->sc_dev);
946 sc->sc_videodev = video_attach_mi(&utvfu_vid_hw_if, sc, &sc->sc_dev);
952 struct utvfu_softc *sc = (struct utvfu_softc *)self;
956 usbd_delay_ms(sc->sc_udev, UTVFU_NFRAMES_MAX); /* XXX meh? */
958 if (sc->sc_videodev != NULL)
959 rv = config_detach(sc->sc_videodev, flags);
961 if (sc->sc_audiodev != NULL)
962 rv += config_detach(sc->sc_audiodev, flags);
964 utvfu_as_free(sc);
965 utvfu_vs_free(sc);
967 sc->sc_flags = 0;
973 utvfu_parse_desc(struct utvfu_softc *sc)
983 usbd_desc_iter_init(sc->sc_udev, &iter);
999 DEVNAME(sc));
1004 sc->sc_uifaceh = &sc->sc_udev->ifaces[0];
1017 sc->sc_iface.psize = psize;
1028 struct utvfu_softc *sc = addr;
1031 DPRINTF(1, "%s: utvfu_open: sc=%p\n", DEVNAME(sc), sc);
1033 if (usbd_is_dying(sc->sc_udev))
1036 if ((rv = utvfu_vs_init(sc)) != 0)
1040 sc->sc_uplayer_arg = arg;
1041 sc->sc_uplayer_fsize = size;
1042 sc->sc_uplayer_fbuffer = buffer;
1043 sc->sc_uplayer_intr = intr;
1045 sc->sc_flags &= ~UTVFU_FLAG_MMAP;
1053 struct utvfu_softc *sc = addr;
1055 DPRINTF(1, "%s: utvfu_close: sc=%p\n", DEVNAME(sc), sc);
1058 utvfu_vs_free(sc);
1064 utvfu_as_open(struct utvfu_softc *sc)
1069 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1071 if (sc->sc_audio.iface.pipeh != NULL) {
1073 DEVNAME(sc), __func__);
1077 ed = usbd_get_endpoint_descriptor(sc->sc_uifaceh, UTVFU_AUDIO_ENDP);
1080 DEVNAME(sc));
1083 DPRINTF(1, "%s: open pipe for ", DEVNAME(sc));
1093 sc->sc_uifaceh,
1096 &sc->sc_audio.iface.pipeh);
1099 DEVNAME(sc), usbd_errstr(error));
1106 utvfu_vs_open(struct utvfu_softc *sc)
1111 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1113 if (sc->sc_iface.pipeh != NULL) {
1115 DEVNAME(sc), __func__);
1119 ed = usbd_get_endpoint_descriptor(sc->sc_uifaceh, UTVFU_VIDEO_ENDP);
1122 DEVNAME(sc));
1125 DPRINTF(1, "%s: open pipe for ", DEVNAME(sc));
1131 sc->sc_iface.psize);
1134 sc->sc_uifaceh,
1137 &sc->sc_iface.pipeh);
1140 DEVNAME(sc), usbd_errstr(error));
1147 utvfu_as_close(struct utvfu_softc *sc)
1149 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1151 CLR(sc->sc_flags, UTVFU_FLAG_AS_RUNNING);
1153 if (sc->sc_audio.iface.pipeh != NULL) {
1154 usbd_abort_pipe(sc->sc_audio.iface.pipeh);
1156 usbd_ref_wait(sc->sc_udev);
1158 usbd_close_pipe(sc->sc_audio.iface.pipeh);
1159 sc->sc_audio.iface.pipeh = NULL;
1164 utvfu_vs_close(struct utvfu_softc *sc)
1166 if (sc->sc_iface.pipeh != NULL) {
1167 usbd_close_pipe(sc->sc_iface.pipeh);
1168 sc->sc_iface.pipeh = NULL;
1176 usbd_delay_ms(sc->sc_udev, 100);
1179 (void)usbd_set_interface(sc->sc_uifaceh, UTVFU_DFLT_IFACE_IDX);
1183 utvfu_read(struct utvfu_softc *sc, uint8_t *buf, int len)
1189 *sc->sc_uplayer_fsize = len;
1190 memcpy(sc->sc_uplayer_fbuffer, buf, len);
1191 (*sc->sc_uplayer_intr)(sc->sc_uplayer_arg);
1195 utvfu_as_start_bulk(struct utvfu_softc *sc)
1199 if (ISSET(sc->sc_flags, UTVFU_FLAG_AS_RUNNING))
1201 if (sc->sc_audio.iface.pipeh == NULL)
1204 SET(sc->sc_flags, UTVFU_FLAG_AS_RUNNING);
1205 error = kthread_create(utvfu_as_bulk_thread, sc, NULL, DEVNAME(sc));
1207 CLR(sc->sc_flags, UTVFU_FLAG_AS_RUNNING);
1208 printf("%s: can't create kernel thread!", DEVNAME(sc));
1217 struct utvfu_softc *sc = arg;
1222 DPRINTF(1, "%s %s\n", DEVNAME(sc), __func__);
1224 iface = &sc->sc_audio.iface;
1225 usbd_ref_incr(sc->sc_udev);
1226 while (ISSET(sc->sc_flags, UTVFU_FLAG_AS_RUNNING)) {
1240 DEVNAME(sc), usbd_errstr(error));
1246 DPRINTF(2, "%s: *** buffer len = %d\n", DEVNAME(sc), actlen);
1248 rw_enter_read(&sc->sc_audio.rwlock);
1249 utvfu_audio_decode(sc, actlen);
1250 rw_exit_read(&sc->sc_audio.rwlock);
1253 CLR(sc->sc_flags, UTVFU_FLAG_AS_RUNNING);
1254 usbd_ref_decr(sc->sc_udev);
1256 DPRINTF(1, "%s %s: exiting\n", DEVNAME(sc), __func__);
1262 utvfu_vs_start_isoc(struct utvfu_softc *sc)
1267 utvfu_vs_start_isoc_ixfer(sc, &sc->sc_iface.ixfer[i]);
1271 utvfu_vs_start_isoc_ixfer(struct utvfu_softc *sc,
1277 DPRINTF(2, "%s: %s\n", DEVNAME(sc), __func__);
1279 if (usbd_is_dying(sc->sc_udev))
1282 for (i = 0; i < sc->sc_nframes; i++)
1283 ixfer->size[i] = sc->sc_iface.psize;
1287 sc->sc_iface.pipeh,
1290 sc->sc_nframes,
1297 DEVNAME(sc), usbd_errstr(error));
1308 struct utvfu_softc *sc = ixfer->sc;
1313 DPRINTF(2, "%s: %s\n", DEVNAME(sc), __func__);
1316 DPRINTF(1, "%s: %s: %s\n", DEVNAME(sc), __func__,
1322 DPRINTF(2, "%s: *** buffer len = %d\n", DEVNAME(sc), actlen);
1327 for (i = 0; i < sc->sc_nframes; i++, frame += sc->sc_iface.psize) {
1337 utvfu_image_chunk(sc, frame + off);
1343 utvfu_vs_start_isoc_ixfer(sc, ixfer);
1347 utvfu_find_queued(struct utvfu_softc *sc)
1352 for (i = 0; i < sc->sc_mmap_count; i++) {
1353 if (sc->sc_mmap[i].v4l2_buf.flags & V4L2_BUF_FLAG_DONE)
1355 if (sc->sc_mmap[i].v4l2_buf.flags & V4L2_BUF_FLAG_QUEUED)
1363 utvfu_mmap_queue(struct utvfu_softc *sc, uint8_t *buf, int len)
1367 if (sc->sc_mmap_count == 0 || sc->sc_mmap_buffer == NULL)
1371 if ((i = utvfu_find_queued(sc)) == -1) {
1372 DPRINTF(2, "%s: mmap queue is full!\n", DEVNAME(sc));
1377 memcpy(sc->sc_mmap[i].buf, buf, len);
1378 sc->sc_mmap[i].v4l2_buf.bytesused = len;
1381 getmicrotime(&sc->sc_mmap[i].v4l2_buf.timestamp);
1384 sc->sc_mmap[i].v4l2_buf.flags &= ~V4L2_BUF_FLAG_QUEUED;
1385 sc->sc_mmap[i].v4l2_buf.flags |= V4L2_BUF_FLAG_DONE;
1388 SIMPLEQ_INSERT_TAIL(&sc->sc_mmap_q, &sc->sc_mmap[i], q_frames);
1390 DEVNAME(sc), __func__, i);
1392 wakeup(sc);
1398 (*sc->sc_uplayer_intr)(sc->sc_uplayer_arg);
1406 struct utvfu_softc *sc = v;
1409 if (off < sc->sc_mmap_bufsz) {
1410 if ((sc->sc_flags & UTVFU_FLAG_MMAP) == 0)
1411 sc->sc_flags |= UTVFU_FLAG_MMAP;
1413 p = sc->sc_mmap_buffer + off;
1422 struct utvfu_softc *sc = v;
1425 return (utvfu_norm_params[sc->sc_normi].cap_width *
1426 utvfu_norm_params[sc->sc_normi].cap_height * 2);
1432 struct utvfu_softc *sc = v;
1435 if (sc->sc_flags & UTVFU_FLAG_MMAP)
1436 sc->sc_flags &= ~UTVFU_FLAG_MMAP;
1439 error = utvfu_vs_open(sc);
1443 utvfu_vs_start_isoc(sc);
1449 utvfu_audio_clear_client(struct utvfu_softc *sc)
1451 rw_enter_write(&sc->sc_audio.rwlock);
1453 sc->sc_audio.intr = NULL;
1454 sc->sc_audio.intr_arg = NULL;
1455 sc->sc_audio.start = NULL;
1456 sc->sc_audio.end = NULL;
1457 sc->sc_audio.cur = NULL;
1458 sc->sc_audio.blksize = 0;
1460 rw_exit_write(&sc->sc_audio.rwlock);
1464 utvfu_as_free(struct utvfu_softc *sc)
1466 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1468 utvfu_as_close(sc);
1469 utvfu_as_free_bulk(sc);
1473 utvfu_vs_free(struct utvfu_softc *sc)
1475 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1476 utvfu_vs_close(sc);
1477 utvfu_vs_free_isoc(sc);
1478 utvfu_vs_free_frame(sc);
1482 utvfu_as_init(struct utvfu_softc *sc)
1484 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1486 if (sc->sc_audio.iface.xfer != NULL)
1490 return utvfu_as_alloc_bulk(sc);
1494 utvfu_vs_init(struct utvfu_softc *sc)
1496 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1498 if (utvfu_start_capture(sc) != 0)
1501 if (utvfu_vs_alloc_isoc(sc) != 0 || utvfu_vs_alloc_frame(sc) != 0)
1508 utvfu_vs_alloc_frame(struct utvfu_softc *sc)
1510 struct utvfu_frame_buf *fb = &sc->sc_fb;
1512 fb->size = sc->sc_max_frame_sz;
1515 printf("%s: can't allocate frame buffer!\n", DEVNAME(sc));
1520 DEVNAME(sc), __func__, fb->size);
1530 utvfu_vs_free_frame(struct utvfu_softc *sc)
1532 struct utvfu_frame_buf *fb = &sc->sc_fb;
1539 if (sc->sc_mmap_buffer != NULL) {
1540 free(sc->sc_mmap_buffer, M_USBDEV, sc->sc_mmap_bufsz);
1541 sc->sc_mmap_buffer = NULL;
1542 memset(sc->sc_mmap, 0, sizeof(sc->sc_mmap));
1545 while (!SIMPLEQ_EMPTY(&sc->sc_mmap_q))
1546 SIMPLEQ_REMOVE_HEAD(&sc->sc_mmap_q, q_frames);
1548 sc->sc_mmap_count = 0;
1552 utvfu_vs_alloc_isoc(struct utvfu_softc *sc)
1557 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1560 sc->sc_iface.ixfer[i].sc = sc;
1561 sc->sc_iface.ixfer[i].xfer = usbd_alloc_xfer(sc->sc_udev);
1562 if (sc->sc_iface.ixfer[i].xfer == NULL) {
1564 DEVNAME(sc));
1568 size = sc->sc_iface.psize * sc->sc_nframes;
1570 buf = usbd_alloc_buffer(sc->sc_iface.ixfer[i].xfer, size);
1573 DEVNAME(sc));
1577 DEVNAME(sc), size);
1584 utvfu_as_alloc_bulk(struct utvfu_softc *sc)
1588 xfer = usbd_alloc_xfer(sc->sc_udev);
1591 DEVNAME(sc));
1598 DEVNAME(sc));
1602 DEVNAME(sc), UTVFU_AUDIO_URBSIZE);
1604 sc->sc_audio.iface.xfer = xfer;
1610 utvfu_vs_free_isoc(struct utvfu_softc *sc)
1614 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1617 if (sc->sc_iface.ixfer[i].xfer != NULL) {
1618 usbd_free_xfer(sc->sc_iface.ixfer[i].xfer);
1619 sc->sc_iface.ixfer[i].xfer = NULL;
1625 utvfu_as_free_bulk(struct utvfu_softc *sc)
1627 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1629 if (sc->sc_audio.iface.xfer != NULL) {
1630 usbd_free_xfer(sc->sc_audio.iface.xfer);
1631 sc->sc_audio.iface.xfer = NULL;
1638 struct utvfu_softc *sc = v;
1641 DPRINTF(1, "%s: %s: count=%d\n", DEVNAME(sc), __func__, rb->count);
1647 if (sc->sc_mmap_count > 0 || sc->sc_mmap_buffer != NULL) {
1649 DEVNAME(sc), __func__);
1655 sc->sc_mmap_count = UTVFU_MAX_BUFFERS;
1657 sc->sc_mmap_count = rb->count;
1660 sc->sc_mmap_bufsz = sc->sc_max_frame_sz;
1661 if (INT_MAX / sc->sc_mmap_count < sc->sc_max_frame_sz) /* overflow */
1663 sc->sc_mmap_bufsz *= sc->sc_mmap_count;
1664 sc->sc_mmap_bufsz = round_page(sc->sc_mmap_bufsz); /* page align */
1665 sc->sc_mmap_buffer = malloc(sc->sc_mmap_bufsz, M_USBDEV, M_NOWAIT);
1666 if (sc->sc_mmap_buffer == NULL) {
1667 printf("%s: can't allocate mmap buffer!\n", DEVNAME(sc));
1671 DEVNAME(sc), sc->sc_mmap_bufsz);
1674 for (i = 0; i < sc->sc_mmap_count; i++) {
1675 sc->sc_mmap[i].buf = sc->sc_mmap_buffer
1676 + (i * sc->sc_max_frame_sz);
1677 sc->sc_mmap[i].v4l2_buf.index = i;
1678 sc->sc_mmap[i].v4l2_buf.m.offset = i * sc->sc_max_frame_sz;
1679 sc->sc_mmap[i].v4l2_buf.length = sc->sc_max_frame_sz;
1680 sc->sc_mmap[i].v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1681 sc->sc_mmap[i].v4l2_buf.sequence = 0;
1682 sc->sc_mmap[i].v4l2_buf.field = V4L2_FIELD_NONE;
1683 sc->sc_mmap[i].v4l2_buf.memory = V4L2_MEMORY_MMAP;
1684 sc->sc_mmap[i].v4l2_buf.flags = V4L2_BUF_FLAG_MAPPED;
1687 DEVNAME(sc), __func__,
1688 sc->sc_mmap[i].v4l2_buf.index,
1689 sc->sc_mmap[i].v4l2_buf.m.offset,
1690 sc->sc_mmap[i].v4l2_buf.length);
1694 rb->count = sc->sc_mmap_count;
1704 struct utvfu_softc *sc = v;
1708 qb->index >= sc->sc_mmap_count)
1711 memcpy(qb, &sc->sc_mmap[qb->index].v4l2_buf,
1715 DEVNAME(sc), __func__, qb->index, qb->m.offset, qb->length);
1723 struct utvfu_softc *sc = v;
1727 qb->index >= sc->sc_mmap_count)
1730 sc->sc_mmap[qb->index].v4l2_buf.flags &= ~V4L2_BUF_FLAG_DONE;
1731 sc->sc_mmap[qb->index].v4l2_buf.flags |= V4L2_BUF_FLAG_MAPPED;
1732 sc->sc_mmap[qb->index].v4l2_buf.flags |= V4L2_BUF_FLAG_QUEUED;
1735 DEVNAME(sc), __func__, qb->index);
1743 struct utvfu_softc *sc = v;
1751 if (SIMPLEQ_EMPTY(&sc->sc_mmap_q)) {
1753 error = tsleep_nsec(sc, 0, "vid_mmap", SEC_TO_NSEC(10));
1758 mmap = SIMPLEQ_FIRST(&sc->sc_mmap_q);
1768 DEVNAME(sc), __func__, mmap->v4l2_buf.index);
1769 SIMPLEQ_REMOVE_HEAD(&sc->sc_mmap_q, q_frames);
1777 struct utvfu_softc *sc = v;
1781 error = utvfu_vs_open(sc);
1785 utvfu_vs_start_isoc(sc);
1809 struct utvfu_softc *sc = v;
1818 switch (utvfu_norm_params[sc->sc_normi].norm) {
1854 struct utvfu_softc *sc = v;
1856 if (usbd_is_dying(sc->sc_udev))
1862 if (ISSET(sc->sc_flags, UTVFU_FLAG_AS_RUNNING))
1865 return utvfu_as_init(sc);
1871 struct utvfu_softc *sc = v;
1873 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1875 utvfu_audio_stop(sc);
1876 utvfu_audio_clear_client(sc);
1883 struct utvfu_softc *sc = v;
1885 if (usbd_is_dying(sc->sc_udev))
1888 DPRINTF(1, "%s %s\n", DEVNAME(sc), __func__);
1913 struct utvfu_softc *sc = v;
1915 if (usbd_is_dying(sc->sc_udev))
1918 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
1920 utvfu_audio_stop(sc);
1921 utvfu_audio_clear_client(sc);
1929 struct utvfu_softc *sc = v;
1931 if (usbd_is_dying(sc->sc_udev))
1934 DPRINTF(1, "%s %s\n", DEVNAME(sc), __func__);
1942 DPRINTF(1, "%s %s: cp->un.ord=%d\n", DEVNAME(sc), __func__, cp->un.ord);
1950 struct utvfu_softc *sc = v;
1952 if (usbd_is_dying(sc->sc_udev))
1955 DPRINTF(1, "%s %s\n", DEVNAME(sc), __func__);
1963 DPRINTF(1, "%s %s: cp->un.ord=%d\n", DEVNAME(sc), __func__, cp->un.ord);
1971 struct utvfu_softc *sc = v;
1973 if (usbd_is_dying(sc->sc_udev))
1976 DPRINTF(1, "%s %s\n", DEVNAME(sc), __func__);
2006 struct utvfu_softc *sc = v;
2008 if (usbd_is_dying(sc->sc_udev))
2011 rw_enter_write(&sc->sc_audio.rwlock);
2013 sc->sc_audio.intr_arg = arg;
2014 sc->sc_audio.intr = intr;
2015 sc->sc_audio.start = start;
2016 sc->sc_audio.end = end;
2017 sc->sc_audio.cur = start;
2018 sc->sc_audio.blksize = blksize;
2020 rw_exit_write(&sc->sc_audio.rwlock);
2023 DEVNAME(sc), __func__, start, end,
2026 return utvfu_audio_start(sc);
2030 utvfu_audio_start(struct utvfu_softc *sc)
2032 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
2034 if (ISSET(sc->sc_flags, UTVFU_FLAG_AS_RUNNING))
2037 utvfu_audio_start_chip(sc);
2039 if (utvfu_as_init(sc) != 0)
2041 if (sc->sc_audio.iface.pipeh == NULL) {
2042 if (utvfu_as_open(sc) != USBD_NORMAL_COMPLETION)
2046 return utvfu_as_start_bulk(sc);
2050 utvfu_audio_stop(struct utvfu_softc *sc)
2052 DPRINTF(1, "%s: %s\n", DEVNAME(sc), __func__);
2054 utvfu_audio_stop_chip(sc);
2055 utvfu_as_free(sc);