diff options
author | Manuel Reinhardt <manuel.rhdt@gmail.com> | 2019-02-28 22:34:04 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2019-03-01 00:23:11 +0300 |
commit | a634090a0f242caa8ebc91967b118995a80eb13b (patch) | |
tree | 8aadb6c2df6537d3e643b60038f7d1317dd00da4 /sound/usb/quirks-table.h | |
parent | 70395a96bd882d8dba669f99b5cec0008690accd (diff) | |
download | linux-a634090a0f242caa8ebc91967b118995a80eb13b.tar.xz |
ALSA: usb-audio: Add quirk for MOTU MicroBook II
Add an entry to the quirks-table to for usb-audio to recognize the
Microbook II (although it only exposes vendor interfaces). A simple boot
quirk is also implemented to set up the sample rate and make sure that
no audio urbs are sent before the device is ready.
This patch only provides audio playback and capture at 96kHz sample
rate. Notice the following shortcomings:
- The sample rate is currently hardcoded to 96k although the device also
supports 48k and 44.1k.
- The various mixer controls of the MicroBook are not made available.
- The keep-iface control should be on by default because the device
shuts down whenever the altsetting is reset which is usually unwanted.
(I don't know the best way to do this)
- The communication format used by the MicroBook for sample rate setting
and also other setup has been reverse engineered by looking at the
usbmon output while running the windows driver through virtualbox. In
this patch the first byte of every message is set to \0 while in the
observed communications the first byte acts as a "message-counter"
increasing its value with every message sent. Leaving it at \0 does
not seem to affect the device.
Signed-off-by: Manuel Reinhardt <manuel.rhdt@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/quirks-table.h')
-rw-r--r-- | sound/usb/quirks-table.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index b345beb447bd..86e80916a029 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -3398,5 +3398,70 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), .ifnum = QUIRK_NO_INTERFACE } }, +/* MOTU Microbook II */ +{ + USB_DEVICE(0x07fd, 0x0004), + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { + .vendor_name = "MOTU", + .product_name = "MicroBookII", + .ifnum = QUIRK_ANY_INTERFACE, + .type = QUIRK_COMPOSITE, + .data = (const struct snd_usb_audio_quirk[]) { + { + .ifnum = 0, + .type = QUIRK_AUDIO_STANDARD_MIXER, + }, + { + .ifnum = 0, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = &(const struct audioformat) { + .formats = SNDRV_PCM_FMTBIT_S24_3BE, + .channels = 6, + .iface = 0, + .altsetting = 1, + .altset_idx = 1, + .attributes = 0, + .endpoint = 0x84, + .rates = SNDRV_PCM_RATE_96000, + .ep_attr = USB_ENDPOINT_XFER_ISOC | + USB_ENDPOINT_SYNC_ASYNC, + .rate_min = 96000, + .rate_max = 96000, + .nr_rates = 1, + .maxpacksize = 0x00d8, + .rate_table = (unsigned int[]) { + 96000 + } + } + }, + { + .ifnum = 0, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = &(const struct audioformat) { + .formats = SNDRV_PCM_FMTBIT_S24_3BE, + .channels = 8, + .iface = 0, + .altsetting = 1, + .altset_idx = 1, + .attributes = 0, + .endpoint = 0x03, + .rates = SNDRV_PCM_RATE_96000, + .ep_attr = USB_ENDPOINT_XFER_ISOC | + USB_ENDPOINT_SYNC_ASYNC, + .rate_min = 96000, + .rate_max = 96000, + .nr_rates = 1, + .maxpacksize = 0x0120, + .rate_table = (unsigned int[]) { + 96000 + } + } + }, + { + .ifnum = -1 + } + } + } +}, #undef USB_DEVICE_VENDOR_SPEC |