--- x/sound/usb/card.c
+++ y/sound/usb/card.c
@@ -932,10 +932,14 @@ static int usb_audio_probe(struct usb_in
 
  __error_no_register:
 	if (chip) {
+		struct list_head *p;
 		/* chip->active is inside the chip->card object,
 		 * decrement before memory is possibly returned.
 		 */
 		atomic_dec(&chip->active);
+		list_for_each(p, &chip->midi_list) {
+			snd_usbmidi_disconnect(p);
+		}
 		if (!chip->num_interfaces)
 			snd_card_free(chip->card);
 	}