When selecting different alt setting, s3c_hsotg_ep_enable can be
called with fifo already allocated. Allocate fifo again only if
required and after deallocating the previous fifo.

Signed-off-by: Mian Yousaf Kaukab <[email protected]>
---
 drivers/usb/dwc2/gadget.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index b7368df..ce6a3cf 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -2522,11 +2522,22 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
                break;
        }
 
+       /* If fifo is already allocated for this ep */
+       if (hs_ep->fifo_index) {
+               size =  hs_ep->ep.maxpacket * hs_ep->mc;
+               /* If bigger fifo is required deallocate current one */
+               if (size > hs_ep->fifo_size) {
+                       hsotg->fifo_map &= ~(1 << hs_ep->fifo_index);
+                       hs_ep->fifo_index = 0;
+                       hs_ep->fifo_size = 0;
+               }
+       }
+
        /*
         * if the hardware has dedicated fifos, we must give each IN EP
         * a unique tx-fifo even if it is non-periodic.
         */
-       if (dir_in && hsotg->dedicated_fifos) {
+       if (dir_in && hsotg->dedicated_fifos && !hs_ep->fifo_index) {
                u32 fifo_index = 0;
                u32 fifo_size = UINT_MAX;
                size = hs_ep->ep.maxpacket*hs_ep->mc;
-- 
1.9.1

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

Reply via email to