Lines Matching +full:0 +full:x1032

95 static int uaudio_default_rate = 0;		/* use rate list */
96 static int uaudio_default_bits = 0; /* use default sample size */
97 static int uaudio_default_channels = 0; /* use default */
101 static SYSCTL_NODE(_hw_usb, OID_AUTO, uaudio, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
104 &uaudio_handle_hid, 0, "uaudio handles any HID volume/mute keys, if set");
106 &uaudio_default_rate, 0, "uaudio default sample rate");
108 &uaudio_default_bits, 0, "uaudio default sample bits");
110 &uaudio_default_channels, 0, "uaudio default sample channels");
121 err = sysctl_handle_int(oidp, &val, 0, req); in uaudio_buffer_ms_sysctl()
123 if (err != 0 || req->newptr == NULL || val == uaudio_buffer_ms) in uaudio_buffer_ms_sysctl()
133 return (0); in uaudio_buffer_ms_sysctl()
136 CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, 0, sizeof(int),
144 &uaudio_debug, 0, "uaudio debug level");
146 #define uaudio_debug 0
266 #define CHAN_OP_NONE 0
290 #define UMIDI_ST_UNKNOWN 0 /* scan for command */
340 #define UAUDIO_HID_VALID 0x0001
341 #define UAUDIO_HID_HAS_ID 0x0002
342 #define UAUDIO_HID_HAS_VOLUME_UP 0x0004
343 #define UAUDIO_HID_HAS_VOLUME_DOWN 0x0008
344 #define UAUDIO_HID_HAS_MUTE 0x0010
351 #define UAUDIO_SPDIF_OUT 0x01 /* Enable S/PDIF output */
352 #define UAUDIO_SPDIF_OUT_48K 0x02 /* Out sample rate = 48K */
353 #define UAUDIO_SPDIF_OUT_96K 0x04 /* Out sample rate = 96K */
354 #define UAUDIO_SPDIF_IN_MIX 0x10 /* Input mix enable */
448 {0, 0, 0, NULL}
464 {0, 0, 0, NULL}
492 /* ==== USB audio v1.0 ==== */
518 /* ==== USB audio v2.0 ==== */
535 /* USB audio v1.0 and v2.0 */
572 [0] = {
576 .bufsize = 0, /* use "wMaxPacketSize * frames" */
586 .bufsize = 0, /* use "wMaxPacketSize * frames" */
596 .bufsize = 0, /* use "wMaxPacketSize * frames" */
605 [0] = {
609 .bufsize = 0, /* use "wMaxPacketSize * frames" */
619 .bufsize = 0, /* use "wMaxPacketSize * frames" */
629 .bufsize = 0, /* use "wMaxPacketSize * frames" */
638 [0] = {
640 .endpoint = 0x00, /* Control pipe */
650 [0x0] = 0, /* reserved */
651 [0x1] = 0, /* reserved */
652 [0x2] = 2, /* bytes */
653 [0x3] = 3, /* bytes */
654 [0x4] = 3, /* bytes */
655 [0x5] = 1, /* bytes */
656 [0x6] = 2, /* bytes */
657 [0x7] = 3, /* bytes */
658 [0x8] = 3, /* bytes */
659 [0x9] = 3, /* bytes */
660 [0xA] = 3, /* bytes */
661 [0xB] = 3, /* bytes */
662 [0xC] = 2, /* bytes */
663 [0xD] = 2, /* bytes */
664 [0xE] = 3, /* bytes */
665 [0xF] = 1, /* bytes */
695 .bufsize = 0, /* use wMaxPacketSize */
720 { USB_VPI(USB_VENDOR_YAMAHA, 0x1000, 0) }, /* UX256 */
721 { USB_VPI(USB_VENDOR_YAMAHA, 0x1001, 0) }, /* MU1000 */
722 { USB_VPI(USB_VENDOR_YAMAHA, 0x1002, 0) }, /* MU2000 */
723 { USB_VPI(USB_VENDOR_YAMAHA, 0x1003, 0) }, /* MU500 */
724 { USB_VPI(USB_VENDOR_YAMAHA, 0x1004, 3) }, /* UW500 */
725 { USB_VPI(USB_VENDOR_YAMAHA, 0x1005, 0) }, /* MOTIF6 */
726 { USB_VPI(USB_VENDOR_YAMAHA, 0x1006, 0) }, /* MOTIF7 */
727 { USB_VPI(USB_VENDOR_YAMAHA, 0x1007, 0) }, /* MOTIF8 */
728 { USB_VPI(USB_VENDOR_YAMAHA, 0x1008, 0) }, /* UX96 */
729 { USB_VPI(USB_VENDOR_YAMAHA, 0x1009, 0) }, /* UX16 */
730 { USB_VPI(USB_VENDOR_YAMAHA, 0x100a, 3) }, /* EOS BX */
731 { USB_VPI(USB_VENDOR_YAMAHA, 0x100c, 0) }, /* UC-MX */
732 { USB_VPI(USB_VENDOR_YAMAHA, 0x100d, 0) }, /* UC-KX */
733 { USB_VPI(USB_VENDOR_YAMAHA, 0x100e, 0) }, /* S08 */
734 { USB_VPI(USB_VENDOR_YAMAHA, 0x100f, 0) }, /* CLP-150 */
735 { USB_VPI(USB_VENDOR_YAMAHA, 0x1010, 0) }, /* CLP-170 */
736 { USB_VPI(USB_VENDOR_YAMAHA, 0x1011, 0) }, /* P-250 */
737 { USB_VPI(USB_VENDOR_YAMAHA, 0x1012, 0) }, /* TYROS */
738 { USB_VPI(USB_VENDOR_YAMAHA, 0x1013, 0) }, /* PF-500 */
739 { USB_VPI(USB_VENDOR_YAMAHA, 0x1014, 0) }, /* S90 */
740 { USB_VPI(USB_VENDOR_YAMAHA, 0x1015, 0) }, /* MOTIF-R */
741 { USB_VPI(USB_VENDOR_YAMAHA, 0x1016, 0) }, /* MDP-5 */
742 { USB_VPI(USB_VENDOR_YAMAHA, 0x1017, 0) }, /* CVP-204 */
743 { USB_VPI(USB_VENDOR_YAMAHA, 0x1018, 0) }, /* CVP-206 */
744 { USB_VPI(USB_VENDOR_YAMAHA, 0x1019, 0) }, /* CVP-208 */
745 { USB_VPI(USB_VENDOR_YAMAHA, 0x101a, 0) }, /* CVP-210 */
746 { USB_VPI(USB_VENDOR_YAMAHA, 0x101b, 0) }, /* PSR-1100 */
747 { USB_VPI(USB_VENDOR_YAMAHA, 0x101c, 0) }, /* PSR-2100 */
748 { USB_VPI(USB_VENDOR_YAMAHA, 0x101d, 0) }, /* CLP-175 */
749 { USB_VPI(USB_VENDOR_YAMAHA, 0x101e, 0) }, /* PSR-K1 */
750 { USB_VPI(USB_VENDOR_YAMAHA, 0x101f, 0) }, /* EZ-J24 */
751 { USB_VPI(USB_VENDOR_YAMAHA, 0x1020, 0) }, /* EZ-250i */
752 { USB_VPI(USB_VENDOR_YAMAHA, 0x1021, 0) }, /* MOTIF ES 6 */
753 { USB_VPI(USB_VENDOR_YAMAHA, 0x1022, 0) }, /* MOTIF ES 7 */
754 { USB_VPI(USB_VENDOR_YAMAHA, 0x1023, 0) }, /* MOTIF ES 8 */
755 { USB_VPI(USB_VENDOR_YAMAHA, 0x1024, 0) }, /* CVP-301 */
756 { USB_VPI(USB_VENDOR_YAMAHA, 0x1025, 0) }, /* CVP-303 */
757 { USB_VPI(USB_VENDOR_YAMAHA, 0x1026, 0) }, /* CVP-305 */
758 { USB_VPI(USB_VENDOR_YAMAHA, 0x1027, 0) }, /* CVP-307 */
759 { USB_VPI(USB_VENDOR_YAMAHA, 0x1028, 0) }, /* CVP-309 */
760 { USB_VPI(USB_VENDOR_YAMAHA, 0x1029, 0) }, /* CVP-309GP */
761 { USB_VPI(USB_VENDOR_YAMAHA, 0x102a, 0) }, /* PSR-1500 */
762 { USB_VPI(USB_VENDOR_YAMAHA, 0x102b, 0) }, /* PSR-3000 */
763 { USB_VPI(USB_VENDOR_YAMAHA, 0x102e, 0) }, /* ELS-01/01C */
764 { USB_VPI(USB_VENDOR_YAMAHA, 0x1030, 0) }, /* PSR-295/293 */
765 { USB_VPI(USB_VENDOR_YAMAHA, 0x1031, 0) }, /* DGX-205/203 */
766 { USB_VPI(USB_VENDOR_YAMAHA, 0x1032, 0) }, /* DGX-305 */
767 { USB_VPI(USB_VENDOR_YAMAHA, 0x1033, 0) }, /* DGX-505 */
768 { USB_VPI(USB_VENDOR_YAMAHA, 0x1034, 0) }, /* NULL */
769 { USB_VPI(USB_VENDOR_YAMAHA, 0x1035, 0) }, /* NULL */
770 { USB_VPI(USB_VENDOR_YAMAHA, 0x1036, 0) }, /* NULL */
771 { USB_VPI(USB_VENDOR_YAMAHA, 0x1037, 0) }, /* NULL */
772 { USB_VPI(USB_VENDOR_YAMAHA, 0x1038, 0) }, /* NULL */
773 { USB_VPI(USB_VENDOR_YAMAHA, 0x1039, 0) }, /* NULL */
774 { USB_VPI(USB_VENDOR_YAMAHA, 0x103a, 0) }, /* NULL */
775 { USB_VPI(USB_VENDOR_YAMAHA, 0x103b, 0) }, /* NULL */
776 { USB_VPI(USB_VENDOR_YAMAHA, 0x103c, 0) }, /* NULL */
777 { USB_VPI(USB_VENDOR_YAMAHA, 0x103d, 0) }, /* NULL */
778 { USB_VPI(USB_VENDOR_YAMAHA, 0x103e, 0) }, /* NULL */
779 { USB_VPI(USB_VENDOR_YAMAHA, 0x103f, 0) }, /* NULL */
780 { USB_VPI(USB_VENDOR_YAMAHA, 0x1040, 0) }, /* NULL */
781 { USB_VPI(USB_VENDOR_YAMAHA, 0x1041, 0) }, /* NULL */
782 { USB_VPI(USB_VENDOR_YAMAHA, 0x1042, 0) }, /* NULL */
783 { USB_VPI(USB_VENDOR_YAMAHA, 0x1043, 0) }, /* NULL */
784 { USB_VPI(USB_VENDOR_YAMAHA, 0x1044, 0) }, /* NULL */
785 { USB_VPI(USB_VENDOR_YAMAHA, 0x1045, 0) }, /* NULL */
786 { USB_VPI(USB_VENDOR_YAMAHA, 0x104e, 0) }, /* NULL */
787 { USB_VPI(USB_VENDOR_YAMAHA, 0x104f, 0) }, /* NULL */
788 { USB_VPI(USB_VENDOR_YAMAHA, 0x1050, 0) }, /* NULL */
789 { USB_VPI(USB_VENDOR_YAMAHA, 0x1051, 0) }, /* NULL */
790 { USB_VPI(USB_VENDOR_YAMAHA, 0x1052, 0) }, /* NULL */
791 { USB_VPI(USB_VENDOR_YAMAHA, 0x1053, 0) }, /* NULL */
792 { USB_VPI(USB_VENDOR_YAMAHA, 0x1054, 0) }, /* NULL */
793 { USB_VPI(USB_VENDOR_YAMAHA, 0x1055, 0) }, /* NULL */
794 { USB_VPI(USB_VENDOR_YAMAHA, 0x1056, 0) }, /* NULL */
795 { USB_VPI(USB_VENDOR_YAMAHA, 0x1057, 0) }, /* NULL */
796 { USB_VPI(USB_VENDOR_YAMAHA, 0x1058, 0) }, /* NULL */
797 { USB_VPI(USB_VENDOR_YAMAHA, 0x1059, 0) }, /* NULL */
798 { USB_VPI(USB_VENDOR_YAMAHA, 0x105a, 0) }, /* NULL */
799 { USB_VPI(USB_VENDOR_YAMAHA, 0x105b, 0) }, /* NULL */
800 { USB_VPI(USB_VENDOR_YAMAHA, 0x105c, 0) }, /* NULL */
801 { USB_VPI(USB_VENDOR_YAMAHA, 0x105d, 0) }, /* NULL */
802 { USB_VPI(USB_VENDOR_YAMAHA, 0x1503, 3) }, /* MOX6/MOX8 */
803 { USB_VPI(USB_VENDOR_YAMAHA, 0x2000, 0) }, /* DGP-7 */
804 { USB_VPI(USB_VENDOR_YAMAHA, 0x2001, 0) }, /* DGP-5 */
805 { USB_VPI(USB_VENDOR_YAMAHA, 0x2002, 0) }, /* NULL */
806 { USB_VPI(USB_VENDOR_YAMAHA, 0x2003, 0) }, /* NULL */
807 { USB_VPI(USB_VENDOR_YAMAHA, 0x5000, 0) }, /* CS1D */
808 { USB_VPI(USB_VENDOR_YAMAHA, 0x5001, 0) }, /* DSP1D */
809 { USB_VPI(USB_VENDOR_YAMAHA, 0x5002, 0) }, /* DME32 */
810 { USB_VPI(USB_VENDOR_YAMAHA, 0x5003, 0) }, /* DM2000 */
811 { USB_VPI(USB_VENDOR_YAMAHA, 0x5004, 0) }, /* 02R96 */
812 { USB_VPI(USB_VENDOR_YAMAHA, 0x5005, 0) }, /* ACU16-C */
813 { USB_VPI(USB_VENDOR_YAMAHA, 0x5006, 0) }, /* NHB32-C */
814 { USB_VPI(USB_VENDOR_YAMAHA, 0x5007, 0) }, /* DM1000 */
815 { USB_VPI(USB_VENDOR_YAMAHA, 0x5008, 0) }, /* 01V96 */
816 { USB_VPI(USB_VENDOR_YAMAHA, 0x5009, 0) }, /* SPX2000 */
817 { USB_VPI(USB_VENDOR_YAMAHA, 0x500a, 0) }, /* PM5D */
818 { USB_VPI(USB_VENDOR_YAMAHA, 0x500b, 0) }, /* DME64N */
819 { USB_VPI(USB_VENDOR_YAMAHA, 0x500c, 0) }, /* DME24N */
820 { USB_VPI(USB_VENDOR_YAMAHA, 0x500d, 0) }, /* NULL */
821 { USB_VPI(USB_VENDOR_YAMAHA, 0x500e, 0) }, /* NULL */
822 { USB_VPI(USB_VENDOR_YAMAHA, 0x500f, 0) }, /* NULL */
823 { USB_VPI(USB_VENDOR_YAMAHA, 0x7000, 0) }, /* DTX */
824 { USB_VPI(USB_VENDOR_YAMAHA, 0x7010, 0) }, /* UB99 */
841 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_get_child_index_by_dev()
846 return (0); in uaudio_get_child_index_by_dev()
854 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_get_child_index_by_chan()
860 return (0); in uaudio_get_child_index_by_chan()
874 sizeof(uaudio_vendor_midi), uaa) == 0) { in uaudio_probe()
880 usb_test_quirk(uaa, UQ_AU_VENDOR_CLASS) == 0) in uaudio_probe()
912 {0x20, 0x20, 0x00, 0}, in uaudio_set_spdif_cm6206()
913 {0x20, 0x30, 0x02, 1} in uaudio_set_spdif_cm6206()
918 cmd[1][1] = 0x00; in uaudio_set_spdif_cm6206()
920 cmd[1][1] = 0x02; in uaudio_set_spdif_cm6206()
923 cmd[0][1] = 0x60; /* 96K: 3'b110 */ in uaudio_set_spdif_cm6206()
926 cmd[1][1] = 0x03; /* SPDIFMIX */ in uaudio_set_spdif_cm6206()
928 for (i = 0; i < 2; i++) { in uaudio_set_spdif_cm6206()
930 cmd[i], sizeof(cmd[0]), in uaudio_set_spdif_cm6206()
931 sc->sc_mixer_iface_index, UHID_OUTPUT_REPORT, 0) != 0) { in uaudio_set_spdif_cm6206()
935 return (0); in uaudio_set_spdif_cm6206()
941 return (0); in uaudio_set_spdif_dummy()
955 if (iface->alt_index == 0) { in uaudio_force_power_save()
960 err = usbd_set_alt_interface_index(sc->sc_udev, iface_index, 0); in uaudio_force_power_save()
977 sc->sc_config_msg[0].hdr.pm_callback = &uaudio_configure_msg; in uaudio_attach()
978 sc->sc_config_msg[0].sc = sc; in uaudio_attach()
1017 sc->sc_audio_rev & 0xff); in uaudio_attach()
1019 if (sc->sc_mixer_count == 0) { in uaudio_attach()
1031 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_attach()
1034 if (sc->sc_play_chan[i].num_alt <= 0) in uaudio_attach()
1043 sc->sc_play_chan[i].usb_alt[0].iface_index); in uaudio_attach()
1049 for (x = 0; x != sc->sc_play_chan[i].num_alt; x++) { in uaudio_attach()
1056 (x == 0) ? " (selected)" : ""); in uaudio_attach()
1059 if (i == 0) in uaudio_attach()
1062 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_attach()
1065 if (sc->sc_rec_chan[i].num_alt <= 0) in uaudio_attach()
1074 sc->sc_rec_chan[i].usb_alt[0].iface_index); in uaudio_attach()
1080 for (x = 0; x != sc->sc_rec_chan[i].num_alt; x++) { in uaudio_attach()
1087 (x == 0) ? " (selected)" : ""); in uaudio_attach()
1090 if (i == 0) in uaudio_attach()
1093 if (sc->sc_midi_chan.valid == 0) { in uaudio_attach()
1095 sizeof(uaudio_vendor_midi), uaa) == 0) { in uaudio_attach()
1098 sc->sc_midi_chan.iface_alt_index = 0; in uaudio_attach()
1122 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_attach()
1123 if (sc->sc_play_chan[i].num_alt <= 0 && in uaudio_attach()
1124 sc->sc_rec_chan[i].num_alt <= 0 && in uaudio_attach()
1125 sc->sc_child[i].mix_info == 0) in uaudio_attach()
1141 if (uaudio_hid_probe(sc, uaa) == 0) { in uaudio_attach()
1153 UAUDIO_SPDIF_OUT | UAUDIO_SPDIF_OUT_48K) != 0) { in uaudio_attach()
1156 return (0); /* success */ in uaudio_attach()
1182 if (sc->sc_play_chan[i].num_alt > 0 && in uaudio_attach_sub()
1183 (sc->sc_child[i].mix_info & SOUND_MASK_PCM) == 0) { in uaudio_attach_sub()
1213 if (sc->sc_play_chan[i].num_alt > 0) { in uaudio_attach_sub()
1219 if (sc->sc_rec_chan[i].num_alt > 0) { in uaudio_attach_sub()
1233 0, "Feedback sample rate in Hz"); in uaudio_attach_sub()
1235 return (0); /* success */ in uaudio_attach_sub()
1247 int error = 0; in uaudio_detach_sub()
1270 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_detach()
1275 &sc->sc_config_msg[0], &sc->sc_config_msg[1]); in uaudio_detach()
1278 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_detach()
1285 if (bus_generic_detach(dev) != 0) { in uaudio_detach()
1296 (void) sc->sc_set_spdif_fn(sc, 0); in uaudio_detach()
1298 return (0); in uaudio_detach()
1320 if (fps >= 1000 && int_frames > 0 && int_frames <= UAUDIO_NFRAMES) { in uaudio_get_buffer_ms()
1371 if (chan->num_alt <= 0) in uaudio_configure_msg_sub()
1402 err = usbd_set_alt_interface_index(sc->sc_udev, chan->iface_index, 0); in uaudio_configure_msg_sub()
1442 for (x = 0; x != 256; x++) { in uaudio_configure_msg_sub()
1492 fps_shift = usbd_xfer_get_fps_shift(chan->xfer[0]); in uaudio_configure_msg_sub()
1499 chan->bytes_per_frame[0] = in uaudio_configure_msg_sub()
1507 chan->sample_curr = 0; in uaudio_configure_msg_sub()
1521 if (chan->intr_frames == 0) { in uaudio_configure_msg_sub()
1532 usbd_transfer_start(chan->xfer[0]); in uaudio_configure_msg_sub()
1551 for (i = 0; i != UAUDIO_MAX_CHILD; i++) { in uaudio_configure_msg()
1568 "bEndpointAddress=%d bmAttributes=0x%x \n" in uaudio_chan_dump_ep_desc()
1574 UEP_HAS_REFRESH(ed) ? ed->bRefresh : 0, in uaudio_chan_dump_ep_desc()
1575 UEP_HAS_SYNCADDR(ed) ? ed->bSynchAddress : 0); in uaudio_chan_dump_ep_desc()
1637 USETW2(req.wValue, UA20_CS_SAM_FREQ_CONTROL, 0); in uaudio20_check_rate()
1648 if (error != 0 || actlen < 2) { in uaudio20_check_rate()
1669 if (error != 0) { in uaudio20_check_rate()
1680 if (error != 0 || actlen < 2) in uaudio20_check_rate()
1693 for (x = 0; x != rates; x++) { in uaudio20_check_rate()
1698 if (res == 0) { in uaudio20_check_rate()
1712 (((rate - min) % res) == 0)) { in uaudio20_check_rate()
1713 return (0); in uaudio20_check_rate()
1725 for (i = 0; i != UAUDIO_MAX_CHILD; i++, chan++) { in uaudio_get_chan()
1726 if (chan->num_alt == 0) { in uaudio_get_chan()
1752 uint16_t curidx = 0xFFFF; in uaudio_chan_fill_info_sub()
1753 uint16_t lastidx = 0xFFFF; in uaudio_chan_fill_info_sub()
1754 uint16_t alt_index = 0; in uaudio_chan_fill_info_sub()
1755 uint16_t audio_rev = 0; in uaudio_chan_fill_info_sub()
1760 uint8_t audio_if = 0; in uaudio_chan_fill_info_sub()
1761 uint8_t midi_if = 0; in uaudio_chan_fill_info_sub()
1772 alt_index = 0; in uaudio_chan_fill_info_sub()
1780 (id->bInterfaceSubClass == 0) && in uaudio_chan_fill_info_sub()
1781 (id->bInterfaceProtocol == 0) && in uaudio_chan_fill_info_sub()
1782 (alt_index == 0) && in uaudio_chan_fill_info_sub()
1793 (sc->sc_uq_au_vendor_class != 0))); in uaudio_chan_fill_info_sub()
1795 if ((uma_if_class != 0) && in uaudio_chan_fill_info_sub()
1799 audio_if = 0; in uaudio_chan_fill_info_sub()
1802 if ((uma_if_class != 0) && in uaudio_chan_fill_info_sub()
1809 if ((sc->sc_midi_chan.valid == 0) && in uaudio_chan_fill_info_sub()
1816 midi_if = 0; in uaudio_chan_fill_info_sub()
1829 if (alt_index == 0 && curidx != sc->sc_mixer_iface_index && in uaudio_chan_fill_info_sub()
1830 (id->bInterfaceClass == UICLASS_AUDIO || audio_if != 0 || in uaudio_chan_fill_info_sub()
1831 midi_if != 0)) { in uaudio_chan_fill_info_sub()
1837 if (audio_if == 0) { in uaudio_chan_fill_info_sub()
1838 if (midi_if == 0) { in uaudio_chan_fill_info_sub()
1864 if ((acdp != NULL || sc->sc_uq_au_vendor_class != 0) && in uaudio_chan_fill_info_sub()
1880 if ((acdp != NULL || sc->sc_uq_au_vendor_class != 0) && in uaudio_chan_fill_info_sub()
1900 ((asf1d.v1->bSamFreqType == 0) ? 6 : in uaudio_chan_fill_info_sub()
1919 if ((acdp != NULL || sc->sc_uq_au_vendor_class != 0) && in uaudio_chan_fill_info_sub()
1959 p_fmt->wFormat != 0; p_fmt++) { in uaudio_chan_fill_info_sub()
1965 if (p_fmt->wFormat == 0) { in uaudio_chan_fill_info_sub()
1970 for (x = 0; x != 256; x++) { in uaudio_chan_fill_info_sub()
1999 if (asf1d.v1->bSamFreqType == 0) { in uaudio_chan_fill_info_sub()
2008 for (x = 0; x < asf1d.v1->bSamFreqType; x++) { in uaudio_chan_fill_info_sub()
2020 p_fmt->wFormat != 0; p_fmt++) { in uaudio_chan_fill_info_sub()
2025 if (p_fmt->wFormat == 0) { in uaudio_chan_fill_info_sub()
2037 chan = uaudio_get_chan(sc, (ep_dir == UE_DIR_OUT) ? &sc->sc_play_chan[0] : in uaudio_chan_fill_info_sub()
2038 &sc->sc_rec_chan[0], curidx); in uaudio_chan_fill_info_sub()
2052 chan->set_alt = 0; in uaudio_chan_fill_info_sub()
2061 "bits = %d, format = %s, ep 0x%02x, chan %p\n", rate, channels, in uaudio_chan_fill_info_sub()
2093 format = SND_FORMAT(format, chan_alt->channels, 0); in uaudio_chan_fill_info_sub()
2105 if (temp_fmt != 0) in uaudio_chan_fill_info_sub()
2111 if (format == 0) { in uaudio_chan_fill_info_sub()
2118 if (chan->pcm_format[0] != format) { in uaudio_chan_fill_info_sub()
2131 chan->pcm_cap.fmtlist[0] = format; in uaudio_chan_fill_info_sub()
2137 if (rate < chan->pcm_cap.minspeed || chan->pcm_cap.minspeed == 0) in uaudio_chan_fill_info_sub()
2139 if (rate > chan->pcm_cap.maxspeed || chan->pcm_cap.maxspeed == 0) in uaudio_chan_fill_info_sub()
2171 0
2186 if ((bits == 0) || (bits > UAUDIO_BITS_MAX)) { in uaudio_chan_fill_info()
2211 if (channels == 0) in uaudio_chan_fill_info()
2219 if (rate != 0) in uaudio_chan_fill_info()
2223 for (z = 0; uaudio_rate_list[z]; z++) { in uaudio_chan_fill_info()
2268 if (nframes == 0) in uaudio_chan_play_sync_callback()
2270 len = usbd_xfer_frame_len(xfer, 0); in uaudio_chan_play_sync_callback()
2271 if (len == 0) in uaudio_chan_play_sync_callback()
2276 memset(buf, 0, sizeof(buf)); in uaudio_chan_play_sync_callback()
2278 pc = usbd_xfer_get_frame(xfer, 0); in uaudio_chan_play_sync_callback()
2279 usbd_copy_out(pc, 0, buf, len); in uaudio_chan_play_sync_callback()
2283 DPRINTF("Value = 0x%08x\n", (int)temp); in uaudio_chan_play_sync_callback()
2288 temp &= 0x0fffffff; in uaudio_chan_play_sync_callback()
2292 if (temp == 0) in uaudio_chan_play_sync_callback()
2313 if (ch->priv_sc->sc_rec_chan[i].num_alt == 0) { in uaudio_chan_play_sync_callback()
2320 * second. The USB v2.0 specification also in uaudio_chan_play_sync_callback()
2339 if (ch->priv_sc->sc_rec_chan[i].num_alt != 0 && in uaudio_chan_play_sync_callback()
2340 uaudio_debug == 0) in uaudio_chan_play_sync_callback()
2343 usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_framelen(xfer)); in uaudio_chan_play_sync_callback()
2375 if (ch->running == 0 || ch->start == ch->end) { in uaudio_chan_play_callback()
2385 if (ch_rec->num_alt == 0) in uaudio_chan_play_callback()
2402 ch_rec->jitter_curr = 0; in uaudio_chan_play_callback()
2403 ch_rec->jitter_rem = 0; in uaudio_chan_play_callback()
2407 ch->jitter_curr = 0; in uaudio_chan_play_callback()
2408 ch->jitter_rem = 0; in uaudio_chan_play_callback()
2423 uaudio_chan_is_async(ch, ch->cur_alt) != 0) { in uaudio_chan_play_callback()
2442 ch_rec->jitter_curr = 0; in uaudio_chan_play_callback()
2443 ch_rec->jitter_rem = 0; in uaudio_chan_play_callback()
2478 total = 0; in uaudio_chan_play_callback()
2481 for (n = 0; n != blockcount; n++) { in uaudio_chan_play_callback()
2489 frame_len = ch->bytes_per_frame[0]; in uaudio_chan_play_callback()
2493 if (ch->jitter_curr > 0 && in uaudio_chan_play_callback()
2498 } else if (ch->jitter_curr < 0 && in uaudio_chan_play_callback()
2510 offset = 0; in uaudio_chan_play_callback()
2512 pc = usbd_xfer_get_frame(xfer, 0); in uaudio_chan_play_callback()
2513 while (total > 0) { in uaudio_chan_play_callback()
2569 offset0 = 0; in uaudio_chan_record_callback()
2570 pc = usbd_xfer_get_frame(xfer, 0); in uaudio_chan_record_callback()
2576 expected_bytes = (ch->intr_frames * ch->bytes_per_frame[0]) + in uaudio_chan_record_callback()
2578 (ch->bytes_per_frame[1] - ch->bytes_per_frame[0])); in uaudio_chan_record_callback()
2586 for (n = 0; n != nframes; n++) { in uaudio_chan_record_callback()
2598 if (ch->running == 0 || ch->cur_alt != ch->set_alt) in uaudio_chan_record_callback()
2602 while (len > 0) { in uaudio_chan_record_callback()
2636 if (ch->running != 0) in uaudio_chan_record_callback()
2644 for (n = 0; n != nframes; n++) in uaudio_chan_record_callback()
2671 buf_size = 0; in uaudio_chan_init()
2672 for (x = 0; x != ch->num_alt; x++) { in uaudio_chan_init()
2684 if (sndbuf_setup(b, ch->buf, buf_size) != 0) in uaudio_chan_init()
2713 ch->num_alt = 0; in uaudio_chan_free()
2715 return (0); in uaudio_chan_free()
2741 for (x = 0, y = 1; y < ch->num_alt; y++) { in uaudio_chan_set_param_speed()
2774 .ext = 0,
2777 [0] = {
2794 .members = 0
2798 .offset = { 1, 0, -1, -1, -1, -1, -1, -1, -1,
2809 if (sc != NULL && sc->sc_uq_audio_swap_lr != 0 && in uaudio_chan_getmatrix()
2819 DPRINTF("Selecting format 0x%08x\n", (unsigned int)format); in uaudio_chan_set_param_format()
2820 return (0); in uaudio_chan_set_param_format()
2841 &sc->sc_config_msg[0], &sc->sc_config_msg[1]); in uaudio_chan_reconfigure()
2847 return (pchan->num_alt > 0 && in uaudio_chan_need_both()
2848 pchan->running != 0 && in uaudio_chan_need_both()
2849 uaudio_chan_is_async(pchan, pchan->set_alt) != 0 && in uaudio_chan_need_both()
2850 rchan->num_alt > 0 && in uaudio_chan_need_both()
2851 rchan->running == 0); in uaudio_chan_need_both()
2857 return (pchan->num_alt > 0 && in uaudio_chan_need_none()
2858 pchan->running == 0 && in uaudio_chan_need_none()
2859 rchan->num_alt > 0 && in uaudio_chan_need_none()
2860 rchan->running == 0); in uaudio_chan_need_none()
2873 if (ch->running == 0) { in uaudio_chan_start()
2915 if (ch->running != 0) { in uaudio_chan_stop()
2917 ch->running = 0; in uaudio_chan_stop()
2955 int temp = 0; in uaudio_mixer_sysctl_handler()
2956 int chan = 0; in uaudio_mixer_sysctl_handler()
2961 if (sc->sc_child[0].mixer_lock == NULL) in uaudio_mixer_sysctl_handler()
2966 mtx_lock(sc->sc_child[0].mixer_lock); in uaudio_mixer_sysctl_handler()
2968 for (chan = 0; chan != (int)pmc->nchan; chan++) { in uaudio_mixer_sysctl_handler()
2977 mtx_unlock(sc->sc_child[0].mixer_lock); in uaudio_mixer_sysctl_handler()
2979 error = sysctl_handle_int(oidp, &temp, 0, req); in uaudio_mixer_sysctl_handler()
2980 if (error != 0 || req->newptr == NULL) in uaudio_mixer_sysctl_handler()
2985 mtx_lock(sc->sc_child[0].mixer_lock); in uaudio_mixer_sysctl_handler()
2993 usbd_transfer_start(sc->sc_mixer_xfer[0]); in uaudio_mixer_sysctl_handler()
2995 mtx_unlock(sc->sc_child[0].mixer_lock); in uaudio_mixer_sysctl_handler()
2997 return (0); in uaudio_mixer_sysctl_handler()
3022 if (index != 0) in uaudio_mixer_register_sysctl()
3032 for (n = 0, pmc = sc->sc_mixer_root; pmc != NULL; in uaudio_mixer_register_sysctl()
3034 for (chan = 0; chan < pmc->nchan; chan++) { in uaudio_mixer_register_sysctl()
3060 OID_AUTO, "min", CTLFLAG_RD, 0, pmc->minval, in uaudio_mixer_register_sysctl()
3065 OID_AUTO, "max", CTLFLAG_RD, 0, pmc->maxval, in uaudio_mixer_register_sysctl()
3070 OID_AUTO, "desc", CTLFLAG_RD, pmc->desc, 0, in uaudio_mixer_register_sysctl()
3084 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3086 MIX(sc).wValue[0] = MAKE_WORD(8, 0); in uaudio_mixer_controls_create_ftu()
3090 MIX(sc).minval = 0; in uaudio_mixer_controls_create_ftu()
3094 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3098 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3101 for (chx = 0; chx != 8; chx++) { in uaudio_mixer_controls_create_ftu()
3102 for (chy = 0; chy != 8; chy++) { in uaudio_mixer_controls_create_ftu()
3103 MIX(sc).wValue[0] = MAKE_WORD(chx + 1, chy + 1); in uaudio_mixer_controls_create_ftu()
3108 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3109 MIX(sc).val_default = 0; in uaudio_mixer_controls_create_ftu()
3115 MIX(sc).wValue[0] = MAKE_WORD(chx + 1, chy + 1 + 8); in uaudio_mixer_controls_create_ftu()
3120 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3121 MIX(sc).val_default = (chx == chy) ? 2 : 0; in uaudio_mixer_controls_create_ftu()
3129 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3131 MIX(sc).wValue[0] = MAKE_WORD(2, 0); in uaudio_mixer_controls_create_ftu()
3136 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3137 MIX(sc).minval = 0; in uaudio_mixer_controls_create_ftu()
3138 MIX(sc).maxval = 0x7f; in uaudio_mixer_controls_create_ftu()
3139 MIX(sc).mul = 0x7f; in uaudio_mixer_controls_create_ftu()
3141 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3145 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3147 MIX(sc).wValue[0] = MAKE_WORD(3, 0); in uaudio_mixer_controls_create_ftu()
3152 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3153 MIX(sc).minval = 0; in uaudio_mixer_controls_create_ftu()
3154 MIX(sc).maxval = 0x7f00; in uaudio_mixer_controls_create_ftu()
3155 MIX(sc).mul = 0x7f00; in uaudio_mixer_controls_create_ftu()
3157 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3161 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3163 MIX(sc).wValue[0] = MAKE_WORD(4, 0); in uaudio_mixer_controls_create_ftu()
3168 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3169 MIX(sc).minval = 0; in uaudio_mixer_controls_create_ftu()
3170 MIX(sc).maxval = 0x7f; in uaudio_mixer_controls_create_ftu()
3171 MIX(sc).mul = 0x7f; in uaudio_mixer_controls_create_ftu()
3173 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3177 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3179 for (chy = 0; chy != 4; chy++) { in uaudio_mixer_controls_create_ftu()
3180 MIX(sc).wValue[0] = MAKE_WORD(7, chy + 1); in uaudio_mixer_controls_create_ftu()
3185 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3192 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_controls_create_ftu()
3195 for (chy = 0; chy != 8; chy++) { in uaudio_mixer_controls_create_ftu()
3196 MIX(sc).wValue[0] = MAKE_WORD(9, chy + 1); in uaudio_mixer_controls_create_ftu()
3201 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3207 MIX(sc).wValue[0] = MAKE_WORD(9, chy + 1 + 8); in uaudio_mixer_controls_create_ftu()
3212 MIX(sc).update[0] = 1; in uaudio_mixer_controls_create_ftu()
3226 if (sc->sc_child[0].mixer_lock == NULL) in uaudio_mixer_reload_all()
3229 mtx_lock(sc->sc_child[0].mixer_lock); in uaudio_mixer_reload_all()
3234 for (chan = 0; chan < pmc->nchan; chan++) in uaudio_mixer_reload_all()
3237 usbd_transfer_start(sc->sc_mixer_xfer[0]); in uaudio_mixer_reload_all()
3240 usbd_transfer_start(sc->sc_hid.xfer[0]); in uaudio_mixer_reload_all()
3241 mtx_unlock(sc->sc_child[0].mixer_lock); in uaudio_mixer_reload_all()
3257 for (ch = 0; ch < p_mc_new->nchan; ch++) { in uaudio_mixer_add_ctl_sub()
3268 /* 0% */ in uaudio_mixer_add_ctl_sub()
3283 mc->minval = 0; in uaudio_mixer_add_ctl()
3304 if (mc->mul == 0) in uaudio_mixer_add_ctl()
3320 for (i = 0; i < mc->nchan; i++) { in uaudio_mixer_add_ctl()
3321 DPRINTF("[mix] wValue=%04x\n", mc->wValue[0]); in uaudio_mixer_add_ctl()
3354 ichs = 0; in uaudio_mixer_add_mixer()
3355 for (i = 0; i < d0->bNrInPins; i++) { in uaudio_mixer_add_mixer()
3368 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_add_mixer()
3376 for (p = i = 0; i < d0->bNrInPins; i++) { in uaudio_mixer_add_mixer()
3379 mc = 0; in uaudio_mixer_add_mixer()
3380 for (c = 0; c < chs; c++) { in uaudio_mixer_add_mixer()
3381 mo = 0; in uaudio_mixer_add_mixer()
3382 for (o = 0; o < ochs; o++) { in uaudio_mixer_add_mixer()
3393 mc = 0; in uaudio_mixer_add_mixer()
3394 for (c = 0; c < chs; c++) { in uaudio_mixer_add_mixer()
3395 for (o = 0; o < ochs; o++) { in uaudio_mixer_add_mixer()
3431 ichs = 0; in uaudio20_mixer_add_mixer()
3432 for (i = 0; i < d0->bNrInPins; i++) { in uaudio20_mixer_add_mixer()
3445 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio20_mixer_add_mixer()
3453 for (p = i = 0; i < d0->bNrInPins; i++) { in uaudio20_mixer_add_mixer()
3456 mc = 0; in uaudio20_mixer_add_mixer()
3457 for (c = 0; c < chs; c++) { in uaudio20_mixer_add_mixer()
3458 mo = 0; in uaudio20_mixer_add_mixer()
3459 for (o = 0; o < ochs; o++) { in uaudio20_mixer_add_mixer()
3470 mc = 0; in uaudio20_mixer_add_mixer()
3471 for (c = 0; c < chs; c++) { in uaudio20_mixer_add_mixer()
3472 for (o = 0; o < ochs; o++) { in uaudio20_mixer_add_mixer()
3498 sizeof(reserve_feature) / sizeof(reserve_feature[0]); in uaudio_mixer_check_selectors()
3504 for (i = 0; i < MIX(sc).maxval; i++) { in uaudio_mixer_check_selectors()
3507 for (j = 0; j != reserve_max; j++) { in uaudio_mixer_check_selectors()
3514 for (i = 0; i < MIX(sc).maxval; i++) { in uaudio_mixer_check_selectors()
3522 for (k = 0; k != reserve_max; k++) { in uaudio_mixer_check_selectors()
3547 if (d->bNrInPins == 0) in uaudio_mixer_add_selector()
3550 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_add_selector()
3553 MIX(sc).wValue[0] = MAKE_WORD(0, 0); in uaudio_mixer_add_selector()
3562 if (i == 0 || in uaudio_mixer_add_selector()
3564 MIX(sc).desc, sizeof(MIX(sc).desc), i) != 0) { in uaudio_mixer_add_selector()
3565 MIX(sc).desc[0] = 0; in uaudio_mixer_add_selector()
3573 for (i = 0; i < MIX(sc).maxval; i++) { in uaudio_mixer_add_selector()
3594 if (d->bNrInPins == 0) in uaudio20_mixer_add_selector()
3597 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio20_mixer_add_selector()
3600 MIX(sc).wValue[0] = MAKE_WORD(0, 0); in uaudio20_mixer_add_selector()
3609 if (i == 0 || in uaudio20_mixer_add_selector()
3611 MIX(sc).desc, sizeof(MIX(sc).desc), i) != 0) { in uaudio20_mixer_add_selector()
3612 MIX(sc).desc[0] = 0; in uaudio20_mixer_add_selector()
3620 for (i = 0; i < MIX(sc).maxval; i++) { in uaudio20_mixer_add_selector()
3635 uint32_t temp = 0; in uaudio_mixer_feature_get_bmaControls()
3638 if (d->bControlSize > 0) { in uaudio_mixer_feature_get_bmaControls()
3667 if (d->bControlSize == 0) in uaudio_mixer_add_feature()
3670 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_add_feature()
3673 mmask = uaudio_mixer_feature_get_bmaControls(d, 0); in uaudio_mixer_add_feature()
3674 cmask = 0; in uaudio_mixer_add_feature()
3676 if (nchan == 0) in uaudio_mixer_add_feature()
3691 if (i == 0 || in uaudio_mixer_add_feature()
3693 MIX(sc).desc, sizeof(MIX(sc).desc), i) != 0) { in uaudio_mixer_add_feature()
3694 MIX(sc).desc[0] = 0; in uaudio_mixer_add_feature()
3703 DPRINTFN(5, "ctl=%d fumask=0x%04x\n", in uaudio_mixer_add_feature()
3708 MIX(sc).wValue[0] = MAKE_WORD(ctl, 0); in uaudio_mixer_add_feature()
3805 if (UGETDW(d->bmaControls[0]) == 0) in uaudio20_mixer_add_feature()
3808 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio20_mixer_add_feature()
3811 mmask = UGETDW(d->bmaControls[0]); in uaudio20_mixer_add_feature()
3812 cmask = 0; in uaudio20_mixer_add_feature()
3814 if (nchan == 0) in uaudio20_mixer_add_feature()
3824 i = d->bmaControls[nchan][0]; in uaudio20_mixer_add_feature()
3825 if (i == 0 || in uaudio20_mixer_add_feature()
3827 MIX(sc).desc, sizeof(MIX(sc).desc), i) != 0) { in uaudio20_mixer_add_feature()
3828 MIX(sc).desc[0] = 0; in uaudio20_mixer_add_feature()
3834 for (ctl = 3; ctl != 0; ctl <<= 2) { in uaudio20_mixer_add_feature()
3838 case (3 << 0): in uaudio20_mixer_add_feature()
3910 MIX(sc).wValue[0] = MAKE_WORD(what, 0); in uaudio20_mixer_add_feature()
3949 if (!(d1->bmControls[0] & UA_PROC_MASK(UD_MODE_SELECT_CONTROL))) { in uaudio_mixer_add_processing_updown()
3953 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_add_processing_updown()
3957 MIX(sc).wValue[0] = MAKE_WORD(UD_MODE_SELECT_CONTROL, 0); in uaudio_mixer_add_processing_updown()
3960 for (i = 0; i < ud->bNrModes; i++) { in uaudio_mixer_add_processing_updown()
3961 DPRINTFN(3, "i=%d bm=0x%x\n", i, UGETW(ud->waModes[i])); in uaudio_mixer_add_processing_updown()
3977 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_add_processing()
3984 if (d1->bControlSize == 0) { in uaudio_mixer_add_processing()
3987 if (d1->bmControls[0] & UA_PROC_ENABLE_MASK) { in uaudio_mixer_add_processing()
3990 MIX(sc).wValue[0] = MAKE_WORD(XX_ENABLE_CONTROL, 0); in uaudio_mixer_add_processing()
4025 if (d1->bControlSize == 0) { in uaudio_mixer_add_extension()
4028 if (d1->bmControls[0] & UA_EXT_ENABLE_MASK) { in uaudio_mixer_add_extension()
4029 memset(&MIX(sc), 0, sizeof(MIX(sc))); in uaudio_mixer_add_extension()
4033 MIX(sc).wValue[0] = MAKE_WORD(UA_EXT_ENABLE, 0); in uaudio_mixer_add_extension()
4332 for (i = 0; i < UAUDIO_RECURSE_LIMIT; i++) { /* avoid infinite loops */ in uaudio_mixer_get_cluster()
4340 r.wChannelConfig[0] = iot[id].u.it_v1->wChannelConfig[0]; in uaudio_mixer_get_cluster()
4356 if (iot[id].u.su_v1->bNrInPins > 0) { in uaudio_mixer_get_cluster()
4358 id = iot[id].u.su_v1->baSourceId[0]; in uaudio_mixer_get_cluster()
4384 memset(&r, 0, sizeof(r)); in uaudio_mixer_get_cluster()
4396 for (i = 0; i < UAUDIO_RECURSE_LIMIT; i++) { /* avoid infinite loops */ in uaudio20_mixer_get_cluster()
4404 r.bmChannelConfig[0] = iot[id].u.it_v2->bmChannelConfig[0]; in uaudio20_mixer_get_cluster()
4422 if (iot[id].u.su_v2->bNrInPins > 0) { in uaudio20_mixer_get_cluster()
4424 id = iot[id].u.su_v2->baSourceId[0]; in uaudio20_mixer_get_cluster()
4458 memset(&r, 0, sizeof(r)); in uaudio20_mixer_get_cluster()
4473 if (n == 0) in uaudio_mixer_foreach_input()
4492 if (n == 0) in uaudio_mixer_foreach_output()
4543 if (terminal_type == 0) { in uaudio_mixer_get_feature_by_tt()
4546 if (uat->terminal_type == 0) { in uaudio_mixer_get_feature_by_tt()
4568 DPRINTF("terminal_type=0x%04x RET=%d DEF=%d\n", in uaudio_mixer_get_feature_by_tt()
4577 uint16_t terminal_type_input = 0; in uaudio_mixer_determine_class()
4578 uint16_t terminal_type_output = 0; in uaudio_mixer_determine_class()
4580 uint8_t match = 0; in uaudio_mixer_determine_class()
4583 for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { in uaudio_mixer_determine_class()
4587 if (temp == 0) in uaudio_mixer_determine_class()
4591 else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) in uaudio_mixer_determine_class()
4595 for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { in uaudio_mixer_determine_class()
4599 if (temp == 0) in uaudio_mixer_determine_class()
4603 else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) in uaudio_mixer_determine_class()
4607 DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", in uaudio_mixer_determine_class()
4611 case 0: /* not connected to USB */ in uaudio_mixer_determine_class()
4612 if (terminal_type_output != 0) { in uaudio_mixer_determine_class()
4636 uint16_t terminal_type_input = 0; in uaudio20_mixer_determine_class()
4637 uint16_t terminal_type_output = 0; in uaudio20_mixer_determine_class()
4639 uint8_t match = 0; in uaudio20_mixer_determine_class()
4642 for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { in uaudio20_mixer_determine_class()
4646 if (temp == 0) in uaudio20_mixer_determine_class()
4650 else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) in uaudio20_mixer_determine_class()
4654 for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { in uaudio20_mixer_determine_class()
4658 if (temp == 0) in uaudio20_mixer_determine_class()
4662 else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) in uaudio20_mixer_determine_class()
4666 DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", in uaudio20_mixer_determine_class()
4670 case 0: /* not connected to USB */ in uaudio20_mixer_determine_class()
4671 if (terminal_type_output != 0) { in uaudio20_mixer_determine_class()
4695 const uint8_t max = sizeof(src->bit_output) / sizeof(src->bit_output[0]); in uaudio_mixer_merge_outputs()
4698 for (x = 0; x != max; x++) in uaudio_mixer_merge_outputs()
4711 for (n = 0; n < n_id; n++) { in uaudio_mixer_find_inputs_sub()
4788 for (n = 0; n < n_id; n++) { in uaudio20_mixer_find_inputs_sub()
4881 for (n = 0; n < n_id; n++) { in uaudio20_mixer_find_clocks_sub()
4911 info->is_input = 0; in uaudio20_mixer_find_clocks_sub()
4948 case 0: in uaudio20_mixer_find_clocks_sub()
4975 uint8_t ID_max = 0; /* inclusive */ in uaudio_mixer_fill_info()
5016 au = uaudio20_mixer_verify_desc(dp, 0); in uaudio_mixer_fill_info()
5018 au = uaudio_mixer_verify_desc(dp, 0); in uaudio_mixer_fill_info()
5042 sc->sc_mixer_clocks.recurse_level = 0; in uaudio_mixer_fill_info()
5106 DPRINTF("bad AC desc subtype=0x%02x\n", in uaudio_mixer_fill_info()
5143 DPRINTF("bad AC desc subtype=0x%02x\n", in uaudio_mixer_fill_info()
5163 if (mc->wValue[0] == -1) in uaudio_mixer_get()
5164 return (0); in uaudio_mixer_get()
5167 return (0); in uaudio_mixer_get()
5184 USETW(req.wValue, mc->wValue[0]); in uaudio_mixer_get()
5187 memset(data, 0, sizeof(data)); in uaudio_mixer_get()
5192 return (0); in uaudio_mixer_get()
5196 val = 0; in uaudio_mixer_get()
5200 val = (data[0] | (data[1] << 8)); in uaudio_mixer_get()
5212 val = 0; in uaudio_mixer_get()
5216 val = (data[0] | (data[1] << 8)); in uaudio_mixer_get()
5251 sc->sc_mixer_chan = 0; in uaudio_mixer_write_cfg_callback()
5252 repeat = 0; in uaudio_mixer_write_cfg_callback()
5282 buf[0] = (mc->wData[chan] & 0xFF); in uaudio_mixer_write_cfg_callback()
5283 buf[1] = (mc->wData[chan] >> 8) & 0xFF; in uaudio_mixer_write_cfg_callback()
5285 pc = usbd_xfer_get_frame(xfer, 0); in uaudio_mixer_write_cfg_callback()
5286 usbd_copy_in(pc, 0, &req, sizeof(req)); in uaudio_mixer_write_cfg_callback()
5288 usbd_copy_in(pc, 0, buf, len); in uaudio_mixer_write_cfg_callback()
5290 usbd_xfer_set_frame_len(xfer, 0, sizeof(req)); in uaudio_mixer_write_cfg_callback()
5300 sc->sc_mixer_chan = 0; in uaudio_mixer_write_cfg_callback()
5328 USETW2(req.wValue, SAMPLING_FREQ_CONTROL, 0); in uaudio_set_speed()
5331 data[0] = speed; in uaudio_set_speed()
5350 USETW2(req.wValue, UA20_CS_SAM_FREQ_CONTROL, 0); in uaudio20_set_speed()
5353 data[0] = speed; in uaudio20_set_speed()
5378 val = (val != 0); in uaudio_mixer_bsd2value()
5392 DPRINTFN(6, "type=0x%03x val=%d min=%d max=%d val=%d\n", in uaudio_mixer_bsd2value()
5408 usbd_transfer_start(sc->sc_mixer_xfer[0]); in uaudio_mixer_ctl_set()
5417 if (index != 0) in uaudio_mixer_init()
5429 for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) { in uaudio_mixer_init()
5448 if (i == 0 && in uaudio_mixer_init_sub()
5452 DPRINTFN(0, "could not allocate USB transfer for mixer!\n"); in uaudio_mixer_init_sub()
5456 if (sc->sc_play_chan[i].num_alt > 0 && in uaudio_mixer_init_sub()
5457 (sc->sc_child[i].mix_info & SOUND_MASK_VOLUME) == 0) { in uaudio_mixer_init_sub()
5463 return (0); in uaudio_mixer_init_sub()
5473 if (index == 0) in uaudio_mixer_uninit_sub()
5478 return (0); in uaudio_mixer_uninit_sub()
5489 if (index != 0) in uaudio_mixer_set()
5493 for (chan = 0; chan < mc->nchan; chan++) { in uaudio_mixer_set()
5495 chan == 0 ? left : right); in uaudio_mixer_set()
5510 if (index != 0) in uaudio_mixer_setrecsrc()
5511 return (0); in uaudio_mixer_setrecsrc()
5517 mask = 0; in uaudio_mixer_setrecsrc()
5518 for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) in uaudio_mixer_setrecsrc()
5522 if (temp == 0) in uaudio_mixer_setrecsrc()
5532 for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) { in uaudio_mixer_setrecsrc()
5535 uaudio_mixer_ctl_set(sc, mc, 0, i); in uaudio_mixer_setrecsrc()
5566 pos = 0; in umidi_bulk_read_callback()
5567 pc = usbd_xfer_get_frame(xfer, 0); in umidi_bulk_read_callback()
5573 cmd_len = umidi_cmd_to_len[buf[0] & 0xF]; in umidi_bulk_read_callback()
5575 cn = buf[0] >> 4; in umidi_bulk_read_callback()
5582 if ((cmd_len != 0) && (cn < chan->max_emb_jack) && in umidi_bulk_read_callback()
5583 (sub->read_open != 0)) { in umidi_bulk_read_callback()
5596 usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer)); in umidi_bulk_read_callback()
5618 * 0: No command
5626 if (b >= 0xf8) { in umidi_convert_to_usb()
5627 sub->temp_0[0] = p0 | 0x0f; in umidi_convert_to_usb()
5629 sub->temp_0[2] = 0; in umidi_convert_to_usb()
5630 sub->temp_0[3] = 0; in umidi_convert_to_usb()
5634 } else if (b >= 0xf0) { in umidi_convert_to_usb()
5636 case 0xf0: /* system exclusive begin */ in umidi_convert_to_usb()
5640 case 0xf1: /* MIDI time code */ in umidi_convert_to_usb()
5641 case 0xf3: /* song select */ in umidi_convert_to_usb()
5645 case 0xf2: /* song position pointer */ in umidi_convert_to_usb()
5649 case 0xf4: /* unknown */ in umidi_convert_to_usb()
5650 case 0xf5: /* unknown */ in umidi_convert_to_usb()
5653 case 0xf6: /* tune request */ in umidi_convert_to_usb()
5654 sub->temp_1[0] = p0 | 0x05; in umidi_convert_to_usb()
5655 sub->temp_1[1] = 0xf6; in umidi_convert_to_usb()
5656 sub->temp_1[2] = 0; in umidi_convert_to_usb()
5657 sub->temp_1[3] = 0; in umidi_convert_to_usb()
5662 case 0xf7: /* system exclusive end */ in umidi_convert_to_usb()
5665 sub->temp_1[0] = p0 | 0x05; in umidi_convert_to_usb()
5666 sub->temp_1[1] = 0xf7; in umidi_convert_to_usb()
5667 sub->temp_1[2] = 0; in umidi_convert_to_usb()
5668 sub->temp_1[3] = 0; in umidi_convert_to_usb()
5673 sub->temp_1[0] = p0 | 0x06; in umidi_convert_to_usb()
5674 sub->temp_1[2] = 0xf7; in umidi_convert_to_usb()
5675 sub->temp_1[3] = 0; in umidi_convert_to_usb()
5680 sub->temp_1[0] = p0 | 0x07; in umidi_convert_to_usb()
5681 sub->temp_1[3] = 0xf7; in umidi_convert_to_usb()
5689 } else if (b >= 0x80) { in umidi_convert_to_usb()
5691 if ((b >= 0xc0) && (b <= 0xdf)) { in umidi_convert_to_usb()
5696 } else { /* b < 0x80 */ in umidi_convert_to_usb()
5699 if (sub->temp_1[1] < 0xf0) { in umidi_convert_to_usb()
5702 p0 |= 0x02; in umidi_convert_to_usb()
5705 sub->temp_1[0] = p0; in umidi_convert_to_usb()
5707 sub->temp_1[3] = 0; in umidi_convert_to_usb()
5715 if (sub->temp_1[1] < 0xf0) { in umidi_convert_to_usb()
5719 p0 |= 0x03; in umidi_convert_to_usb()
5722 sub->temp_1[0] = p0; in umidi_convert_to_usb()
5735 sub->temp_1[0] = p0 | 0x04; in umidi_convert_to_usb()
5744 return (0); in umidi_convert_to_usb()
5774 nframes = 0; /* reset */ in umidi_bulk_write_callback()
5776 tr_any = 0; in umidi_bulk_write_callback()
5777 pc = usbd_xfer_get_frame(xfer, 0); in umidi_bulk_write_callback()
5786 &buf, 1, &actlen, 0); in umidi_bulk_write_callback()
5788 actlen = 0; in umidi_bulk_write_callback()
5794 DPRINTF("byte=0x%02x from FIFO %u\n", buf, in umidi_bulk_write_callback()
5798 DPRINTF("sub=0x%02x 0x%02x 0x%02x 0x%02x\n", in umidi_bulk_write_callback()
5799 sub->temp_cmd[0], sub->temp_cmd[1], in umidi_bulk_write_callback()
5806 if ((nframes >= UMIDI_TX_FRAMES) || (chan->single_command != 0)) in umidi_bulk_write_callback()
5815 chan->curr_cable = 0; in umidi_bulk_write_callback()
5818 if (tr_any == 0) in umidi_bulk_write_callback()
5820 tr_any = 0; in umidi_bulk_write_callback()
5824 if (nframes != 0) { in umidi_bulk_write_callback()
5826 usbd_xfer_set_frame_len(xfer, 0, 4 * nframes); in umidi_bulk_write_callback()
5851 for (n = 0; n < UMIDI_EMB_JACK_MAX; n++) { in umidi_sub_by_fifo()
5881 sub->read_open = 0; in umidi_stop_read()
5883 if (--(chan->read_open_refcount) == 0) { in umidi_stop_read()
5902 usb_fifo_get_data_linear(fifo, buf, 1, &actlen, 0); in umidi_start_write()
5903 } while (actlen > 0); in umidi_start_write()
5917 sub->write_open = 0; in umidi_stop_write()
5919 if (--(chan->write_open_refcount) == 0) { in umidi_stop_write()
5953 return (0); /* success */ in umidi_open()
5991 .basename[0] = "umidi",
6047 if (chan->single_command != 0) in umidi_probe()
6050 if ((chan->max_emb_jack == 0) || in umidi_probe()
6055 for (n = 0; n < chan->max_emb_jack; n++) { in umidi_probe()
6079 return (0); /* success */ in umidi_probe()
6092 for (n = 0; n < UMIDI_EMB_JACK_MAX; n++) in umidi_detach()
6105 return (0); in umidi_detach()
6112 const uint8_t *buffer = usbd_xfer_get_frame_buffer(xfer, 0); in uaudio_hid_rx_callback()
6123 if (actlen != 0 && in uaudio_hid_rx_callback()
6129 id = 0; in uaudio_hid_rx_callback()
6132 m = sc->sc_child[0].mixer_dev; in uaudio_hid_rx_callback()
6164 usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer)); in uaudio_hid_rx_callback()
6194 if (sc->sc_child[0].mixer_lock == NULL) in uaudio_hid_probe()
6209 if (id != 0) in uaudio_hid_probe()
6213 HID_USAGE2(HUP_CONSUMER, 0xE9 /* Volume Increment */), in uaudio_hid_probe()
6214 hid_input, 0, &sc->sc_hid.volume_up_loc, &flags, in uaudio_hid_probe()
6222 HID_USAGE2(HUP_CONSUMER, 0xEA /* Volume Decrement */), in uaudio_hid_probe()
6223 hid_input, 0, &sc->sc_hid.volume_down_loc, &flags, in uaudio_hid_probe()
6231 HID_USAGE2(HUP_CONSUMER, 0xE2 /* Mute */), in uaudio_hid_probe()
6232 hid_input, 0, &sc->sc_hid.mute_loc, &flags, in uaudio_hid_probe()
6255 sc, sc->sc_child[0].mixer_lock); in uaudio_hid_probe()
6260 return (0); in uaudio_hid_probe()