summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Svoboda <msvoboda@ra.rockwell.com>2006-05-29 03:34:00 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2006-06-21 15:04:18 -0700
commit043ea18b2e145c4c9cb3c30757a65fe0f1678a35 (patch)
tree8d5faa202172a6b13bb4ebd4682ff822454b7963
parent44df45a09c7c20bbd641b1c30b6406d54ba7e2c8 (diff)
downloadlinux-3.10-043ea18b2e145c4c9cb3c30757a65fe0f1678a35.tar.gz
linux-3.10-043ea18b2e145c4c9cb3c30757a65fe0f1678a35.tar.bz2
linux-3.10-043ea18b2e145c4c9cb3c30757a65fe0f1678a35.zip
[PATCH] usb gadget: update pxa2xx_udc.c driver to fully support IXP4xx platform
This patch adds IXP465 into the list of known devices and adds IXP425 and IXP465 to the list of devices that have cfr. This is not described in the hardware documentation, but without it driver won't work. Workaround (#if 1) that seemed to get rid of lost status irqs is disabled for IXP4XX as it caused freezes during testing of control messages. No lost irqs are visible on IXP4XX. Driver survived tests running over night without any visible problems. Signed-off-by: Milan Svoboda <msvoboda@ra.rockwell.com> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/gadget/pxa2xx_udc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/gadget/pxa2xx_udc.c b/drivers/usb/gadget/pxa2xx_udc.c
index af63d8236f4..269ce7f4ad6 100644
--- a/drivers/usb/gadget/pxa2xx_udc.c
+++ b/drivers/usb/gadget/pxa2xx_udc.c
@@ -60,7 +60,7 @@
#include <linux/usb_ch9.h>
#include <linux/usb_gadget.h>
-#include <asm/arch/udc.h>
+#include <asm/arch/hardware/intel_udc.h>
/*
@@ -547,6 +547,7 @@ write_ep0_fifo (struct pxa2xx_ep *ep, struct pxa2xx_request *req)
count = req->req.length;
done (ep, req, 0);
ep0_idle(ep->dev);
+#ifndef CONFIG_ARCH_IXP4XX
#if 1
/* This seems to get rid of lost status irqs in some cases:
* host responds quickly, or next request involves config
@@ -567,6 +568,7 @@ write_ep0_fifo (struct pxa2xx_ep *ep, struct pxa2xx_request *req)
} while (count);
}
#endif
+#endif
} else if (ep->dev->req_pending)
ep0start(ep->dev, 0, "IN");
return is_short;
@@ -2429,6 +2431,7 @@ static struct pxa2xx_udc memory = {
#define PXA210_B1 0x00000123
#define PXA210_B0 0x00000122
#define IXP425_A0 0x000001c1
+#define IXP465_AD 0x00000200
/*
* probe - binds to the platform device
@@ -2465,6 +2468,8 @@ static int __init pxa2xx_udc_probe(struct platform_device *pdev)
break;
#elif defined(CONFIG_ARCH_IXP4XX)
case IXP425_A0:
+ case IXP465_AD:
+ dev->has_cfr = 1;
out_dma = 0;
break;
#endif