diff --git a/patches/kernel/v2.6.39/0009-at91-udc-force-full-speed.patch b/patches/kernel/v2.6.39/0009-at91-udc-force-full-speed.patch new file mode 100644 index 0000000000000000000000000000000000000000..870e17743fb35b68f2c8b259d7c010185c8df559 --- /dev/null +++ b/patches/kernel/v2.6.39/0009-at91-udc-force-full-speed.patch @@ -0,0 +1,48 @@ +From 1402207cdb93a0f12ef5b544184c17b35d4ffd12 Mon Sep 17 00:00:00 2001 +From: Alessandro Rubini <rubini@gnudd.com> +Date: Tue, 17 Jun 2014 10:47:30 +0200 +Subject: [PATCH 9/9] at91 udc: force full speed + +Some WRS speciments won't work correctly with automatic speed setup. +This patch forces full-speed on the device (instead of the +autodetected high-speed), and thus they work. + +Speed is not a problem anyways, because it is just a serial port. + +Signed-off-by: Alessandro Rubini <rubini@gnudd.com> +--- + drivers/usb/gadget/atmel_usba_udc.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c +index e7c65a4..bd6ccfb 100644 +--- a/drivers/usb/gadget/atmel_usba_udc.c ++++ b/drivers/usb/gadget/atmel_usba_udc.c +@@ -1158,12 +1158,12 @@ static int do_test_mode(struct usba_udc *udc) + break; + case 0x0300: + /* +- * Test_SE0_NAK: Force high-speed mode and set up ep0 ++ * Test_SE0_NAK: Force full-speed mode and set up ep0 + * for Bulk IN transfers + */ + ep = &usba_ep[0]; + usba_writel(udc, TST, +- USBA_BF(SPEED_CFG, USBA_SPEED_CFG_FORCE_HIGH)); ++ USBA_BF(SPEED_CFG, USBA_SPEED_CFG_FORCE_FULL)); + usba_ep_writel(ep, CFG, + USBA_BF(EPT_SIZE, USBA_EPT_SIZE_64) + | USBA_EPT_DIR_IN +@@ -1832,6 +1832,9 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, + toggle_bias(1); + usba_writel(udc, CTRL, USBA_ENABLE_MASK); + usba_writel(udc, INT_ENB, USBA_END_OF_RESET); ++ /* Also, force full spedd or sometimes it won't work on WRS */ ++ usba_writel(udc, TST, ++ USBA_BF(SPEED_CFG, USBA_SPEED_CFG_FORCE_FULL)); + } + spin_unlock_irqrestore(&udc->lock, flags); + +-- +1.7.7.2 +