aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/function/f_midi.c12
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 */
58struct gmidi_in_port { 58struct 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)
623static int f_midi_in_open(struct snd_rawmidi_substream *substream) 623static 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