This makes sure f_midi doesn't try to enqueue data when the IN endpoint is
disabled, ie, USB cable is disconnected.

Signed-off-by: Felipe F. Tonello <e...@felipetonello.com>
---
 drivers/usb/gadget/function/f_midi.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/function/f_midi.c 
b/drivers/usb/gadget/function/f_midi.c
index 163c0ce..bbfe43b 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -87,6 +87,7 @@ struct f_midi {
        int index;
        char *id;
        unsigned int buflen, qlen;
+       bool in_ep_enabled;
 };
 
 static inline struct f_midi *func_to_midi(struct usb_function *f)
@@ -331,6 +332,7 @@ static int f_midi_set_alt(struct usb_function *f, unsigned 
intf, unsigned alt)
        err = f_midi_start_ep(midi, f, midi->in_ep);
        if (err)
                return err;
+       midi->in_ep_enabled = true;
 
        err = f_midi_start_ep(midi, f, midi->out_ep);
        if (err)
@@ -386,6 +388,8 @@ static void f_midi_disable(struct usb_function *f)
         */
        usb_ep_disable(midi->in_ep);
        usb_ep_disable(midi->out_ep);
+
+       midi->in_ep_enabled = false;
 }
 
 static int f_midi_snd_free(struct snd_device *device)
@@ -542,7 +546,7 @@ static void f_midi_transmit(struct f_midi *midi, struct 
usb_request *req)
                }
        }
 
-       if (req->length > 0) {
+       if (req->length > 0 && midi->in_ep_enabled) {
                int err;
 
                err = usb_ep_queue(ep, req, GFP_ATOMIC);
@@ -1159,6 +1163,7 @@ static struct usb_function *f_midi_alloc(struct 
usb_function_instance *fi)
        midi->index = opts->index;
        midi->buflen = opts->buflen;
        midi->qlen = opts->qlen;
+       midi->in_ep_enabled = false;
        ++opts->refcnt;
        mutex_unlock(&opts->lock);
 
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to