Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[linux-flexiantxendom0-natty.git] / drivers / usb / gadget / langwell_udc.c
index dad278f..1eca8b4 100644 (file)
@@ -2225,6 +2225,7 @@ static void handle_setup_packet(struct langwell_udc *dev,
        u16     wValue = le16_to_cpu(setup->wValue);
        u16     wIndex = le16_to_cpu(setup->wIndex);
        u16     wLength = le16_to_cpu(setup->wLength);
+       u32     portsc1;
 
        dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
 
@@ -2313,6 +2314,28 @@ static void handle_setup_packet(struct langwell_udc *dev,
                                        dev->dev_status &= ~(1 << wValue);
                                }
                                break;
+                       case USB_DEVICE_TEST_MODE:
+                               dev_dbg(&dev->pdev->dev, "SETUP: TEST MODE\n");
+                               if ((wIndex & 0xff) ||
+                                       (dev->gadget.speed != USB_SPEED_HIGH))
+                                       ep0_stall(dev);
+
+                               switch (wIndex >> 8) {
+                               case TEST_J:
+                               case TEST_K:
+                               case TEST_SE0_NAK:
+                               case TEST_PACKET:
+                               case TEST_FORCE_EN:
+                                       if (prime_status_phase(dev, EP_DIR_IN))
+                                               ep0_stall(dev);
+                                       portsc1 = readl(&dev->op_regs->portsc1);
+                                       portsc1 |= (wIndex & 0xf00) << 8;
+                                       writel(portsc1, &dev->op_regs->portsc1);
+                                       goto end;
+                               default:
+                                       rc = -EOPNOTSUPP;
+                               }
+                               break;
                        default:
                                rc = -EOPNOTSUPP;
                                break;