diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c index f7629cbe01a3e3c6489301e2ef21066f153eef2f..fc852f6ab8bc663ea70783ecfd440dff719d7a40 100644 --- a/drivers/staging/line6/driver.c +++ b/drivers/staging/line6/driver.c @@ -1017,48 +1017,7 @@ static void line6_disconnect(struct usb_interface *interface) dev_err(line6->ifcdev, "driver bug: inconsistent usb device\n"); - switch (line6->type) { - case LINE6_BASSPODXT: - case LINE6_BASSPODXTLIVE: - case LINE6_BASSPODXTPRO: - case LINE6_POCKETPOD: - case LINE6_PODXT: - case LINE6_PODXTPRO: - line6_pod_disconnect(interface); - break; - - case LINE6_PODHD300: - case LINE6_PODHD400: - case LINE6_PODHD500_0: - case LINE6_PODHD500_1: - line6_podhd_disconnect(interface); - break; - - case LINE6_PODXTLIVE_POD: - line6_pod_disconnect(interface); - break; - - case LINE6_PODXTLIVE_VARIAX: - line6_variax_disconnect(interface); - break; - - case LINE6_VARIAX: - line6_variax_disconnect(interface); - break; - - case LINE6_PODSTUDIO_GX: - case LINE6_PODSTUDIO_UX1: - case LINE6_PODSTUDIO_UX2: - case LINE6_TONEPORT_GX: - case LINE6_TONEPORT_UX1: - case LINE6_TONEPORT_UX2: - case LINE6_GUITARPORT: - line6_toneport_disconnect(interface); - break; - - default: - MISSING_CASE; - } + line6->disconnect(interface); dev_info(&interface->dev, "Line6 %s now disconnected\n", line6->properties->name); diff --git a/drivers/staging/line6/driver.h b/drivers/staging/line6/driver.h index 220813f1cbb958984c8316d705a5fc0371bcb337..ad203f197e80569ae434307b2a4a1cbbcaf9ec70 100644 --- a/drivers/staging/line6/driver.h +++ b/drivers/staging/line6/driver.h @@ -196,6 +196,7 @@ struct usb_line6 { int message_length; void (*process_message)(struct usb_line6 *); + void (*disconnect)(struct usb_interface *); }; extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1, diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c index 79dcff4ae5a78ee54dc90f48024fe353883d879d..b9af5cf50ecfd50db46903a794d950b5456cafb9 100644 --- a/drivers/staging/line6/pod.c +++ b/drivers/staging/line6/pod.c @@ -360,6 +360,7 @@ static int pod_try_init(struct usb_interface *interface, struct usb_line6_pod *pod = (struct usb_line6_pod *) line6; line6->process_message = line6_pod_process_message; + line6->disconnect = line6_pod_disconnect; init_timer(&pod->startup_timer); INIT_WORK(&pod->startup_work, pod_startup4); diff --git a/drivers/staging/line6/podhd.c b/drivers/staging/line6/podhd.c index 3bb942e7ff93a268bc6a69be57d9a3fef2b4838e..a57fbce3503e93093b6c173d83ee43f0e1e125be 100644 --- a/drivers/staging/line6/podhd.c +++ b/drivers/staging/line6/podhd.c @@ -98,6 +98,8 @@ static int podhd_try_init(struct usb_interface *interface, if ((interface == NULL) || (podhd == NULL)) return -ENODEV; + line6->disconnect = line6_podhd_disconnect; + /* initialize audio system: */ err = line6_init_audio(line6); if (err < 0) diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c index de91910a102c690690b19d6260389060ebc6e920..5c462b72a850ccd9ff180ef448f76630762e70fd 100644 --- a/drivers/staging/line6/toneport.c +++ b/drivers/staging/line6/toneport.c @@ -347,6 +347,8 @@ static int toneport_try_init(struct usb_interface *interface, if ((interface == NULL) || (toneport == NULL)) return -ENODEV; + line6->disconnect = line6_toneport_disconnect; + /* initialize audio system: */ err = line6_init_audio(line6); if (err < 0) diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c index ccb1f689e33504013974c524e435dbf8a19c19d3..ca25b41ea88bac0860b1041fdf0d62a37f165d7d 100644 --- a/drivers/staging/line6/variax.c +++ b/drivers/staging/line6/variax.c @@ -181,6 +181,7 @@ static int variax_try_init(struct usb_interface *interface, int err; line6->process_message = line6_variax_process_message; + line6->disconnect = line6_variax_disconnect; init_timer(&variax->startup_timer1); init_timer(&variax->startup_timer2);