Thank you for the valuable information.
I was able to control the UR816C on Linux as well.
If you want to use multiple audio streams like Windows,
you can do so by applying a patch to the kernel and changing bConfigurationValue.
It is important to use altset for each sampling rate.
# This is used to change the default configuration of Steinberg UR-C series
ACTION!="add", GOTO="usb_steinberg_urc_end"
SUBSYSTEM!="usb", GOTO="usb_steinberg_urc_end"
ENV{DEVTYPE}!="usb_device", GOTO="usb_steinberg_urc_end"
# Modify this to change the default value
ENV{STEINBERG_URC_MODE}="2"
# UR-816C
ATTR{idVendor}=="0499", ATTR{idProduct}=="1734", ATTR{bConfigurationValue}!="$env{STEINBERG_URC_MODE}", ATTR{bConfigurationValue}="$env{STEINBERG_URC_MODE}"
LABEL="usb_steinberg_urc_end"
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index 75cde5779f38..d828d9face87 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -391,6 +391,173 @@ YAMAHA_DEVICE(0x1718, "P-125"),
}
}
},
+{
+ USB_DEVICE_VENDOR_SPEC(0x0499, 0x172f),
+ QUIRK_DRIVER_INFO {
+ /* .vendor_name = "Yamaha", */
+ /* .product_name = "Steinberg UR22C", */
+ QUIRK_DATA_COMPOSITE {
+ { QUIRK_DATA_STANDARD_AUDIO(1) },
+ { QUIRK_DATA_STANDARD_AUDIO(2) },
+ { QUIRK_DATA_MIDI_YAMAHA(3) },
+ { QUIRK_DATA_MIDI_YAMAHA(4) },
+ QUIRK_COMPOSITE_END
+ }
+ }
+},
+{
+ USB_DEVICE_VENDOR_SPEC(0x0499, 0x1734),
+ QUIRK_DRIVER_INFO {
+ /* .vendor_name = "Yamaha", */
+ /* .product_name = "Steinberg UR816C", */
+ QUIRK_DATA_COMPOSITE {
+ { QUIRK_DATA_IGNORE(0) },
+ // Interface 1
+ {
+ QUIRK_DATA_AUDIOFORMAT(1) {
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .channels = 22,
+ .iface = 1,
+ .altsetting = 1,
+ .altset_idx = 1,
+ .endpoint = 0x01,
+ .ep_attr = USB_ENDPOINT_XFER_ISOC |
+ USB_ENDPOINT_SYNC_ASYNC |
+ USB_ENDPOINT_USAGE_DATA,
+ .attributes = 0,
+ .rates = SNDRV_PCM_RATE_44100 |
+ SNDRV_PCM_RATE_48000,
+ .rate_min = 44100,
+ .rate_max = 48000,
+ .nr_rates = 2,
+ .rate_table = (unsigned int[]) {
+ 44100, 48000
+ },
+ .clock = 1
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(1) {
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .channels = 18,
+ .iface = 1,
+ .altsetting = 2,
+ .altset_idx = 2,
+ .endpoint = 0x01,
+ .ep_attr = USB_ENDPOINT_XFER_ISOC |
+ USB_ENDPOINT_SYNC_ASYNC |
+ USB_ENDPOINT_USAGE_DATA,
+ .attributes = 0,
+ .rates = SNDRV_PCM_RATE_88200 |
+ SNDRV_PCM_RATE_96000,
+ .rate_min = 88200,
+ .rate_max = 96000,
+ .nr_rates = 2,
+ .rate_table = (unsigned int[]) {
+ 88200, 96000
+ },
+ .clock = 1
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(1) {
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .channels = 16,
+ .iface = 1,
+ .altsetting = 3,
+ .altset_idx = 3,
+ .endpoint = 0x01,
+ .ep_attr = USB_ENDPOINT_XFER_ISOC |
+ USB_ENDPOINT_SYNC_ASYNC |
+ USB_ENDPOINT_USAGE_DATA,
+ .attributes = 0,
+ .rates = SNDRV_PCM_RATE_176400 |
+ SNDRV_PCM_RATE_192000,
+ .rate_min = 176400,
+ .rate_max = 192000,
+ .nr_rates = 2,
+ .rate_table = (unsigned int[]) {
+ 176400, 192000
+ },
+ .clock = 1
+ }
+ },
+ // Interface 2
+ {
+ QUIRK_DATA_AUDIOFORMAT(2) {
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .channels = 22,
+ .iface = 2,
+ .altsetting = 1,
+ .altset_idx = 1,
+ .endpoint = 0x81,
+ .ep_attr = USB_ENDPOINT_XFER_ISOC |
+ USB_ENDPOINT_SYNC_ASYNC |
+ USB_ENDPOINT_USAGE_IMPLICIT_FB,
+ .attributes = 0,
+ .rates = SNDRV_PCM_RATE_44100 |
+ SNDRV_PCM_RATE_48000,
+ .rate_min = 44100,
+ .rate_max = 48000,
+ .nr_rates = 2,
+ .rate_table = (unsigned int[]) {
+ 44100, 48000
+ },
+ .clock = 1
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(2) {
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .channels = 18,
+ .iface = 2,
+ .altsetting = 2,
+ .altset_idx = 2,
+ .endpoint = 0x81,
+ .ep_attr = USB_ENDPOINT_XFER_ISOC |
+ USB_ENDPOINT_SYNC_ASYNC |
+ USB_ENDPOINT_USAGE_IMPLICIT_FB,
+ .attributes = 0,
+ .rates = SNDRV_PCM_RATE_88200 |
+ SNDRV_PCM_RATE_96000,
+ .rate_min = 88200,
+ .rate_max = 96000,
+ .nr_rates = 2,
+ .rate_table = (unsigned int[]) {
+ 88200, 96000
+ },
+ .clock = 1
+ }
+ },
+ {
+ QUIRK_DATA_AUDIOFORMAT(2) {
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ .channels = 16,
+ .iface = 2,
+ .altsetting = 3,
+ .altset_idx = 3,
+ .endpoint = 0x81,
+ .ep_attr = USB_ENDPOINT_XFER_ISOC |
+ USB_ENDPOINT_SYNC_ASYNC |
+ USB_ENDPOINT_USAGE_IMPLICIT_FB,
+ .attributes = 0,
+ .rates = SNDRV_PCM_RATE_176400 |
+ SNDRV_PCM_RATE_192000,
+ .rate_min = 176400,
+ .rate_max = 192000,
+ .nr_rates = 2,
+ .rate_table = (unsigned int[]) {
+ 176400, 192000
+ },
+ .clock = 1
+ }
+ },
+ { QUIRK_DATA_MIDI_YAMAHA(3) },
+ { QUIRK_DATA_MIDI_YAMAHA(4) },
+ QUIRK_COMPOSITE_END
+ }
+ }
+},
YAMAHA_DEVICE(0x2000, "DGP-7"),
YAMAHA_DEVICE(0x2001, "DGP-5"),
YAMAHA_DEVICE(0x2002, NULL),