diff options
| author | Takashi Iwai <tiwai@suse.de> | 2010-03-02 05:27:46 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2010-03-02 05:27:46 -0500 |
| commit | 156366d31524dc6b88836f06dccb1be13dbef5f1 (patch) | |
| tree | 5ae1fee7169edd9bebace22394f0777af21fca63 | |
| parent | 7f9320d415fab5c05097c77eea7a77f2f6341f24 (diff) | |
| parent | 0a566ec25627bdd360f7294aa2e52f9d121233b4 (diff) | |
Merge remote branch 'alsa/devel' into topic/misc
Conflicts:
sound/usb/usbaudio.c
| -rw-r--r-- | Documentation/sound/alsa/ALSA-Configuration.txt | 2 | ||||
| -rw-r--r-- | sound/usb/Kconfig | 6 | ||||
| -rw-r--r-- | sound/usb/ua101.c | 100 | ||||
| -rw-r--r-- | sound/usb/usbaudio.c | 53 | ||||
| -rw-r--r-- | sound/usb/usbaudio.h | 3 | ||||
| -rw-r--r-- | sound/usb/usbquirks.h | 30 |
6 files changed, 38 insertions, 156 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index 33df82e3a398..bfcbbf88c44d 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt | |||
| @@ -1812,7 +1812,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
| 1812 | Module snd-ua101 | 1812 | Module snd-ua101 |
| 1813 | ---------------- | 1813 | ---------------- |
| 1814 | 1814 | ||
| 1815 | Module for the Edirol UA-101 audio/MIDI interface. | 1815 | Module for the Edirol UA-101/UA-1000 audio/MIDI interfaces. |
| 1816 | 1816 | ||
| 1817 | This module supports multiple devices, autoprobe and hotplugging. | 1817 | This module supports multiple devices, autoprobe and hotplugging. |
| 1818 | 1818 | ||
diff --git a/sound/usb/Kconfig b/sound/usb/Kconfig index 8c2925814ce4..c570ae3e6d55 100644 --- a/sound/usb/Kconfig +++ b/sound/usb/Kconfig | |||
| @@ -22,13 +22,13 @@ config SND_USB_AUDIO | |||
| 22 | will be called snd-usb-audio. | 22 | will be called snd-usb-audio. |
| 23 | 23 | ||
| 24 | config SND_USB_UA101 | 24 | config SND_USB_UA101 |
| 25 | tristate "Edirol UA-101 driver (EXPERIMENTAL)" | 25 | tristate "Edirol UA-101/UA-1000 driver (EXPERIMENTAL)" |
| 26 | depends on EXPERIMENTAL | 26 | depends on EXPERIMENTAL |
| 27 | select SND_PCM | 27 | select SND_PCM |
| 28 | select SND_RAWMIDI | 28 | select SND_RAWMIDI |
| 29 | help | 29 | help |
| 30 | Say Y here to include support for the Edirol UA-101 audio/MIDI | 30 | Say Y here to include support for the Edirol UA-101 and UA-1000 |
| 31 | interface. | 31 | audio/MIDI interfaces. |
| 32 | 32 | ||
| 33 | To compile this driver as a module, choose M here: the module | 33 | To compile this driver as a module, choose M here: the module |
| 34 | will be called snd-ua101. | 34 | will be called snd-ua101. |
diff --git a/sound/usb/ua101.c b/sound/usb/ua101.c index 4f4ccdf70dd0..3d458d3b9962 100644 --- a/sound/usb/ua101.c +++ b/sound/usb/ua101.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Edirol UA-101 driver | 2 | * Edirol UA-101/UA-1000 driver |
| 3 | * Copyright (c) Clemens Ladisch <clemens@ladisch.de> | 3 | * Copyright (c) Clemens Ladisch <clemens@ladisch.de> |
| 4 | * | 4 | * |
| 5 | * This driver is free software: you can redistribute it and/or modify | 5 | * This driver is free software: you can redistribute it and/or modify |
| @@ -25,13 +25,10 @@ | |||
| 25 | #include <sound/pcm_params.h> | 25 | #include <sound/pcm_params.h> |
| 26 | #include "usbaudio.h" | 26 | #include "usbaudio.h" |
| 27 | 27 | ||
| 28 | MODULE_DESCRIPTION("Edirol UA-101 driver"); | 28 | MODULE_DESCRIPTION("Edirol UA-101/1000 driver"); |
| 29 | MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>"); | 29 | MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>"); |
| 30 | MODULE_LICENSE("GPL v2"); | 30 | MODULE_LICENSE("GPL v2"); |
| 31 | MODULE_SUPPORTED_DEVICE("{{Edirol,UA-101}}"); | 31 | MODULE_SUPPORTED_DEVICE("{{Edirol,UA-101},{Edirol,UA-1000}}"); |
| 32 | |||
| 33 | /* I use my UA-1A for testing because I don't have a UA-101 ... */ | ||
| 34 | #define UA1A_HACK | ||
| 35 | 32 | ||
| 36 | /* | 33 | /* |
| 37 | * Should not be lower than the minimum scheduling delay of the host | 34 | * Should not be lower than the minimum scheduling delay of the host |
| @@ -132,9 +129,6 @@ struct ua101 { | |||
| 132 | dma_addr_t dma; | 129 | dma_addr_t dma; |
| 133 | } buffers[MAX_MEMORY_BUFFERS]; | 130 | } buffers[MAX_MEMORY_BUFFERS]; |
| 134 | } capture, playback; | 131 | } capture, playback; |
| 135 | |||
| 136 | unsigned int fps[10]; | ||
| 137 | unsigned int frame_counter; | ||
| 138 | }; | 132 | }; |
| 139 | 133 | ||
| 140 | static DEFINE_MUTEX(devices_mutex); | 134 | static DEFINE_MUTEX(devices_mutex); |
| @@ -424,16 +418,6 @@ static void capture_urb_complete(struct urb *urb) | |||
| 424 | if (do_period_elapsed) | 418 | if (do_period_elapsed) |
| 425 | snd_pcm_period_elapsed(stream->substream); | 419 | snd_pcm_period_elapsed(stream->substream); |
| 426 | 420 | ||
| 427 | /* for debugging: measure the sample rate relative to the USB clock */ | ||
| 428 | ua->fps[ua->frame_counter++ / ua->packets_per_second] += frames; | ||
| 429 | if (ua->frame_counter >= ARRAY_SIZE(ua->fps) * ua->packets_per_second) { | ||
| 430 | printk(KERN_DEBUG "capture rate:"); | ||
| 431 | for (frames = 0; frames < ARRAY_SIZE(ua->fps); ++frames) | ||
| 432 | printk(KERN_CONT " %u", ua->fps[frames]); | ||
| 433 | printk(KERN_CONT "\n"); | ||
| 434 | memset(ua->fps, 0, sizeof(ua->fps)); | ||
| 435 | ua->frame_counter = 0; | ||
| 436 | } | ||
| 437 | return; | 421 | return; |
| 438 | 422 | ||
| 439 | stream_stopped: | 423 | stream_stopped: |
| @@ -1200,13 +1184,30 @@ static int ua101_probe(struct usb_interface *interface, | |||
| 1200 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | 1184 | .type = QUIRK_MIDI_FIXED_ENDPOINT, |
| 1201 | .data = &midi_ep | 1185 | .data = &midi_ep |
| 1202 | }; | 1186 | }; |
| 1187 | static const int intf_numbers[2][3] = { | ||
| 1188 | { /* UA-101 */ | ||
| 1189 | [INTF_PLAYBACK] = 0, | ||
| 1190 | [INTF_CAPTURE] = 1, | ||
| 1191 | [INTF_MIDI] = 2, | ||
| 1192 | }, | ||
| 1193 | { /* UA-1000 */ | ||
| 1194 | [INTF_CAPTURE] = 1, | ||
| 1195 | [INTF_PLAYBACK] = 2, | ||
| 1196 | [INTF_MIDI] = 3, | ||
| 1197 | }, | ||
| 1198 | }; | ||
| 1203 | struct snd_card *card; | 1199 | struct snd_card *card; |
| 1204 | struct ua101 *ua; | 1200 | struct ua101 *ua; |
| 1205 | unsigned int card_index, i; | 1201 | unsigned int card_index, i; |
| 1202 | int is_ua1000; | ||
| 1203 | const char *name; | ||
| 1206 | char usb_path[32]; | 1204 | char usb_path[32]; |
| 1207 | int err; | 1205 | int err; |
| 1208 | 1206 | ||
| 1209 | if (interface->altsetting->desc.bInterfaceNumber != 0) | 1207 | is_ua1000 = usb_id->idProduct == 0x0044; |
| 1208 | |||
| 1209 | if (interface->altsetting->desc.bInterfaceNumber != | ||
| 1210 | intf_numbers[is_ua1000][0]) | ||
| 1210 | return -ENODEV; | 1211 | return -ENODEV; |
| 1211 | 1212 | ||
| 1212 | mutex_lock(&devices_mutex); | 1213 | mutex_lock(&devices_mutex); |
| @@ -1239,20 +1240,13 @@ static int ua101_probe(struct usb_interface *interface, | |||
| 1239 | init_waitqueue_head(&ua->rate_feedback_wait); | 1240 | init_waitqueue_head(&ua->rate_feedback_wait); |
| 1240 | init_waitqueue_head(&ua->alsa_playback_wait); | 1241 | init_waitqueue_head(&ua->alsa_playback_wait); |
| 1241 | 1242 | ||
| 1242 | #ifdef UA1A_HACK | ||
| 1243 | if (ua->dev->descriptor.idProduct == cpu_to_le16(0x0018)) { | ||
| 1244 | ua->intf[2] = interface; | ||
| 1245 | ua->intf[0] = usb_ifnum_to_if(ua->dev, 1); | ||
| 1246 | ua->intf[1] = usb_ifnum_to_if(ua->dev, 2); | ||
| 1247 | usb_driver_claim_interface(&ua101_driver, ua->intf[0], ua); | ||
| 1248 | usb_driver_claim_interface(&ua101_driver, ua->intf[1], ua); | ||
| 1249 | } else { | ||
| 1250 | #endif | ||
| 1251 | ua->intf[0] = interface; | 1243 | ua->intf[0] = interface; |
| 1252 | for (i = 1; i < ARRAY_SIZE(ua->intf); ++i) { | 1244 | for (i = 1; i < ARRAY_SIZE(ua->intf); ++i) { |
| 1253 | ua->intf[i] = usb_ifnum_to_if(ua->dev, i); | 1245 | ua->intf[i] = usb_ifnum_to_if(ua->dev, |
| 1246 | intf_numbers[is_ua1000][i]); | ||
| 1254 | if (!ua->intf[i]) { | 1247 | if (!ua->intf[i]) { |
| 1255 | dev_err(&ua->dev->dev, "interface %u not found\n", i); | 1248 | dev_err(&ua->dev->dev, "interface %u not found\n", |
| 1249 | intf_numbers[is_ua1000][i]); | ||
| 1256 | err = -ENXIO; | 1250 | err = -ENXIO; |
| 1257 | goto probe_error; | 1251 | goto probe_error; |
| 1258 | } | 1252 | } |
| @@ -1264,39 +1258,19 @@ static int ua101_probe(struct usb_interface *interface, | |||
| 1264 | goto probe_error; | 1258 | goto probe_error; |
| 1265 | } | 1259 | } |
| 1266 | } | 1260 | } |
| 1267 | #ifdef UA1A_HACK | ||
| 1268 | } | ||
| 1269 | #endif | ||
| 1270 | 1261 | ||
| 1271 | snd_card_set_dev(card, &interface->dev); | 1262 | snd_card_set_dev(card, &interface->dev); |
| 1272 | 1263 | ||
| 1273 | #ifdef UA1A_HACK | ||
| 1274 | if (ua->dev->descriptor.idProduct == cpu_to_le16(0x0018)) { | ||
| 1275 | ua->format_bit = SNDRV_PCM_FMTBIT_S16_LE; | ||
| 1276 | ua->rate = 44100; | ||
| 1277 | ua->packets_per_second = 1000; | ||
| 1278 | ua->capture.channels = 2; | ||
| 1279 | ua->playback.channels = 2; | ||
| 1280 | ua->capture.frame_bytes = 4; | ||
| 1281 | ua->playback.frame_bytes = 4; | ||
| 1282 | ua->capture.usb_pipe = usb_rcvisocpipe(ua->dev, 2); | ||
| 1283 | ua->playback.usb_pipe = usb_sndisocpipe(ua->dev, 1); | ||
| 1284 | ua->capture.max_packet_bytes = 192; | ||
| 1285 | ua->playback.max_packet_bytes = 192; | ||
| 1286 | } else { | ||
| 1287 | #endif | ||
| 1288 | err = detect_usb_format(ua); | 1264 | err = detect_usb_format(ua); |
| 1289 | if (err < 0) | 1265 | if (err < 0) |
| 1290 | goto probe_error; | 1266 | goto probe_error; |
| 1291 | #ifdef UA1A_HACK | ||
| 1292 | } | ||
| 1293 | #endif | ||
| 1294 | 1267 | ||
| 1268 | name = usb_id->idProduct == 0x0044 ? "UA-1000" : "UA-101"; | ||
| 1295 | strcpy(card->driver, "UA-101"); | 1269 | strcpy(card->driver, "UA-101"); |
| 1296 | strcpy(card->shortname, "UA-101"); | 1270 | strcpy(card->shortname, name); |
| 1297 | usb_make_path(ua->dev, usb_path, sizeof(usb_path)); | 1271 | usb_make_path(ua->dev, usb_path, sizeof(usb_path)); |
| 1298 | snprintf(ua->card->longname, sizeof(ua->card->longname), | 1272 | snprintf(ua->card->longname, sizeof(ua->card->longname), |
| 1299 | "EDIROL UA-101 (serial %s), %u Hz at %s, %s speed", | 1273 | "EDIROL %s (serial %s), %u Hz at %s, %s speed", name, |
| 1300 | ua->dev->serial ? ua->dev->serial : "?", ua->rate, usb_path, | 1274 | ua->dev->serial ? ua->dev->serial : "?", ua->rate, usb_path, |
| 1301 | ua->dev->speed == USB_SPEED_HIGH ? "high" : "full"); | 1275 | ua->dev->speed == USB_SPEED_HIGH ? "high" : "full"); |
| 1302 | 1276 | ||
| @@ -1314,24 +1288,18 @@ static int ua101_probe(struct usb_interface *interface, | |||
| 1314 | if (err < 0) | 1288 | if (err < 0) |
| 1315 | goto probe_error; | 1289 | goto probe_error; |
| 1316 | 1290 | ||
| 1317 | err = snd_pcm_new(card, "UA-101", 0, 1, 1, &ua->pcm); | 1291 | err = snd_pcm_new(card, name, 0, 1, 1, &ua->pcm); |
| 1318 | if (err < 0) | 1292 | if (err < 0) |
| 1319 | goto probe_error; | 1293 | goto probe_error; |
| 1320 | ua->pcm->private_data = ua; | 1294 | ua->pcm->private_data = ua; |
| 1321 | strcpy(ua->pcm->name, "UA-101"); | 1295 | strcpy(ua->pcm->name, name); |
| 1322 | snd_pcm_set_ops(ua->pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_pcm_ops); | 1296 | snd_pcm_set_ops(ua->pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_pcm_ops); |
| 1323 | snd_pcm_set_ops(ua->pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_pcm_ops); | 1297 | snd_pcm_set_ops(ua->pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_pcm_ops); |
| 1324 | 1298 | ||
| 1325 | #ifdef UA1A_HACK | ||
| 1326 | if (ua->dev->descriptor.idProduct != cpu_to_le16(0x0018)) { | ||
| 1327 | #endif | ||
| 1328 | err = snd_usbmidi_create(card, ua->intf[INTF_MIDI], | 1299 | err = snd_usbmidi_create(card, ua->intf[INTF_MIDI], |
| 1329 | &ua->midi_list, &midi_quirk); | 1300 | &ua->midi_list, &midi_quirk); |
| 1330 | if (err < 0) | 1301 | if (err < 0) |
| 1331 | goto probe_error; | 1302 | goto probe_error; |
| 1332 | #ifdef UA1A_HACK | ||
| 1333 | } | ||
| 1334 | #endif | ||
| 1335 | 1303 | ||
| 1336 | err = snd_card_register(card); | 1304 | err = snd_card_register(card); |
| 1337 | if (err < 0) | 1305 | if (err < 0) |
| @@ -1386,11 +1354,9 @@ static void ua101_disconnect(struct usb_interface *interface) | |||
| 1386 | } | 1354 | } |
| 1387 | 1355 | ||
| 1388 | static struct usb_device_id ua101_ids[] = { | 1356 | static struct usb_device_id ua101_ids[] = { |
| 1389 | #ifdef UA1A_HACK | 1357 | { USB_DEVICE(0x0582, 0x0044) }, /* UA-1000 high speed */ |
| 1390 | { USB_DEVICE(0x0582, 0x0018) }, | 1358 | { USB_DEVICE(0x0582, 0x007d) }, /* UA-101 high speed */ |
| 1391 | #endif | 1359 | { USB_DEVICE(0x0582, 0x008d) }, /* UA-101 full speed */ |
| 1392 | { USB_DEVICE(0x0582, 0x007d) }, | ||
| 1393 | { USB_DEVICE(0x0582, 0x008d) }, | ||
| 1394 | { } | 1360 | { } |
| 1395 | }; | 1361 | }; |
| 1396 | MODULE_DEVICE_TABLE(usb, ua101_ids); | 1362 | MODULE_DEVICE_TABLE(usb, ua101_ids); |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index c539f7fe292f..20b656e9f90d 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
| @@ -3386,58 +3386,6 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, | |||
| 3386 | return 0; | 3386 | return 0; |
| 3387 | } | 3387 | } |
| 3388 | 3388 | ||
| 3389 | /* | ||
| 3390 | * Create a stream for an Edirol UA-1000 interface. | ||
| 3391 | */ | ||
| 3392 | static int create_ua1000_quirk(struct snd_usb_audio *chip, | ||
| 3393 | struct usb_interface *iface, | ||
| 3394 | const struct snd_usb_audio_quirk *quirk) | ||
| 3395 | { | ||
| 3396 | static const struct audioformat ua1000_format = { | ||
| 3397 | .format = SNDRV_PCM_FORMAT_S32_LE, | ||
| 3398 | .fmt_type = UAC_FORMAT_TYPE_I, | ||
| 3399 | .altsetting = 1, | ||
| 3400 | .altset_idx = 1, | ||
| 3401 | .attributes = 0, | ||
| 3402 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
| 3403 | }; | ||
| 3404 | struct usb_host_interface *alts; | ||
| 3405 | struct usb_interface_descriptor *altsd; | ||
| 3406 | struct audioformat *fp; | ||
| 3407 | int stream, err; | ||
| 3408 | |||
| 3409 | if (iface->num_altsetting != 2) | ||
| 3410 | return -ENXIO; | ||
| 3411 | alts = &iface->altsetting[1]; | ||
| 3412 | altsd = get_iface_desc(alts); | ||
| 3413 | if (alts->extralen != 11 || alts->extra[1] != USB_DT_CS_INTERFACE || | ||
| 3414 | altsd->bNumEndpoints != 1) | ||
| 3415 | return -ENXIO; | ||
| 3416 | |||
| 3417 | fp = kmemdup(&ua1000_format, sizeof(*fp), GFP_KERNEL); | ||
| 3418 | if (!fp) | ||
| 3419 | return -ENOMEM; | ||
| 3420 | |||
| 3421 | fp->channels = alts->extra[4]; | ||
| 3422 | fp->iface = altsd->bInterfaceNumber; | ||
| 3423 | fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; | ||
| 3424 | fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; | ||
| 3425 | fp->datainterval = parse_datainterval(chip, alts); | ||
| 3426 | fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); | ||
| 3427 | fp->rate_max = fp->rate_min = combine_triple(&alts->extra[8]); | ||
| 3428 | |||
| 3429 | stream = (fp->endpoint & USB_DIR_IN) | ||
| 3430 | ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; | ||
| 3431 | err = add_audio_endpoint(chip, stream, fp); | ||
| 3432 | if (err < 0) { | ||
| 3433 | kfree(fp); | ||
| 3434 | return err; | ||
| 3435 | } | ||
| 3436 | /* FIXME: playback must be synchronized to capture */ | ||
| 3437 | usb_set_interface(chip->dev, fp->iface, 0); | ||
| 3438 | return 0; | ||
| 3439 | } | ||
| 3440 | |||
| 3441 | static int snd_usb_create_quirk(struct snd_usb_audio *chip, | 3389 | static int snd_usb_create_quirk(struct snd_usb_audio *chip, |
| 3442 | struct usb_interface *iface, | 3390 | struct usb_interface *iface, |
| 3443 | const struct snd_usb_audio_quirk *quirk); | 3391 | const struct snd_usb_audio_quirk *quirk); |
| @@ -3686,7 +3634,6 @@ static int snd_usb_create_quirk(struct snd_usb_audio *chip, | |||
| 3686 | [QUIRK_MIDI_CME] = create_any_midi_quirk, | 3634 | [QUIRK_MIDI_CME] = create_any_midi_quirk, |
| 3687 | [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk, | 3635 | [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk, |
| 3688 | [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk, | 3636 | [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk, |
| 3689 | [QUIRK_AUDIO_EDIROL_UA1000] = create_ua1000_quirk, | ||
| 3690 | [QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk, | 3637 | [QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk, |
| 3691 | [QUIRK_AUDIO_ALIGN_TRANSFER] = create_align_transfer_quirk | 3638 | [QUIRK_AUDIO_ALIGN_TRANSFER] = create_align_transfer_quirk |
| 3692 | }; | 3639 | }; |
diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 6b016d4aac6b..42c299cbf63a 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h | |||
| @@ -75,7 +75,6 @@ enum quirk_type { | |||
| 75 | QUIRK_MIDI_US122L, | 75 | QUIRK_MIDI_US122L, |
| 76 | QUIRK_AUDIO_STANDARD_INTERFACE, | 76 | QUIRK_AUDIO_STANDARD_INTERFACE, |
| 77 | QUIRK_AUDIO_FIXED_ENDPOINT, | 77 | QUIRK_AUDIO_FIXED_ENDPOINT, |
| 78 | QUIRK_AUDIO_EDIROL_UA1000, | ||
| 79 | QUIRK_AUDIO_EDIROL_UAXX, | 78 | QUIRK_AUDIO_EDIROL_UAXX, |
| 80 | QUIRK_AUDIO_ALIGN_TRANSFER, | 79 | QUIRK_AUDIO_ALIGN_TRANSFER, |
| 81 | 80 | ||
| @@ -112,7 +111,7 @@ struct snd_usb_midi_endpoint_info { | |||
| 112 | 111 | ||
| 113 | /* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */ | 112 | /* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */ |
| 114 | 113 | ||
| 115 | /* for QUIRK_AUDIO_EDIROL_UA700_UA25/UA1000, data is NULL */ | 114 | /* for QUIRK_AUDIO_EDIROL_UAXX, data is NULL */ |
| 116 | 115 | ||
| 117 | /* for QUIRK_IGNORE_INTERFACE, data is NULL */ | 116 | /* for QUIRK_IGNORE_INTERFACE, data is NULL */ |
| 118 | 117 | ||
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index f06faf7917b9..2b426c1fd0e8 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h | |||
| @@ -1016,36 +1016,6 @@ YAMAHA_DEVICE(0x7010, "UB99"), | |||
| 1016 | } | 1016 | } |
| 1017 | }, | 1017 | }, |
| 1018 | { | 1018 | { |
| 1019 | USB_DEVICE(0x0582, 0x0044), | ||
| 1020 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
| 1021 | .vendor_name = "Roland", | ||
| 1022 | .product_name = "UA-1000", | ||
| 1023 | .ifnum = QUIRK_ANY_INTERFACE, | ||
| 1024 | .type = QUIRK_COMPOSITE, | ||
| 1025 | .data = (const struct snd_usb_audio_quirk[]) { | ||
| 1026 | { | ||
| 1027 | .ifnum = 1, | ||
| 1028 | .type = QUIRK_AUDIO_EDIROL_UA1000 | ||
| 1029 | }, | ||
| 1030 | { | ||
| 1031 | .ifnum = 2, | ||
| 1032 | .type = QUIRK_AUDIO_EDIROL_UA1000 | ||
| 1033 | }, | ||
| 1034 | { | ||
| 1035 | .ifnum = 3, | ||
| 1036 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
| 1037 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
| 1038 | .out_cables = 0x0003, | ||
| 1039 | .in_cables = 0x0003 | ||
| 1040 | } | ||
| 1041 | }, | ||
| 1042 | { | ||
| 1043 | .ifnum = -1 | ||
| 1044 | } | ||
| 1045 | } | ||
| 1046 | } | ||
| 1047 | }, | ||
| 1048 | { | ||
| 1049 | /* has ID 0x0049 when not in "Advanced Driver" mode */ | 1019 | /* has ID 0x0049 when not in "Advanced Driver" mode */ |
| 1050 | USB_DEVICE(0x0582, 0x0047), | 1020 | USB_DEVICE(0x0582, 0x0047), |
| 1051 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | 1021 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
