aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Baldyga <r.baldyga@samsung.com>2013-09-19 05:50:17 -0400
committerFelipe Balbi <balbi@ti.com>2013-10-15 09:42:40 -0400
commitab93e014f35374a8169b0f465fccee69e04ea34c (patch)
treeb083f58b6695f417810b9ed3f4ef4592b4054a01
parentb8798636798ee04feb0f1bb87eec0027e3f68d98 (diff)
usb: gadget: s3c-hsotg: fix "protocol stall" handling
After normal handling of SetupDone interrupt, XferCompl interrupt occurs, and then we enqueue new setup request. But when ep0 is stalled, there is no XferCompl, so we have to enqueue setup request immediately after stalling ep. Otherwise incoming control requests won't be processed correctly. Signed-off-by: Robert Baldyga <r.baldyga@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/gadget/s3c-hsotg.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 93f786669dd5..4faf5e70e093 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -1164,6 +1164,8 @@ static int s3c_hsotg_process_req_feature(struct s3c_hsotg *hsotg,
1164 return 1; 1164 return 1;
1165} 1165}
1166 1166
1167static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg);
1168
1167/** 1169/**
1168 * s3c_hsotg_process_control - process a control request 1170 * s3c_hsotg_process_control - process a control request
1169 * @hsotg: The device state 1171 * @hsotg: The device state
@@ -1263,11 +1265,15 @@ static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg,
1263 * don't believe we need to anything more to get the EP 1265 * don't believe we need to anything more to get the EP
1264 * to reply with a STALL packet 1266 * to reply with a STALL packet
1265 */ 1267 */
1268
1269 /*
1270 * complete won't be called, so we enqueue
1271 * setup request here
1272 */
1273 s3c_hsotg_enqueue_setup(hsotg);
1266 } 1274 }
1267} 1275}
1268 1276
1269static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg);
1270
1271/** 1277/**
1272 * s3c_hsotg_complete_setup - completion of a setup transfer 1278 * s3c_hsotg_complete_setup - completion of a setup transfer
1273 * @ep: The endpoint the request was on. 1279 * @ep: The endpoint the request was on.