aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/s3c-hsotg.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 4a251458c61d..354fd456f8cc 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -91,7 +91,9 @@ struct s3c_hsotg_req;
91 * For periodic IN endpoints, we have fifo_size and fifo_load to try 91 * For periodic IN endpoints, we have fifo_size and fifo_load to try
92 * and keep track of the amount of data in the periodic FIFO for each 92 * and keep track of the amount of data in the periodic FIFO for each
93 * of these as we don't have a status register that tells us how much 93 * of these as we don't have a status register that tells us how much
94 * is in each of them. 94 * is in each of them. (note, this may actually be useless information
95 * as in shared-fifo mode periodic in acts like a single-frame packet
96 * buffer than a fifo)
95 */ 97 */
96struct s3c_hsotg_ep { 98struct s3c_hsotg_ep {
97 struct usb_ep ep; 99 struct usb_ep ep;
@@ -474,6 +476,14 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
474 476
475 size_left = S3C_DxEPTSIZ_XferSize_GET(epsize); 477 size_left = S3C_DxEPTSIZ_XferSize_GET(epsize);
476 478
479 /* if shared fifo, we cannot write anything until the
480 * previous data has been completely sent.
481 */
482 if (hs_ep->fifo_load != 0) {
483 s3c_hsotg_en_gsint(hsotg, S3C_GINTSTS_PTxFEmp);
484 return -ENOSPC;
485 }
486
477 dev_dbg(hsotg->dev, "%s: left=%d, load=%d, fifo=%d, size %d\n", 487 dev_dbg(hsotg->dev, "%s: left=%d, load=%d, fifo=%d, size %d\n",
478 __func__, size_left, 488 __func__, size_left,
479 hs_ep->size_loaded, hs_ep->fifo_load, hs_ep->fifo_size); 489 hs_ep->size_loaded, hs_ep->fifo_load, hs_ep->fifo_size);