From fa2a320a42f7f8cdaec1e761ce3e645089b68747 Mon Sep 17 00:00:00 2001 From: Fabian Godehardt Date: Mon, 7 Feb 2011 12:53:05 +0200 Subject: [PATCH] --- yaml --- r: 235309 b: refs/heads/master c: 16f08a08d8148945022eb7d5ebb89e6ee8029f91 h: refs/heads/master i: 235307: d6ccf0ecb442ce39081e62383207b771c48f6071 v: v3 --- [refs] | 2 +- trunk/drivers/usb/gadget/s3c2410_udc.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 186a5b7b352b..a383d3127ad7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c17f459c6ea5b569825445279fa21adb3cf3067f +refs/heads/master: 16f08a08d8148945022eb7d5ebb89e6ee8029f91 diff --git a/trunk/drivers/usb/gadget/s3c2410_udc.c b/trunk/drivers/usb/gadget/s3c2410_udc.c index c2448950a8d8..2b025200a69a 100644 --- a/trunk/drivers/usb/gadget/s3c2410_udc.c +++ b/trunk/drivers/usb/gadget/s3c2410_udc.c @@ -902,7 +902,7 @@ static irqreturn_t s3c2410_udc_irq(int dummy, void *_dev) int pwr_reg; int ep0csr; int i; - u32 idx; + u32 idx, idx2; unsigned long flags; spin_lock_irqsave(&dev->lock, flags); @@ -1017,6 +1017,20 @@ static irqreturn_t s3c2410_udc_irq(int dummy, void *_dev) } } + /* what else causes this interrupt? a receive! who is it? */ + if (!usb_status && !usbd_status && !pwr_reg && !ep0csr) { + for (i = 1; i < S3C2410_ENDPOINTS; i++) { + idx2 = udc_read(S3C2410_UDC_INDEX_REG); + udc_write(i, S3C2410_UDC_INDEX_REG); + + if (udc_read(S3C2410_UDC_OUT_CSR1_REG) & 0x1) + s3c2410_udc_handle_ep(&dev->ep[i]); + + /* restore index */ + udc_write(idx2, S3C2410_UDC_INDEX_REG); + } + } + dprintk(DEBUG_VERBOSE, "irq: %d s3c2410_udc_done.\n", IRQ_USBD); /* Restore old index */