summaryrefslogtreecommitdiff
path: root/sound/firewire
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2015-10-20 23:46:58 +0900
committerTakashi Iwai <tiwai@suse.de>2015-10-20 17:49:15 +0200
commit123990e930ac1213df2dfa0e2d57cfc0e1dd5e02 (patch)
tree71ecd11a271221c0ae78abfbe8a7a92a95f683e1 /sound/firewire
parentb7ab614f301741ae3cb61fb6a90e290083d3b95d (diff)
ALSA: firewire-tascam: fix loop condition with some readable variables
In transactions for MIDI messages, the first byte is used for label and the rest is for MIDI bytes. In current code, these are handled correctly, while there's a small mistake for loop condition to include meaningless statement. This commit adds two local variables for them and improve the loop condition. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire')
-rw-r--r--sound/firewire/tascam/tascam-transaction.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/sound/firewire/tascam/tascam-transaction.c b/sound/firewire/tascam/tascam-transaction.c
index ea88655e7e08..99098aa2391e 100644
--- a/sound/firewire/tascam/tascam-transaction.c
+++ b/sound/firewire/tascam/tascam-transaction.c
@@ -63,17 +63,22 @@ static int fill_message(struct snd_rawmidi_substream *substream, u8 *buf)
struct snd_tscm *tscm = substream->rmidi->private_data;
unsigned int port = substream->number;
int i, len, consume;
+ u8 *label, *msg;
u8 status;
- consume = snd_rawmidi_transmit_peek(substream, buf + 1, 3);
+ /* The first byte is used for label, the rest for MIDI bytes. */
+ label = buf;
+ msg = buf + 1;
+
+ consume = snd_rawmidi_transmit_peek(substream, msg, 3);
if (consume == 0)
return 0;
/* On exclusive message. */
if (tscm->on_sysex[port]) {
/* Seek the end of exclusives. */
- for (i = 1; i < 4 || i < consume; ++i) {
- if (buf[i] == 0xf7) {
+ for (i = 0; i < consume; ++i) {
+ if (msg[i] == 0xf7) {
tscm->on_sysex[port] = false;
break;
}
@@ -81,27 +86,27 @@ static int fill_message(struct snd_rawmidi_substream *substream, u8 *buf)
/* At the end of exclusive message, use label 0x07. */
if (!tscm->on_sysex[port]) {
- consume = i;
- buf[0] = (port << 4) | 0x07;
+ consume = i + 1;
+ *label = (port << 4) | 0x07;
/* During exclusive message, use label 0x04. */
} else if (consume == 3) {
- buf[0] = (port << 4) | 0x04;
+ *label = (port << 4) | 0x04;
/* We need to fill whole 3 bytes. Go to next change. */
} else {
consume = 0;
}
} else {
/* The beginning of exclusives. */
- if (buf[1] == 0xf0) {
+ if (msg[0] == 0xf0) {
/* Transfer it in next chance in another condition. */
tscm->on_sysex[port] = true;
return 0;
} else {
/* On running-status. */
- if ((buf[1] & 0x80) != 0x80)
+ if ((msg[0] & 0x80) != 0x80)
status = tscm->running_status[port];
else
- status = buf[1];
+ status = msg[0];
/* Calculate consume bytes. */
len = calculate_message_bytes(status);
@@ -109,13 +114,13 @@ static int fill_message(struct snd_rawmidi_substream *substream, u8 *buf)
return 0;
/* On running-status. */
- if ((buf[1] & 0x80) != 0x80) {
- buf[3] = buf[2];
- buf[2] = buf[1];
- buf[1] = tscm->running_status[port];
+ if ((msg[0] & 0x80) != 0x80) {
+ msg[2] = msg[1];
+ msg[1] = msg[0];
+ msg[0] = tscm->running_status[port];
consume--;
} else {
- tscm->running_status[port] = buf[1];
+ tscm->running_status[port] = msg[0];
}
/* Confirm length. */
@@ -125,7 +130,7 @@ static int fill_message(struct snd_rawmidi_substream *substream, u8 *buf)
consume = len;
}
- buf[0] = (port << 4) | (buf[1] >> 4);
+ *label = (port << 4) | (msg[0] >> 4);
}
return consume;