musb->periodic[] flag was getting set for an endpoint even when only rx
or tx is used.This patch adds two field musb->in[16] and musb->out[16]
in place of musb->periodic[32] which will enable endpoint allocation
flag setting on rx/tx basis of an endpoint.

Signed-off-by: Ajay Kumar Gupta <[EMAIL PROTECTED]>
---
This patch is reworked and is now a seperate patch. Earlier it was a
part of below patch,
[MUSB: BULK request on different available endpoints]
http://marc.info/?l=linux-usb&m=122335817727285&w=2

I will resend above patch [BULK request on different available endpoints]
which will be seperate and will not have fix for endpoint allocation logic.

 drivers/usb/musb/musb_core.h |    3 ++-
 drivers/usb/musb/musb_host.c |   13 ++++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index 8222725..b2d15a6 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -331,7 +331,8 @@ struct musb {
        struct list_head        control;        /* of musb_qh */
        struct list_head        in_bulk;        /* of musb_qh */
        struct list_head        out_bulk;       /* of musb_qh */
-       struct musb_qh          *periodic[32];  /* tree of interrupt+iso */
+       struct musb_qh  *in[16];
+       struct musb_qh  *out[16];
 #endif
 
        /* called with IRQs blocked; ON/nonzero implies starting a session,
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 8b4be01..bb42ba6 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -385,7 +385,10 @@ musb_giveback(struct musb_qh *qh, struct urb *urb, int 
status)
                         * de-allocated if it's tracked and allocated;
                         * and where we'd update the schedule tree...
                         */
-                       musb->periodic[ep->epnum] = NULL;
+                       if (is_in)
+                               musb->in[ep->epnum] = NULL;
+                       else
+                               musb->out[ep->epnum] = NULL;
                        kfree(qh);
                        qh = NULL;
                        break;
@@ -1715,7 +1718,8 @@ static int musb_schedule(
        for (epnum = 1; epnum < musb->nr_endpoints; epnum++) {
                int     diff;
 
-               if (musb->periodic[epnum])
+               if ((is_in && musb->in[epnum]) ||
+                       (!is_in && musb->out[epnum]))
                        continue;
                hw_ep = &musb->endpoints[epnum];
                if (hw_ep == musb->bulk_ep)
@@ -1736,7 +1740,10 @@ static int musb_schedule(
 
        idle = 1;
        hw_ep = musb->endpoints + best_end;
-       musb->periodic[best_end] = qh;
+       if (is_in)
+               musb->in[best_end] = qh;
+       else
+               musb->out[best_end] = qh;
        DBG(4, "qh %p periodic slot %d\n", qh, best_end);
 success:
        qh->hw_ep = hw_ep;
-- 
1.5.6

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

Reply via email to