diff options
author | David Howells <dhowells@redhat.com> | 2006-12-05 09:37:56 -0500 |
---|---|---|
committer | David Howells <dhowells@warthog.cambridge.redhat.com> | 2006-12-05 09:37:56 -0500 |
commit | 4c1ac1b49122b805adfa4efc620592f68dccf5db (patch) | |
tree | 87557f4bc2fd4fe65b7570489c2f610c45c0adcd /drivers/usb/gadget/net2280.c | |
parent | c4028958b6ecad064b1a6303a6a5906d4fe48d73 (diff) | |
parent | d916faace3efc0bf19fe9a615a1ab8fa1a24cd93 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
drivers/infiniband/core/iwcm.c
drivers/net/chelsio/cxgb2.c
drivers/net/wireless/bcm43xx/bcm43xx_main.c
drivers/net/wireless/prism54/islpci_eth.c
drivers/usb/core/hub.h
drivers/usb/input/hid-core.c
net/core/netpoll.c
Fix up merge failures with Linus's head and fix new compilation failures.
Signed-Off-By: David Howells <dhowells@redhat.com>
Diffstat (limited to 'drivers/usb/gadget/net2280.c')
-rw-r--r-- | drivers/usb/gadget/net2280.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index 3acc896a5d4c..0b590831582c 100644 --- a/drivers/usb/gadget/net2280.c +++ b/drivers/usb/gadget/net2280.c | |||
@@ -1040,6 +1040,7 @@ net2280_queue (struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags) | |||
1040 | 1040 | ||
1041 | } /* else the irq handler advances the queue. */ | 1041 | } /* else the irq handler advances the queue. */ |
1042 | 1042 | ||
1043 | ep->responded = 1; | ||
1043 | if (req) | 1044 | if (req) |
1044 | list_add_tail (&req->queue, &ep->queue); | 1045 | list_add_tail (&req->queue, &ep->queue); |
1045 | done: | 1046 | done: |
@@ -2188,7 +2189,8 @@ static void handle_ep_small (struct net2280_ep *ep) | |||
2188 | ep->stopped = 1; | 2189 | ep->stopped = 1; |
2189 | set_halt (ep); | 2190 | set_halt (ep); |
2190 | mode = 2; | 2191 | mode = 2; |
2191 | } else if (!req && !ep->stopped) | 2192 | } else if (ep->responded && |
2193 | !req && !ep->stopped) | ||
2192 | write_fifo (ep, NULL); | 2194 | write_fifo (ep, NULL); |
2193 | } | 2195 | } |
2194 | } else { | 2196 | } else { |
@@ -2203,7 +2205,7 @@ static void handle_ep_small (struct net2280_ep *ep) | |||
2203 | } else if (((t & (1 << DATA_OUT_PING_TOKEN_INTERRUPT)) | 2205 | } else if (((t & (1 << DATA_OUT_PING_TOKEN_INTERRUPT)) |
2204 | && req | 2206 | && req |
2205 | && req->req.actual == req->req.length) | 2207 | && req->req.actual == req->req.length) |
2206 | || !req) { | 2208 | || (ep->responded && !req)) { |
2207 | ep->dev->protocol_stall = 1; | 2209 | ep->dev->protocol_stall = 1; |
2208 | set_halt (ep); | 2210 | set_halt (ep); |
2209 | ep->stopped = 1; | 2211 | ep->stopped = 1; |
@@ -2469,6 +2471,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat) | |||
2469 | /* we made the hardware handle most lowlevel requests; | 2471 | /* we made the hardware handle most lowlevel requests; |
2470 | * everything else goes uplevel to the gadget code. | 2472 | * everything else goes uplevel to the gadget code. |
2471 | */ | 2473 | */ |
2474 | ep->responded = 1; | ||
2472 | switch (u.r.bRequest) { | 2475 | switch (u.r.bRequest) { |
2473 | case USB_REQ_GET_STATUS: { | 2476 | case USB_REQ_GET_STATUS: { |
2474 | struct net2280_ep *e; | 2477 | struct net2280_ep *e; |
@@ -2537,6 +2540,7 @@ delegate: | |||
2537 | u.r.bRequestType, u.r.bRequest, | 2540 | u.r.bRequestType, u.r.bRequest, |
2538 | w_value, w_index, w_length, | 2541 | w_value, w_index, w_length, |
2539 | readl (&ep->regs->ep_cfg)); | 2542 | readl (&ep->regs->ep_cfg)); |
2543 | ep->responded = 0; | ||
2540 | spin_unlock (&dev->lock); | 2544 | spin_unlock (&dev->lock); |
2541 | tmp = dev->driver->setup (&dev->gadget, &u.r); | 2545 | tmp = dev->driver->setup (&dev->gadget, &u.r); |
2542 | spin_lock (&dev->lock); | 2546 | spin_lock (&dev->lock); |