]> git.karo-electronics.de Git - linux-beck.git/commitdiff
staging: line6: Call *_process_message() via pointer
authorChris Rorvick <chris@rorvick.com>
Mon, 12 Jan 2015 20:42:58 +0000 (12:42 -0800)
committerTakashi Iwai <tiwai@suse.de>
Mon, 12 Jan 2015 21:24:10 +0000 (22:24 +0100)
Which *_process_message() function (if any) to call when data is
received is known at initialization.  Add a function pointer to the
`usb_line6' struct and use to call into the appropriate logic instead
of evaluating the conditional logic for each message.

Signed-off-by: Chris Rorvick <chris@rorvick.com>
Reviewed-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
drivers/staging/line6/driver.c
drivers/staging/line6/driver.h
drivers/staging/line6/pod.c
drivers/staging/line6/pod.h
drivers/staging/line6/variax.c
drivers/staging/line6/variax.h

index 369e60e070e11a11982141f8c1c69eb4aa7a6821..f7629cbe01a3e3c6489301e2ef21066f153eef2f 100644 (file)
@@ -537,37 +537,8 @@ static void line6_data_received(struct urb *urb)
                line6->message_length = done;
                line6_midi_receive(line6, line6->buffer_message, done);
 
-               switch (line6->type) {
-               case LINE6_BASSPODXT:
-               case LINE6_BASSPODXTLIVE:
-               case LINE6_BASSPODXTPRO:
-               case LINE6_PODXT:
-               case LINE6_PODXTPRO:
-               case LINE6_POCKETPOD:
-                       line6_pod_process_message(line6);
-                       break;
-
-               case LINE6_PODHD300:
-               case LINE6_PODHD400:
-               case LINE6_PODHD500_0:
-               case LINE6_PODHD500_1:
-                       break; /* let userspace handle MIDI */
-
-               case LINE6_PODXTLIVE_POD:
-                       line6_pod_process_message(line6);
-                       break;
-
-               case LINE6_PODXTLIVE_VARIAX:
-                       line6_variax_process_message(line6);
-                       break;
-
-               case LINE6_VARIAX:
-                       line6_variax_process_message(line6);
-                       break;
-
-               default:
-                       MISSING_CASE;
-               }
+               if (line6->process_message)
+                       line6->process_message(line6);
        }
 
        line6_start_listen(line6);
index a4bde717e79066a34d41ebcba372377cdfcbb176..220813f1cbb958984c8316d705a5fc0371bcb337 100644 (file)
@@ -194,6 +194,8 @@ struct usb_line6 {
                 Length of message to be processed.
        */
        int message_length;
+
+       void (*process_message)(struct usb_line6 *);
 };
 
 extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1,
index aa8977d1814f38fee53ad8a9f35b2e0f554fb04b..79dcff4ae5a78ee54dc90f48024fe353883d879d 100644 (file)
@@ -131,7 +131,7 @@ static char *pod_alloc_sysex_buffer(struct usb_line6_pod *pod, int code,
 /*
        Process a completely received message.
 */
-void line6_pod_process_message(struct usb_line6 *line6)
+static void line6_pod_process_message(struct usb_line6 *line6)
 {
        struct usb_line6_pod *pod = (struct usb_line6_pod *) line6;
        const unsigned char *buf = pod->line6.buffer_message;
@@ -359,6 +359,8 @@ static int pod_try_init(struct usb_interface *interface,
        int err;
        struct usb_line6_pod *pod = (struct usb_line6_pod *) line6;
 
+       line6->process_message = line6_pod_process_message;
+
        init_timer(&pod->startup_timer);
        INIT_WORK(&pod->startup_work, pod_startup4);
 
index 984a00bd294ddf8bf2dba36fdf353e82399358fd..0d78ca76a72f2737e0fec77aaee0b0d48e202a9a 100644 (file)
@@ -89,6 +89,5 @@ struct usb_line6_pod {
 extern void line6_pod_disconnect(struct usb_interface *interface);
 extern int line6_pod_init(struct usb_interface *interface,
                          struct usb_line6 *line6);
-extern void line6_pod_process_message(struct usb_line6 *line6);
 
 #endif
index 4d419940a6bb8e2e7ce7520e0648e936867245d2..ccb1f689e33504013974c524e435dbf8a19c19d3 100644 (file)
@@ -130,7 +130,7 @@ static void variax_startup6(struct work_struct *work)
 /*
        Process a completely received message.
 */
-void line6_variax_process_message(struct usb_line6 *line6)
+static void line6_variax_process_message(struct usb_line6 *line6)
 {
        struct usb_line6_variax *variax = (struct usb_line6_variax *) line6;
        const unsigned char *buf = variax->line6.buffer_message;
@@ -180,6 +180,8 @@ static int variax_try_init(struct usb_interface *interface,
        struct usb_line6_variax *variax = (struct usb_line6_variax *) line6;
        int err;
 
+       line6->process_message = line6_variax_process_message;
+
        init_timer(&variax->startup_timer1);
        init_timer(&variax->startup_timer2);
        INIT_WORK(&variax->startup_work, variax_startup6);
index 7d445ff8c9dca7cd0261b168a35ce4df2cd3a864..f21ff2030f018871216d2e6920d2e870b4a12431 100644 (file)
@@ -67,6 +67,5 @@ struct usb_line6_variax {
 extern void line6_variax_disconnect(struct usb_interface *interface);
 extern int line6_variax_init(struct usb_interface *interface,
                             struct usb_line6 *line6);
-extern void line6_variax_process_message(struct usb_line6 *line6);
 
 #endif