diff options
author | Pratyush Anand <pratyush.anand@st.com> | 2012-06-25 13:10:43 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2012-07-02 03:02:07 -0400 |
commit | 08f0d96670c53898b4154e7945e77cdd966003f7 (patch) | |
tree | 52dca96f5bef8c30131cd9b653be603b2f59fc7d | |
parent | 5c81ababecd7ddae08ca944a65d8030cd393013c (diff) |
usb: dwc3: correct set_halt implementation for ep0
set_halt for ep0 is called to stall a deferred control responses by the
gadget. We already have a function to stall default control endpoint.
This patch points set_halt for ep0 to the already available function.
Signed-off-by: Pratyush Anand <pratyush.anand@st.com>
Signed-off-by: Michel Sanches <michel.sanches@st.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r-- | drivers/usb/dwc3/ep0.c | 10 | ||||
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 7 | ||||
-rw-r--r-- | drivers/usb/dwc3/gadget.h | 1 |
3 files changed, 16 insertions, 2 deletions
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 8244eb53082e..1315e787a316 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c | |||
@@ -225,6 +225,16 @@ static void dwc3_ep0_stall_and_restart(struct dwc3 *dwc) | |||
225 | dwc3_ep0_out_start(dwc); | 225 | dwc3_ep0_out_start(dwc); |
226 | } | 226 | } |
227 | 227 | ||
228 | int dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value) | ||
229 | { | ||
230 | struct dwc3_ep *dep = to_dwc3_ep(ep); | ||
231 | struct dwc3 *dwc = dep->dwc; | ||
232 | |||
233 | dwc3_ep0_stall_and_restart(dwc); | ||
234 | |||
235 | return 0; | ||
236 | } | ||
237 | |||
228 | void dwc3_ep0_out_start(struct dwc3 *dwc) | 238 | void dwc3_ep0_out_start(struct dwc3 *dwc) |
229 | { | 239 | { |
230 | int ret; | 240 | int ret; |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index d98549a7b8b0..13f257db2437 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -1268,7 +1268,10 @@ static int dwc3_gadget_ep_set_wedge(struct usb_ep *ep) | |||
1268 | dep->flags |= DWC3_EP_WEDGE; | 1268 | dep->flags |= DWC3_EP_WEDGE; |
1269 | spin_unlock_irqrestore(&dwc->lock, flags); | 1269 | spin_unlock_irqrestore(&dwc->lock, flags); |
1270 | 1270 | ||
1271 | return dwc3_gadget_ep_set_halt(ep, 1); | 1271 | if (dep->number == 0 || dep->number == 1) |
1272 | return dwc3_gadget_ep0_set_halt(ep, 1); | ||
1273 | else | ||
1274 | return dwc3_gadget_ep_set_halt(ep, 1); | ||
1272 | } | 1275 | } |
1273 | 1276 | ||
1274 | /* -------------------------------------------------------------------------- */ | 1277 | /* -------------------------------------------------------------------------- */ |
@@ -1286,7 +1289,7 @@ static const struct usb_ep_ops dwc3_gadget_ep0_ops = { | |||
1286 | .free_request = dwc3_gadget_ep_free_request, | 1289 | .free_request = dwc3_gadget_ep_free_request, |
1287 | .queue = dwc3_gadget_ep0_queue, | 1290 | .queue = dwc3_gadget_ep0_queue, |
1288 | .dequeue = dwc3_gadget_ep_dequeue, | 1291 | .dequeue = dwc3_gadget_ep_dequeue, |
1289 | .set_halt = dwc3_gadget_ep_set_halt, | 1292 | .set_halt = dwc3_gadget_ep0_set_halt, |
1290 | .set_wedge = dwc3_gadget_ep_set_wedge, | 1293 | .set_wedge = dwc3_gadget_ep_set_wedge, |
1291 | }; | 1294 | }; |
1292 | 1295 | ||
diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h index 39ced0b08515..99e6d7248820 100644 --- a/drivers/usb/dwc3/gadget.h +++ b/drivers/usb/dwc3/gadget.h | |||
@@ -111,6 +111,7 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state); | |||
111 | void dwc3_ep0_interrupt(struct dwc3 *dwc, | 111 | void dwc3_ep0_interrupt(struct dwc3 *dwc, |
112 | const struct dwc3_event_depevt *event); | 112 | const struct dwc3_event_depevt *event); |
113 | void dwc3_ep0_out_start(struct dwc3 *dwc); | 113 | void dwc3_ep0_out_start(struct dwc3 *dwc); |
114 | int dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value); | ||
114 | int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request, | 115 | int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request, |
115 | gfp_t gfp_flags); | 116 | gfp_t gfp_flags); |
116 | int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value); | 117 | int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value); |