diff options
| -rw-r--r-- | drivers/usb/gadget/function/f_midi.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c index 0e411bffa4ab..84c0ee5ebd1e 100644 --- a/drivers/usb/gadget/function/f_midi.c +++ b/drivers/usb/gadget/function/f_midi.c | |||
| @@ -56,6 +56,7 @@ static const char f_midi_longname[] = "MIDI Gadget"; | |||
| 56 | * USB <- IN endpoint <- rawmidi | 56 | * USB <- IN endpoint <- rawmidi |
| 57 | */ | 57 | */ |
| 58 | struct gmidi_in_port { | 58 | struct gmidi_in_port { |
| 59 | struct snd_rawmidi_substream *substream; | ||
| 59 | int active; | 60 | int active; |
| 60 | uint8_t cable; | 61 | uint8_t cable; |
| 61 | uint8_t state; | 62 | uint8_t state; |
| @@ -77,7 +78,6 @@ struct f_midi { | |||
| 77 | struct snd_rawmidi *rmidi; | 78 | struct snd_rawmidi *rmidi; |
| 78 | u8 ms_id; | 79 | u8 ms_id; |
| 79 | 80 | ||
| 80 | struct snd_rawmidi_substream *in_substream[MAX_PORTS]; | ||
| 81 | struct snd_rawmidi_substream *out_substream[MAX_PORTS]; | 81 | struct snd_rawmidi_substream *out_substream[MAX_PORTS]; |
| 82 | 82 | ||
| 83 | unsigned long out_triggered; | 83 | unsigned long out_triggered; |
| @@ -520,7 +520,7 @@ static void f_midi_drop_out_substreams(struct f_midi *midi) | |||
| 520 | 520 | ||
| 521 | for (i = 0; i < midi->in_ports; i++) { | 521 | for (i = 0; i < midi->in_ports; i++) { |
| 522 | struct gmidi_in_port *port = midi->in_ports_array + i; | 522 | struct gmidi_in_port *port = midi->in_ports_array + i; |
| 523 | struct snd_rawmidi_substream *substream = midi->in_substream[i]; | 523 | struct snd_rawmidi_substream *substream = port->substream; |
| 524 | if (port->active && substream) | 524 | if (port->active && substream) |
| 525 | snd_rawmidi_drop_output(substream); | 525 | snd_rawmidi_drop_output(substream); |
| 526 | } | 526 | } |
| @@ -554,7 +554,7 @@ static int f_midi_do_transmit(struct f_midi *midi, struct usb_ep *ep) | |||
| 554 | 554 | ||
| 555 | for (i = midi->in_last_port; i < midi->in_ports; ++i) { | 555 | for (i = midi->in_last_port; i < midi->in_ports; ++i) { |
| 556 | struct gmidi_in_port *port = midi->in_ports_array + i; | 556 | struct gmidi_in_port *port = midi->in_ports_array + i; |
| 557 | struct snd_rawmidi_substream *substream = midi->in_substream[i]; | 557 | struct snd_rawmidi_substream *substream = port->substream; |
| 558 | 558 | ||
| 559 | if (!port->active || !substream) | 559 | if (!port->active || !substream) |
| 560 | continue; | 560 | continue; |
| @@ -623,13 +623,15 @@ static void f_midi_in_tasklet(unsigned long data) | |||
| 623 | static int f_midi_in_open(struct snd_rawmidi_substream *substream) | 623 | static int f_midi_in_open(struct snd_rawmidi_substream *substream) |
| 624 | { | 624 | { |
| 625 | struct f_midi *midi = substream->rmidi->private_data; | 625 | struct f_midi *midi = substream->rmidi->private_data; |
| 626 | struct gmidi_in_port *port; | ||
| 626 | 627 | ||
| 627 | if (substream->number >= midi->in_ports) | 628 | if (substream->number >= midi->in_ports) |
| 628 | return -EINVAL; | 629 | return -EINVAL; |
| 629 | 630 | ||
| 630 | VDBG(midi, "%s()\n", __func__); | 631 | VDBG(midi, "%s()\n", __func__); |
| 631 | midi->in_substream[substream->number] = substream; | 632 | port = midi->in_ports_array + substream->number; |
| 632 | midi->in_ports_array[substream->number].state = STATE_UNKNOWN; | 633 | port->substream = substream; |
| 634 | port->state = STATE_UNKNOWN; | ||
| 633 | return 0; | 635 | return 0; |
| 634 | } | 636 | } |
| 635 | 637 | ||
