From owner-freebsd-multimedia@FreeBSD.ORG Wed Feb 23 09:30:52 2011 Return-Path: Delivered-To: freebsd-multimedia@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DB8501065670 for ; Wed, 23 Feb 2011 09:30:52 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe05.c2i.net [212.247.154.130]) by mx1.freebsd.org (Postfix) with ESMTP id A0A2D8FC0C for ; Wed, 23 Feb 2011 09:30:51 +0000 (UTC) X-Cloudmark-Score: 0.000000 [] X-Cloudmark-Analysis: v=1.1 cv=O4luLtK3s/BI/ZI2MixGyL7hJC8Dk2jKRuc55HZ6Kk0= c=1 sm=1 a=NecJrhHukysA:10 a=CL8lFSKtTFcA:10 a=i9M/sDlu2rpZ9XS819oYzg==:17 a=3snYbst9tyF0XYzXa0sA:9 a=rnX804kO1_UeqOPqOFgOtCHA2FwA:4 a=wPNLvfGTeEIA:10 a=qI_ylpAmqgNI280AjIQA:9 a=tQegrqQAnZLmw6Uj83MA:7 a=auQcVLSHhn8lJKm5VdoNWdUEeZ8A:4 a=0w2a3lBPTU2IPqWLLYYA:9 a=XzYHnOPjQyPbVSuXyUQoHuMilaQA:4 a=IKIoO-ieCDEA:10 a=M06AF7tXkhCl9v2sY1AA:9 a=d7uYetoxTjK4TxxlwBFVnmKP6AMA:4 a=i9M/sDlu2rpZ9XS819oYzg==:117 Received: from [188.126.198.129] (account mc467741@c2i.net HELO laptop002.hselasky.homeunix.org) by mailfe05.swip.net (CommuniGate Pro SMTP 5.2.19) with ESMTPA id 90552317; Wed, 23 Feb 2011 10:30:48 +0100 From: Hans Petter Selasky To: Clemens Ladisch Date: Wed, 23 Feb 2011 10:30:32 +0100 User-Agent: KMail/1.13.5 (FreeBSD/8.2-PRERELEASE; KDE/4.4.5; amd64; ; ) References: <20110221234912.fc03786d.torfinn.ingolfsen@broadpark.no> <201102220900.05248.hselasky@c2i.net> <4D63852C.5050603@ladisch.de> In-Reply-To: <4D63852C.5050603@ladisch.de> X-Face: *nPdTl_}RuAI6^PVpA02T?$%Xa^>@hE0uyUIoiha$pC:9TVgl.Oq, NwSZ4V"|LR.+tj}g5 %V,x^qOs~mnU3]Gn; cQLv&.N>TrxmSFf+p6(30a/{)KUU!s}w\IhQBj}[g}bj0I3^glmC( :AuzV9:.hESm-x4h240C`9=w MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_4ONZNGSupL3AU55" Message-Id: <201102231030.32160.hselasky@c2i.net> X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: freebsd-multimedia@freebsd.org Subject: Re: idea: "shim" driver for Roland / Edirol SD-20 MIDI sound module? X-BeenThere: freebsd-multimedia@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Multimedia discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Feb 2011 09:30:52 -0000 --Boundary-00=_4ONZNGSupL3AU55 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hi Torfinn, I got enough information now to make your device work. Can you try the attached patch on FreeBSD 9-current or simply copy the attached files? cd /sys/dev cat usb_midi_001.patch | patch -C cat usb_midi_001.patch | patch --HPS --Boundary-00=_4ONZNGSupL3AU55 Content-Type: text/x-patch; charset="ISO-8859-1"; name="usb_midi_001.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="usb_midi_001.patch" === sound/usb/uaudio.c ================================================================== --- sound/usb/uaudio.c (revision 218868) +++ sound/usb/uaudio.c (local) @@ -401,8 +401,8 @@ static int umidi_ioctl(struct usb_fifo *, u_long cmd, void *, int); static void umidi_close(struct usb_fifo *, int); static void umidi_init(device_t dev); -static int32_t umidi_probe(device_t dev); -static int32_t umidi_detach(device_t dev); +static int umidi_probe(device_t dev); +static int umidi_detach(device_t dev); #ifdef USB_DEBUG static void uaudio_chan_dump_ep_desc( @@ -530,10 +530,30 @@ .size = sizeof(struct uaudio_softc), }; +static const struct usb_device_id uaudio_devs[] = { + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM1, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8850, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD90, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM880N, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA100, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM4, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_U8, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM2, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SC8820, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_PC300, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SK500, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SCD70, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UM550, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD20, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_SD80, 0)}, + {USB_VPI(USB_VENDOR_ROLAND, USB_PRODUCT_ROLAND_UA700, 0)}, +}; + static int uaudio_probe(device_t dev) { struct usb_attach_arg *uaa = device_get_ivars(dev); + int error; if (uaa->usb_mode != USB_MODE_HOST) return (ENXIO); @@ -541,22 +561,27 @@ if (uaa->use_generic == 0) return (ENXIO); - /* trigger on the control interface */ + /* lookup non-standard device */ - if ((uaa->info.bInterfaceClass == UICLASS_AUDIO) && - (uaa->info.bInterfaceSubClass == UISUBCLASS_AUDIOCONTROL)) { + if (uaa->info.bInterfaceClass != UICLASS_AUDIO) + error = usbd_lookup_id_by_uaa(uaudio_devs, sizeof(uaudio_devs), uaa); + else + error = 0; + + /* check for AUDIO control interface */ + + if (uaa->info.bInterfaceSubClass == UISUBCLASS_AUDIOCONTROL) { if (usb_test_quirk(uaa, UQ_BAD_AUDIO)) return (ENXIO); else - return (0); + return (error); } /* check for MIDI stream */ - if ((uaa->info.bInterfaceClass == UICLASS_AUDIO) && - (uaa->info.bInterfaceSubClass == UISUBCLASS_MIDISTREAM)) { - return (0); - } + if (uaa->info.bInterfaceSubClass == UISUBCLASS_MIDISTREAM) + return (error); + return (ENXIO); } @@ -800,6 +825,7 @@ uint8_t bBitResolution; uint8_t x; uint8_t audio_if = 0; + uint8_t uma_if_class; while ((desc = usb_desc_foreach(cd, desc))) { @@ -817,19 +843,20 @@ alt_index++; } - if ((id->bInterfaceClass == UICLASS_AUDIO) && - (id->bInterfaceSubClass == UISUBCLASS_AUDIOSTREAM)) { + uma_if_class = ((id->bInterfaceClass == UICLASS_AUDIO) || + (id->bInterfaceClass == UICLASS_VENDOR)); + + if ((uma_if_class != 0) && (id->bInterfaceSubClass == UISUBCLASS_AUDIOSTREAM)) { audio_if = 1; } else { audio_if = 0; } - if ((id->bInterfaceClass == UICLASS_AUDIO) && + if ((uma_if_class != 0) && (id->bInterfaceSubClass == UISUBCLASS_MIDISTREAM)) { /* * XXX could allow multiple MIDI interfaces - * XXX */ if ((sc->sc_midi_chan.valid == 0) && @@ -1340,7 +1367,8 @@ usbd_errstr(err)); goto error; } - usbd_set_parent_iface(sc->sc_udev, iface_index, sc->sc_mixer_iface_index); + usbd_set_parent_iface(sc->sc_udev, iface_index, + sc->sc_mixer_iface_index); /* * If just one sampling rate is supported, @@ -3705,7 +3733,7 @@ .basename[0] = "umidi", }; -static int32_t +static int umidi_probe(device_t dev) { struct uaudio_softc *sc = device_get_softc(dev); @@ -3770,7 +3798,7 @@ return (ENXIO); /* failure */ } -static int32_t +static int umidi_detach(device_t dev) { struct uaudio_softc *sc = device_get_softc(dev); === usb/usbdevs ================================================================== --- usb/usbdevs (revision 218868) +++ usb/usbdevs (local) @@ -2782,9 +2782,23 @@ product REINERSCT CYBERJACK_ECOM 0x0100 e-com cyberJack /* Roland products */ +product ROLAND UA100 0x0000 UA-100 Audio I/F +product ROLAND UM4 0x0002 UM-4 MIDI I/F +product ROLAND SC8850 0x0003 SC-8850 MIDI Synth +product ROLAND U8 0x0004 U-8 Audio I/F +product ROLAND UM2 0x0005 UM-2 MIDI I/F +product ROLAND SC8820 0x0007 SC-8820 MIDI Synth +product ROLAND PC300 0x0008 PC-300 MIDI Keyboard product ROLAND UM1 0x0009 UM-1 MIDI I/F +product ROLAND SK500 0x000b SK-500 MIDI Keyboard +product ROLAND SCD70 0x000c SC-D70 MIDI Synth product ROLAND UM880N 0x0014 EDIROL UM-880 MIDI I/F (native) product ROLAND UM880G 0x0015 EDIROL UM-880 MIDI I/F (generic) +product ROLAND SD90 0x0016 SD-90 MIDI Synth +product ROLAND UM550 0x0023 UM-550 MIDI I/F +product ROLAND SD20 0x0027 SD-20 MIDI Synth +product ROLAND SD80 0x0029 SD-80 MIDI Synth +product ROLAND UA700 0x002b UA-700 Audio I/F /* Rockfire products */ product ROCKFIRE GAMEPAD 0x2033 gamepad 203USB @@ -3394,10 +3408,11 @@ /* Yamaha products */ product YAMAHA UX256 0x1000 UX256 MIDI I/F product YAMAHA UX96 0x1008 UX96 MIDI I/F +product YAMAHA RPU200 0x3104 RP-U200 product YAMAHA RTA54I 0x4000 NetVolante RTA54i Broadband&ISDN Router -product YAMAHA RTA55I 0x4004 NetVolante RTA55i Broadband VoIP Router product YAMAHA RTW65B 0x4001 NetVolante RTW65b Broadband Wireless Router product YAMAHA RTW65I 0x4002 NetVolante RTW65i Broadband&ISDN Wireless Router +product YAMAHA RTA55I 0x4004 NetVolante RTA55i Broadband VoIP Router /* Yano products */ product YANO U640MO 0x0101 U640MO-03 --Boundary-00=_4ONZNGSupL3AU55--