staging: line6: clean up line6_pod_process_message()
authorStefan Hajnoczi <stefanha@gmail.com>
Sat, 19 Jan 2013 10:18:43 +0000 (11:18 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 20 Jan 2013 23:57:47 +0000 (15:57 -0800)
Previous versions of the line6 driver snooped MIDI traffic in order to
make device state accessible via sysfs attributes.  This involved a lot
of logic in line6_pod_process_message() that has since been removed.

Drop unused conditionals in line6_pod_process_message() and reduce the
levels of indentation.  Only two MIDI messages are still tracked: the
POD version message on startup and monitor level changes originating
from the device.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/line6/pod.c

index ba6fed4..74898c3 100644 (file)
@@ -135,85 +135,27 @@ void line6_pod_process_message(struct usb_line6_pod *pod)
 {
        const unsigned char *buf = pod->line6.buffer_message;
 
-       /* filter messages by type */
-       switch (buf[0] & 0xf0) {
-       case LINE6_PARAM_CHANGE:
-       case LINE6_PROGRAM_CHANGE:
-       case LINE6_SYSEX_BEGIN:
-               break;          /* handle these further down */
-
-       default:
-               return;         /* ignore all others */
+       if (memcmp(buf, pod_version_header, sizeof(pod_version_header)) == 0) {
+               pod->firmware_version = buf[13] * 100 + buf[14] * 10 + buf[15];
+               pod->device_id = ((int)buf[8] << 16) | ((int)buf[9] << 8) |
+                                (int) buf[10];
+               pod_startup3(pod);
+               return;
+       }
+
+       /* Only look for sysex messages from this device */
+       if (buf[0] != (LINE6_SYSEX_BEGIN | LINE6_CHANNEL_DEVICE) &&
+           buf[0] != (LINE6_SYSEX_BEGIN | LINE6_CHANNEL_UNKNOWN)) {
+               return;
+       }
+       if (memcmp(buf + 1, line6_midi_id, sizeof(line6_midi_id)) != 0) {
+               return;
        }
 
-       /* process all remaining messages */
-       switch (buf[0]) {
-       case LINE6_PARAM_CHANGE | LINE6_CHANNEL_DEVICE:
-       case LINE6_PARAM_CHANGE | LINE6_CHANNEL_HOST:
-               break;
-
-       case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_DEVICE:
-       case LINE6_PROGRAM_CHANGE | LINE6_CHANNEL_HOST:
-               break;
-
-       case LINE6_SYSEX_BEGIN | LINE6_CHANNEL_DEVICE:
-       case LINE6_SYSEX_BEGIN | LINE6_CHANNEL_UNKNOWN:
-               if (memcmp(buf + 1, line6_midi_id,
-                          sizeof(line6_midi_id)) == 0) {
-                       switch (buf[5]) {
-                       case POD_SYSEX_DUMP:
-                               break;
-
-                       case POD_SYSEX_SYSTEM:{
-                                       short value =
-                                           ((int)buf[7] << 12) | ((int)buf[8]
-                                                                  << 8) |
-                                           ((int)buf[9] << 4) | (int)buf[10];
-
-                                       if (buf[6] == POD_MONITOR_LEVEL)
-                                               pod->monitor_level = value;
-                                       break;
-                               }
-
-                       case POD_SYSEX_FINISH:
-                               /* do we need to respond to this? */
-                               break;
-
-                       case POD_SYSEX_SAVE:
-                               break;
-
-                       case POD_SYSEX_STORE:
-                               dev_dbg(pod->line6.ifcdev,
-                                       "message %02X not yet implemented\n",
-                                       buf[5]);
-                               break;
-
-                       default:
-                               dev_dbg(pod->line6.ifcdev,
-                                       "unknown sysex message %02X\n",
-                                       buf[5]);
-                       }
-               } else
-                   if (memcmp
-                       (buf, pod_version_header,
-                        sizeof(pod_version_header)) == 0) {
-                       pod->firmware_version =
-                           buf[13] * 100 + buf[14] * 10 + buf[15];
-                       pod->device_id =
-                           ((int)buf[8] << 16) | ((int)buf[9] << 8) | (int)
-                           buf[10];
-                       pod_startup3(pod);
-               } else
-                       dev_dbg(pod->line6.ifcdev, "unknown sysex header\n");
-
-               break;
-
-       case LINE6_SYSEX_END:
-               break;
-
-       default:
-               dev_dbg(pod->line6.ifcdev, "POD: unknown message %02X\n",
-                       buf[0]);
+       if (buf[5] == POD_SYSEX_SYSTEM && buf[6] == POD_MONITOR_LEVEL) {
+               short value = ((int)buf[7] << 12) | ((int)buf[8] << 8) |
+                             ((int)buf[9] << 4) | (int)buf[10];
+               pod->monitor_level = value;
        }
 }