alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
       [not found] <4B726306.8070506@gmail.com>
@ 2010-02-10  8:56 ` Clemens Ladisch
  2010-02-11  8:01   ` Sebastien Alaiwan
  0 siblings, 1 reply; 7+ messages in thread
From: Clemens Ladisch @ 2010-02-10  8:56 UTC (permalink / raw)
  To: Sebastien Alaiwan; +Cc: Takashi Iwai, alsa-devel, linux-kernel

Sebastien Alaiwan wrote:
> here's a patch that adds MIDI support through USB for one of the
> Access Music synths, the VirusTI. 

Thanks!

Please run the checkpatch script on your patch.

> +	u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 }; // "midi send" enable
> +
> +	err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), seq,
> +			ARRAY_SIZE(seq), &actual_length, 1000);

There are architectures where doing DMA with data on the stack is not
possible.  Have a look at send_bulk_static_data.

>  /*
> + * Detects the endpoints for Access Music Virus TI
> + */
> +static int snd_usbmidi_detect_two_cables_per_endpoint(struct snd_usb_midi* umidi,
> +    struct snd_usb_midi_endpoint_info* endpoints)
> +{
> +	int err, i;
> +
> +	err = snd_usbmidi_detect_endpoints(umidi, endpoints, MIDI_MAX_ENDPOINTS);
> +	for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
> +		if (endpoints[i].in_ep) {
> +			printk("Creating two in cables for input EP 0x%.2X\n", endpoints[i].in_ep);

If this is just for debugging, use snd_printdd.

> +			endpoints[i].in_cables = 0x0003;
> +		}
> +		if (endpoints[i].out_ep) {
> +			printk("Creating two out cables for output EP 0x%.2X\n", endpoints[i].out_ep);
> +			endpoints[i].out_cables = 0x0003;
> +		}
> +	}
> +	return err;
> +}

Does this device use more than one endpoint per direction?  If not, this
could be done with QUIRK_MIDI_FIXED_ENDPOINT.

> +++ b/sound/usb/usbquirks.h
> @@ -2105,6 +2105,28 @@
>  	}
>  },
>  
> +/* Access Music devices */
> +{
> +	/* VirusTI Desktop */
> +	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),

Please keep the list sorted (as much as possible).

> +		.vendor_name = "AccessMusic",
> +		.product_name = "Virus TI",

These are needed only if the device hasn't vendor/product strings.

> +				// "Virus TI MIDI" and "Virus TI Synth"

If these are port names, put them into the snd_usbmidi_port_info array.


Regards,
Clemens

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
  2010-02-10  8:56 ` [PATCH][ALSA] usbmidi support for Access Music synths Clemens Ladisch
@ 2010-02-11  8:01   ` Sebastien Alaiwan
  2010-02-11  8:46     ` Clemens Ladisch
  0 siblings, 1 reply; 7+ messages in thread
From: Sebastien Alaiwan @ 2010-02-11  8:01 UTC (permalink / raw)
  To: Clemens Ladisch; +Cc: linux-kernel, alsa-devel, Takashi Iwai

Clemens Ladisch wrote:
> Sebastien Alaiwan wrote:
>> here's a patch that adds MIDI support through USB for one of the
>> Access Music synths, the VirusTI. 
> 
> Thanks!
> 
> Please run the checkpatch script on your patch.

Done!
I did not know such a tool did exist, thank you for pointing this out. Is there
a document I could read about such rules of thumb?

>> +			endpoints[i].in_cables = 0x0003;
>> +		}
>> +		if (endpoints[i].out_ep) {
>> +			printk("Creating two out cables for output EP 0x%.2X\n", endpoints[i].out_ep);
>> +			endpoints[i].out_cables = 0x0003;
>> +		}
>> +	}
>> +	return err;
>> +}
> 
> Does this device use more than one endpoint per direction?  If not, this
> could be done with QUIRK_MIDI_FIXED_ENDPOINT.

There's only one endpoint per direction, but there are two cables per endpoint:
endpoint 0x05, cable 0 : physical MIDI output port of the device.
endpoint 0x05, cable 1 : synth (output: send note-on, etc...)
endpoint 0x85, cable 0 : physical MIDI input port of the device.
endpoint 0x85, cable 1 : synth (input: recv sysex, controller changes)

Please correct me if I'm wrong, but it seems QUIRK_MIDI_FIXED_ENDPOINT would not
do the job, otherwise where do I signal the number of cables?

Here's an updated patch below.

Regards,
Sebastien Alaiwan


-------------
Signed-off-by: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 9edef46..0e54e93 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3327,6 +3327,29 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
 }
 
 /*
+ * This call will put the synth in "USB send" mode, i.e it will send MIDI
+ * messages through USB (this is disabled at startup). The synth will aknowledge
+ * by sending a sysex on endpoint 0x85 and by displaying a USB sign on its LCD.
+ * Values here are chosen based on sniffing USB traffic under Windows.
+ */
+static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
+{
+	int err, actual_length;
+	u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 }; /* "midi send" enable */
+
+	void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+	err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
+			ARRAY_SIZE(seq), &actual_length, 1000);
+	kfree(buf);
+	if (err < 0)
+		return err;
+
+	return 0;
+}
+
+/*
  * Setup quirks
  */
 #define AUDIOPHILE_SET			0x01 /* if set, parse device_setup */
@@ -3403,6 +3426,7 @@ static int snd_usb_create_quirk(struct snd_usb_audio *chip,
 		[QUIRK_MIDI_FASTLANE] = create_any_midi_quirk,
 		[QUIRK_MIDI_EMAGIC] = create_any_midi_quirk,
 		[QUIRK_MIDI_CME] = create_any_midi_quirk,
+		[QUIRK_MIDI_ACCESSMUSIC] = create_any_midi_quirk,
 		[QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
 		[QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
 		[QUIRK_AUDIO_EDIROL_UA1000] = create_ua1000_quirk,
@@ -3624,6 +3648,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
 			goto __err_val;
 	}
 
+	/* Access Music VirusTI Desktop */
+	if (id == USB_ID(0x133e, 0x0815)) {
+		if (snd_usb_accessmusic_boot_quirk(dev) < 0)
+			goto __err_val;
+	}
+
 	/*
 	 * found a config.  now register to ALSA
 	 */
diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
index 40ba811..b69b5bf 100644
--- a/sound/usb/usbaudio.h
+++ b/sound/usb/usbaudio.h
@@ -156,6 +156,7 @@ enum quirk_type {
 	QUIRK_MIDI_EMAGIC,
 	QUIRK_MIDI_CME,
 	QUIRK_MIDI_US122L,
+	QUIRK_MIDI_ACCESSMUSIC,
 	QUIRK_AUDIO_STANDARD_INTERFACE,
 	QUIRK_AUDIO_FIXED_ENDPOINT,
 	QUIRK_AUDIO_EDIROL_UA1000,
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 6e89b83..6e48606 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -1407,6 +1407,9 @@ static struct port_info {
 	EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
 	EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
 	EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
+	/* Access Music Virus TI */
+	EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
+	CONTROL_PORT(0x133e, 0x0815, 1, "%s Control"),
 };
 
 static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
@@ -1724,6 +1727,32 @@ static int snd_usbmidi_detect_per_port_endpoints(struct snd_usb_midi* umidi,
 }
 
 /*
+ * Detects the endpoints for Access Music Virus TI
+ */
+static int snd_usbmidi_detect_two_cables_per_endpoint(
+    struct snd_usb_midi *umidi,
+    struct snd_usb_midi_endpoint_info *endpoints)
+{
+	int err, i;
+
+	err = snd_usbmidi_detect_endpoints(umidi, endpoints,
+			MIDI_MAX_ENDPOINTS);
+	for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
+		if (endpoints[i].in_ep) {
+			snd_printdd("Creating 2 cables for input EP 0x%.2X\n",
+					endpoints[i].in_ep);
+			endpoints[i].in_cables = 0x0003;
+		}
+		if (endpoints[i].out_ep) {
+			snd_printdd("Creating 2 cables for output EP 0x%.2X\n",
+					endpoints[i].out_ep);
+			endpoints[i].out_cables = 0x0003;
+		}
+	}
+	return err;
+}
+
+/*
  * Detects the endpoints and ports of Yamaha devices.
  */
 static int snd_usbmidi_detect_yamaha(struct snd_usb_midi* umidi,
@@ -2002,6 +2031,10 @@ int snd_usbmidi_create(struct snd_card *card,
 		umidi->usb_protocol_ops = &snd_usbmidi_cme_ops;
 		err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
 		break;
+	case QUIRK_MIDI_ACCESSMUSIC:
+		err = snd_usbmidi_detect_two_cables_per_endpoint(umidi,
+				endpoints);
+		break;
 	default:
 		snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
 		err = -ENXIO;
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
index a892bda..759f824 100644
--- a/sound/usb/usbquirks.h
+++ b/sound/usb/usbquirks.h
@@ -2073,6 +2073,26 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 	}
 },
 
+/* Access Music devices */
+{
+	/* VirusTI Desktop */
+	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
+	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_COMPOSITE,
+		.data = &(const struct snd_usb_audio_quirk[]) {
+			{
+				/* "Virus TI MIDI" and "Virus TI Synth" */
+				.ifnum = 3,
+				.type = QUIRK_MIDI_ACCESSMUSIC,
+			},
+			{
+				.ifnum = -1
+			}
+		}
+	}
+},
+
 /* */
 {
 	/* aka. Serato Scratch Live DJ Box */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
  2010-02-11  8:01   ` Sebastien Alaiwan
@ 2010-02-11  8:46     ` Clemens Ladisch
  2010-02-11 19:39       ` Sebastien Alaiwan
  0 siblings, 1 reply; 7+ messages in thread
From: Clemens Ladisch @ 2010-02-11  8:46 UTC (permalink / raw)
  To: Sebastien Alaiwan; +Cc: linux-kernel, alsa-devel, Takashi Iwai

Sebastien Alaiwan wrote:
> Clemens Ladisch wrote:
>> Please run the checkpatch script on your patch.
> 
> Done!
> I did not know such a tool did exist, thank you for pointing this out. Is there
> a document I could read about such rules of thumb?

Documentation/CodingStyle
Documentation/SubmitChecklist
Documentation/SubmittingDrivers
Documentation/SubmittingPatches

>> Does this device use more than one endpoint per direction?  If not, this
>> could be done with QUIRK_MIDI_FIXED_ENDPOINT.
> 
> There's only one endpoint per direction, but there are two cables per endpoint:
> endpoint 0x05, cable 0 : physical MIDI output port of the device.
> endpoint 0x05, cable 1 : synth (output: send note-on, etc...)
> endpoint 0x85, cable 0 : physical MIDI input port of the device.
> endpoint 0x85, cable 1 : synth (input: recv sysex, controller changes)
> 
> Please correct me if I'm wrong, but it seems QUIRK_MIDI_FIXED_ENDPOINT would not
> do the job, otherwise where do I signal the number of cables?

With the bits in the out/in_cables fields.

> +	u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 }; /* "midi send" enable */

This should be static const.

> @@ -1407,6 +1407,9 @@ static struct port_info {
>  	EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
>  	EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
>  	EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
> +	/* Access Music Virus TI */
> +	EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
> +	CONTROL_PORT(0x133e, 0x0815, 1, "%s Control"),

According to your description, this is not a control port but should be
called "Synth".  There is no helper macro for a generic MIDI port; use
something like this:

PORT_INFO(0x133e, 0x0815, 1, "%s Synth", numberofvoices,
          SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
          SNDRV_SEQ_PORT_TYPE_MIDI_GM |
          SNDRV_SEQ_PORT_TYPE_HARDWARE |
          SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),

and add flags for any other supported MIDI standards.

> +	/* VirusTI Desktop */
> +	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
> +	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
> +		.ifnum = QUIRK_ANY_INTERFACE,
> +		.type = QUIRK_COMPOSITE,
> +		.data = &(const struct snd_usb_audio_quirk[]) {
> +			{
> +				/* "Virus TI MIDI" and "Virus TI Synth" */
> +				.ifnum = 3,
> +				.type = QUIRK_MIDI_ACCESSMUSIC,
> +			},
> +			{
> +				.ifnum = -1
> +			}
> +		}
> +	}
> +},

For only one interface, you don't need to use QUIRK_COMPOSITE; see the
entry for the UM-880.


Regards,
Clemens

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
  2010-02-11  8:46     ` Clemens Ladisch
@ 2010-02-11 19:39       ` Sebastien Alaiwan
  2010-02-12  9:24         ` Clemens Ladisch
  0 siblings, 1 reply; 7+ messages in thread
From: Sebastien Alaiwan @ 2010-02-11 19:39 UTC (permalink / raw)
  To: Clemens Ladisch; +Cc: linux-kernel, alsa-devel, Takashi Iwai

Hello,

Thanks for your advice!

Clemens Ladisch wrote:
> For only one interface, you don't need to use QUIRK_COMPOSITE; see the
> entry for the UM-880.

I've replaced the QUIRK_COMPOSITE by a QUIRK_MIDI_FIXED_ENDPOINT, the module also probes (and fails) the USB interface 4 (I don't know what this interface is for on this device) which results in the printing of an error in the kernel log. How can I inform the snd-usb-audio driver that the USB interface 4 should be left alone?

Please find an updated (and shrinked!) patch below.

Signed-off-by: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
---
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 9edef46..aaf8f7c 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3327,6 +3327,31 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
 }
 
 /*
+ * This call will put the synth in "USB send" mode, i.e it will send MIDI
+ * messages through USB (this is disabled at startup). The synth will aknowledge
+ * by sending a sysex on endpoint 0x85 and by displaying a USB sign on its LCD.
+ * Values here are chosen based on sniffing USB traffic under Windows.
+ */
+static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
+{
+	int err, actual_length;
+
+	/* "midi send" enable */
+	static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
+
+	void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+	err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
+			ARRAY_SIZE(seq), &actual_length, 1000);
+	kfree(buf);
+	if (err < 0)
+		return err;
+
+	return 0;
+}
+
+/*
  * Setup quirks
  */
 #define AUDIOPHILE_SET			0x01 /* if set, parse device_setup */
@@ -3624,6 +3649,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
 			goto __err_val;
 	}
 
+	/* Access Music VirusTI Desktop */
+	if (id == USB_ID(0x133e, 0x0815)) {
+		if (snd_usb_accessmusic_boot_quirk(dev) < 0)
+			goto __err_val;
+	}
+
 	/*
 	 * found a config.  now register to ALSA
 	 */
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 6e89b83..8f5bc1e 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -1407,6 +1407,12 @@ static struct port_info {
 	EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
 	EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
 	EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
+	/* Access Music Virus TI */
+	EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
+	PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0,
+		SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
+		SNDRV_SEQ_PORT_TYPE_HARDWARE |
+		SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),
 };
 
 static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
index a892bda..853788d 100644
--- a/sound/usb/usbquirks.h
+++ b/sound/usb/usbquirks.h
@@ -2073,6 +2073,20 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 	}
 },
 
+/* Access Music devices */
+{
+	/* VirusTI Desktop */
+	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
+	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
+		.ifnum = 3,
+		.type = QUIRK_MIDI_FIXED_ENDPOINT,
+		.data = &(const struct snd_usb_midi_endpoint_info) {
+			.out_cables = 0x0003,
+			.in_cables  = 0x0003
+		}
+	}
+},
+
 /* */
 {
 	/* aka. Serato Scratch Live DJ Box */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
  2010-02-11 19:39       ` Sebastien Alaiwan
@ 2010-02-12  9:24         ` Clemens Ladisch
  2010-02-16  7:40           ` Sebastien Alaiwan
  0 siblings, 1 reply; 7+ messages in thread
From: Clemens Ladisch @ 2010-02-12  9:24 UTC (permalink / raw)
  To: Sebastien Alaiwan; +Cc: Takashi Iwai, alsa-devel, linux-kernel

Sebastien Alaiwan wrote:
> I've replaced the QUIRK_COMPOSITE by a QUIRK_MIDI_FIXED_ENDPOINT, the
> module also probes (and fails) the USB interface 4 (I don't know
> what this interface is for on this device) which results in the
> printing of an error in the kernel log. How can I inform the
> snd-usb-audio driver that the USB interface 4 should be left alone?

With a QUIRK_IGNORE_INTERFACE for that interface.  This means you need
QUIRK_COMPOSITE again.


HTH
Clemens

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
  2010-02-12  9:24         ` Clemens Ladisch
@ 2010-02-16  7:40           ` Sebastien Alaiwan
  2010-02-16  8:34             ` Clemens Ladisch
  0 siblings, 1 reply; 7+ messages in thread
From: Sebastien Alaiwan @ 2010-02-16  7:40 UTC (permalink / raw)
  To: Clemens Ladisch; +Cc: linux-kernel, alsa-devel, Takashi Iwai

Clemens Ladisch wrote:
> Sebastien Alaiwan wrote:
>> I've replaced the QUIRK_COMPOSITE by a QUIRK_MIDI_FIXED_ENDPOINT, the
>> module also probes (and fails) the USB interface 4 (I don't know
>> what this interface is for on this device) which results in the
>> printing of an error in the kernel log. How can I inform the
>> snd-usb-audio driver that the USB interface 4 should be left alone?
> 
> With a QUIRK_IGNORE_INTERFACE for that interface.  This means you need
> QUIRK_COMPOSITE again.
> 
> 
> HTH
> Clemens

Ok, this is done.
Here's an updated patch.

Thank you for your help!
Sebastien Alaiwan


---
Signed-off-by: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 9edef46..aaf8f7c 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3327,6 +3327,31 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
 }
 
 /*
+ * This call will put the synth in "USB send" mode, i.e it will send MIDI
+ * messages through USB (this is disabled at startup). The synth will aknowledge
+ * by sending a sysex on endpoint 0x85 and by displaying a USB sign on its LCD.
+ * Values here are chosen based on sniffing USB traffic under Windows.
+ */
+static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
+{
+	int err, actual_length;
+
+	/* "midi send" enable */
+	static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
+
+	void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+	err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
+			ARRAY_SIZE(seq), &actual_length, 1000);
+	kfree(buf);
+	if (err < 0)
+		return err;
+
+	return 0;
+}
+
+/*
  * Setup quirks
  */
 #define AUDIOPHILE_SET			0x01 /* if set, parse device_setup */
@@ -3624,6 +3649,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
 			goto __err_val;
 	}
 
+	/* Access Music VirusTI Desktop */
+	if (id == USB_ID(0x133e, 0x0815)) {
+		if (snd_usb_accessmusic_boot_quirk(dev) < 0)
+			goto __err_val;
+	}
+
 	/*
 	 * found a config.  now register to ALSA
 	 */
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 6e89b83..8f5bc1e 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -1407,6 +1407,12 @@ static struct port_info {
 	EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
 	EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
 	EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
+	/* Access Music Virus TI */
+	EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
+	PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0,
+		SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
+		SNDRV_SEQ_PORT_TYPE_HARDWARE |
+		SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),
 };
 
 static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
index a892bda..ef8f96c 100644
--- a/sound/usb/usbquirks.h
+++ b/sound/usb/usbquirks.h
@@ -2073,6 +2073,31 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 	}
 },
 
+/* Access Music devices */
+{
+	/* VirusTI Desktop */
+	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
+	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_COMPOSITE,
+		.data = &(const struct snd_usb_audio_quirk[]) {
+			{
+				.ifnum = 3,
+				.type = QUIRK_MIDI_FIXED_ENDPOINT,
+				.data = &(const struct
+						snd_usb_midi_endpoint_info) {
+						.out_cables = 0x0003,
+						.in_cables  = 0x0003
+					}
+			},
+			{
+				.ifnum = 4,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+		}
+	}
+},
+
 /* */
 {
 	/* aka. Serato Scratch Live DJ Box */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH][ALSA] usbmidi support for Access Music synths.
  2010-02-16  7:40           ` Sebastien Alaiwan
@ 2010-02-16  8:34             ` Clemens Ladisch
  0 siblings, 0 replies; 7+ messages in thread
From: Clemens Ladisch @ 2010-02-16  8:34 UTC (permalink / raw)
  To: Sebastien Alaiwan; +Cc: Takashi Iwai, alsa-devel, linux-kernel

Sebastien Alaiwan wrote:
> Clemens Ladisch wrote:
>> Sebastien Alaiwan wrote:
>>> How can I inform the
>>> snd-usb-audio driver that the USB interface 4 should be left alone?
>> 
>> With a QUIRK_IGNORE_INTERFACE for that interface.  This means you need
>> QUIRK_COMPOSITE again.
> 
> Ok, this is done.
> Here's an updated patch.

Applied; thanks!


Clemens

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-02-16  8:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <4B726306.8070506@gmail.com>
2010-02-10  8:56 ` [PATCH][ALSA] usbmidi support for Access Music synths Clemens Ladisch
2010-02-11  8:01   ` Sebastien Alaiwan
2010-02-11  8:46     ` Clemens Ladisch
2010-02-11 19:39       ` Sebastien Alaiwan
2010-02-12  9:24         ` Clemens Ladisch
2010-02-16  7:40           ` Sebastien Alaiwan
2010-02-16  8:34             ` Clemens Ladisch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).