misc musb tweaks
Subsystems (2)
PATCH 1/1 misc musb tweaks
From: Alan Stern <[email protected]>
The patch below fixes a few minor infelicities.
--- drivers/usb/musb/musb_host.c | 6 +++--- drivers/usb/musb/musb_host.h | 9 ++++----- drivers/usb/musb/musb_virthub.c | 14 +++++++++----- 3 files changed, 16 insertions(+), 13 deletions(-)
drivers/usb/musb/musb_host.c +3 -3
@@ -1513,9 +1513,9 @@ void musb_host_rx(struct musb *musb, u8#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) {
drivers/usb/musb/musb_virthub.c +9 -5
@@ -202,6 +202,7 @@ void musb_root_disconnect(struct musb *m/*---------------------------------------------------------------------*/ +/* 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);
@@ -228,14 +229,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:
@@ -248,7 +252,7 @@ int musb_hub_control( }break ;case ClearPortFeature: -if (wIndex !=1 ) +if ((wIndex &0xff ) !=1 ) goto error;switch (wValue) {
@@ -302,12 +306,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 );
drivers/usb/musb/musb_host.h +4 -5
@@ -37,13 +37,12 @@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(s {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(struc 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
Quoted 3 lines · David Brownell
From: Alan Stern <[email protected]>
The patch below fixes a few minor infelicities.
Pushed, glad to see _the_ USB experts working on this thing :)
I guess we should still at least clean up the CONFIG_USB_INVENTRA_DMA sections in the common DMA code before submitting to linux-usb-devel.
What else should we still fix before submitting to linux-usb-devel?
Regards,
Tony
Quoted 2 lines · Tony Lindgren
I guess we should still at least clean up the
CONFIG_USB_INVENTRA_DMAsections in the common DMA code before submitting to linux-usb-devel.
That's ugly as all get-out, but not what I'd call a blocking issue.
It *should* be essentially an overhaul to the guts of the DMA glue:
there are {RX,TX}_{submit,complete}_{gadget,host} paths, which should get unified, then seriously retested on several platforms. That's not straightforward... and there's no reason not to do that *AFTER* the code goes upstream.
Similarly with the Blackfin (525?) support: that can be done after a upstream merge, too.
Quoted 1 line
What else should we still fix before submitting to linux-usb-devel?
I don't see much of a reason why it shouldn't go upstream "now"...
What we need is someone to create the patches. When I asked a while back, nobody really objected to "one huge patch" ... though I think breaking it down into
(a) drivers/usb/musb/*.[hc]
(b) the various platform hooks, in arch/ and include/asm-*/*
(c) kbuild stuff (Kconfig and Makefile updates)
would be best. That is, no need to split out the gadget side from the host side, or TUSB6010 from OMAP2430 from DaVinci, etc. (It'd also be good to have a MAINTAINERS entry...)
If someone did that part, and made sure the TUSB6010 stuff would build on some non-OMAP hardware (without DMA), I could sanity check it and sign off before sending it upstream. Dunno if it'd make 2.6.24, but I'd not rule it out.
- Dave