]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
misc musb tweaks
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 12 Oct 2007 21:26:00 +0000 (14:26 -0700)
committerTony Lindgren <tony@atomide.com>
Sat, 13 Oct 2007 02:46:44 +0000 (19:46 -0700)
The patch below fixes a few minor infelicities.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
drivers/usb/musb/musb_host.c
drivers/usb/musb/musb_host.h
drivers/usb/musb/musb_virthub.c

index 4eeff91b9268634b77edcf4ce98011574e61097e..d8ea84d3de37509ffb13922841f2140ab4521a01 100644 (file)
@@ -1513,9 +1513,9 @@ void musb_host_rx(struct musb *musb, u8 epnum)
 
 #ifdef CONFIG_USB_INVENTRA_DMA
                /* done if urb buffer is full or short packet is recd */
-               done = ((urb->actual_length + xfer_len) >=
-                               urb->transfer_buffer_length)
-                       || (dma->actual_len & (qh->maxpacket - 1));
+               done = (urb->actual_length + xfer_len >=
+                               urb->transfer_buffer_length
+                       || dma->actual_len < qh->maxpacket);
 
                /* send IN token for next packet, without AUTOREQ */
                if (!done) {
index d7f546f17428d225704af96fc43a22a7d11dfe6a..77bcdb9d5b32d93c1fd77433bce4821d9ab9c4bd 100644 (file)
 
 static inline struct usb_hcd *musb_to_hcd(struct musb *musb)
 {
-       return (struct usb_hcd *) (((void *)musb)
-                       - offsetof(struct usb_hcd, hcd_priv));
+       return container_of((void *) musb, struct usb_hcd, hcd_priv);
 }
 
 static inline struct musb *hcd_to_musb(struct usb_hcd *hcd)
 {
-       return (void *) hcd->hcd_priv;
+       return (struct musb *) (hcd->hcd_priv);
 }
 
 /* stored in "usb_host_endpoint.hcpriv" for scheduled endpoints */
@@ -77,7 +76,7 @@ static inline struct musb_qh *first_qh(struct list_head *q)
 {
        if (list_empty(q))
                return NULL;
-       return container_of(q->next, struct musb_qh, ring);
+       return list_entry(q->next, struct musb_qh, ring);
 }
 
 
@@ -102,7 +101,7 @@ static inline struct urb *next_urb(struct musb_qh *qh)
        queue = &qh->hep->urb_list;
        if (list_empty(queue))
                return NULL;
-       return container_of(queue->next, struct urb, urb_list);
+       return list_entry(queue->next, struct urb, urb_list);
 #else
        return NULL;
 #endif
index 22b1d5e435efe0a5070c79aab9189ebf42845a41..10b9089d5841faa23d321b706e7254276b02982d 100644 (file)
@@ -203,6 +203,7 @@ void musb_root_disconnect(struct musb *musb)
 
 /*---------------------------------------------------------------------*/
 
+/* Caller may or may not hold musb->lock */
 int musb_hub_status_data(struct usb_hcd *hcd, char *buf)
 {
        struct musb     *musb = hcd_to_musb(hcd);
@@ -229,14 +230,17 @@ int musb_hub_control(
        int             retval = 0;
        unsigned long   flags;
 
-       if (unlikely(!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)))
+       spin_lock_irqsave(&musb->lock, flags);
+
+       if (unlikely(!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))) {
+               spin_unlock_irqrestore(&musb->lock, flags);
                return -ESHUTDOWN;
+       }
 
        /* hub features:  always zero, setting is a NOP
         * port features: reported, sometimes updated when host is active
         * no indicators
         */
-       spin_lock_irqsave(&musb->lock, flags);
        switch (typeReq) {
        case ClearHubFeature:
        case SetHubFeature:
@@ -249,7 +253,7 @@ int musb_hub_control(
                }
                break;
        case ClearPortFeature:
-               if (wIndex != 1)
+               if ((wIndex & 0xff) != 1)
                        goto error;
 
                switch (wValue) {
@@ -303,12 +307,12 @@ int musb_hub_control(
 
                /* finish RESET signaling? */
                if ((musb->port1_status & USB_PORT_STAT_RESET)
-                               && time_after(jiffies, musb->rh_timer))
+                               && time_after_eq(jiffies, musb->rh_timer))
                        musb_port_reset(musb, false);
 
                /* finish RESUME signaling? */
                if ((musb->port1_status & MUSB_PORT_STAT_RESUME)
-                               && time_after(jiffies, musb->rh_timer)) {
+                               && time_after_eq(jiffies, musb->rh_timer)) {
                        u8              power;
 
                        power = musb_readb(musb->mregs, MUSB_POWER);