From: "Felipe F. Tonello" <eu@felipetonello.com>
To: linux-usb@vger.kernel.org
Cc: Felipe Balbi <balbi@kernel.org>, linux-kernel@vger.kernel.org
Subject: [PATCH 4/4] usb: gadget: f_midi: drop substreams when disabling endpoint
Date: Tue, 26 Jul 2016 00:15:06 +0100 [thread overview]
Message-ID: <20160725231506.3426-5-eu@felipetonello.com> (raw)
In-Reply-To: <20160725231506.3426-1-eu@felipetonello.com>
This change makes sure that the ALSA buffers are cleaned if an endpoint
becomes disabled.
Before this change, if the internal ALSA buffer did overflow, the MIDI
function would stop sending MIDI to the host.
Signed-off-by: Felipe F. Tonello <eu@felipetonello.com>
---
drivers/usb/gadget/function/f_midi.c | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index 49328f208a63..fdfdd357e15c 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -305,6 +305,19 @@ f_midi_complete(struct usb_ep *ep, struct usb_request *req)
}
}
+static void f_midi_drop_out_substreams(struct f_midi *midi)
+{
+ unsigned int i;
+
+ for (i = 0; i < midi->in_ports; i++) {
+ struct gmidi_in_port *port = midi->in_ports_array + i;
+ struct snd_rawmidi_substream *substream = port->substream;
+
+ if (port->active && substream)
+ snd_rawmidi_drop_output(substream);
+ }
+}
+
static int f_midi_start_ep(struct f_midi *midi,
struct usb_function *f,
struct usb_ep *ep)
@@ -403,6 +416,8 @@ static void f_midi_disable(struct usb_function *f)
/* release IN requests */
while (kfifo_get(&midi->in_req_fifo, &req))
free_ep_req(midi->in_ep, req);
+
+ f_midi_drop_out_substreams(midi);
}
static int f_midi_snd_free(struct snd_device *device)
@@ -572,18 +587,6 @@ static void f_midi_transmit_byte(struct usb_request *req,
port->state = next_state;
}
-static void f_midi_drop_out_substreams(struct f_midi *midi)
-{
- unsigned int i;
-
- for (i = 0; i < midi->in_ports; i++) {
- struct gmidi_in_port *port = midi->in_ports_array + i;
- struct snd_rawmidi_substream *substream = port->substream;
- if (port->active && substream)
- snd_rawmidi_drop_output(substream);
- }
-}
-
static int f_midi_do_transmit(struct f_midi *midi, struct usb_ep *ep)
{
struct usb_request *req = NULL;
--
2.9.2
prev parent reply other threads:[~2016-07-25 23:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-25 23:15 [PATCH 0/4] MIDI Function improvements Felipe F. Tonello
2016-07-25 23:15 ` [PATCH 1/4] usb: gadget: f_midi: fixed endianness when using wMaxPacketSize Felipe F. Tonello
2016-07-26 1:51 ` Baolin Wang
2016-08-10 11:24 ` Felipe Balbi
2016-08-11 8:37 ` Felipe Ferreri Tonello
2016-07-25 23:15 ` [PATCH 2/4] usb: gadget: f_midi: defaults buflen sizes to 512 Felipe F. Tonello
2016-08-10 11:25 ` Felipe Balbi
2016-08-11 8:34 ` Felipe Ferreri Tonello
2016-07-25 23:15 ` [PATCH 3/4] usb: gadget: f_midi: refactor state machine Felipe F. Tonello
2016-07-25 23:15 ` Felipe F. Tonello [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160725231506.3426-5-eu@felipetonello.com \
--to=eu@felipetonello.com \
--cc=balbi@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®